Usando C # para obter uma lista de ACLs para servidores e unidades mapeadas

Os implementadores de mudança de produção para o nosso grupo de TI foram encarregados de revisar a segurança de todos os vários objetos do nosso grupo, principalmente para garantir que as pessoas que deixaram nosso emprego ou foram transferidas para outros grupos não tenham mais acesso ao nosso servidor compartilhamentos, diretórios da web, bancos de dados sql, etc. etc. Concluímos recentemente a parte SQL e temos um script reutilizável que pode ser executado anualmente (ou em qualquer frequência que surgirmos). Funcionou muito bem e auditamos 20 bancos de dados em 10 ou mais servidores em alguns minuto

Agora, para as coisas do servidor. Eu tenho um aplicativo que eu escrevi em C # usando o .NET 2.0 que varre recursivamente uma lista de diretórios e despeja as ACLs em um arquivo de texto. Isso funciona excelente. Na máquina local. Os caminhos UNC e mapeados não funcionam, recebo a seguinte mensagem de exceção: O processo não possui o privilégio 'SeSecurityPrivilege' necessário para esta operação.

Nesta linha:

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

Where di é um objeto DirectoryInfo enumerado em uma matriz DirectoryInfo [

Provavelmente não conseguiremos o privilégio SeSecurityPrivilege. No entanto, não acho que isso seja necessário. Posso abrir a pasta e clicar com o botão direito do mouse em propriedades, clicar na guia segurança e visualizá-la na GUI. EUdevemo também pode acessá-lo programaticament

Alguma idéia de como posso alterar esta seção do código para obter as permissões para a pasta de destin

private void CheckSecurity(DirectoryInfo[] DIArray)
{
    foreach (DirectoryInfo di in DIArray)
    {
        DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
        string sAccessInfo = string.Empty;

        foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
        {
            sAccessInfo += GetAceInformation(FSAR);
        }

        if (sAccessInfo != string.Empty)
        {
            // Write info to text file
        }
    }
}

private string GetAceInformation(FileSystemAccessRule ace)
{
    StringBuilder info = new StringBuilder();
    string line = string.Format("Account: {0}", ace.IdentityReference.Value);
    info.AppendLine(line);
    line = string.Format("Type: {0}", ace.AccessControlType);
    info.AppendLine(line);
    line = string.Format("Rights: {0}", ace.FileSystemRights);
    info.AppendLine(line);
    line = string.Format("Inherited ACE: {0}", ace.IsInherited);
    info.AppendLine(line);
    return info.ToString();
}

Edit: Como verificar a pasta remota para o atributo de leitura na ACL quando falha em obter o método "GetAccessControl ()" para a pasta raiz? (Se eu passar em \ server \ path, há erros ao obter as informações para \ server \ path).

A conta de usuário é uma conta de domínio e eu tenho permissões para ler a estrutura do arquivo. Eu posso ver a segurança nas propriedades da pasta / arquivos.

Vou verificar o monitor do processo, mas não tenho certeza de que será capaz de executá-lo no servidor (não sou um administrador no (s) servidor (es) em questão

questionAnswers(2)

yourAnswerToTheQuestion