Pergunta

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 transferidas para outros grupos não tenham mais acesso aos compartilhamentos de servidor , diretórios da web, bancos de dados SQL, etc. etc. Recentemente, concluímos a parte SQL e temos um script reutilizável que pode ser executado anualmente (ou em qualquer frequência que criamos). Funcionou muito bem e auditamos 20 bancos de dados em 10 ou mais servidores com alguns minutos.

Agora, para as coisas do servidor. Eu tenho um aplicativo que escrevi em C# usando o .NET 2.0 que digitalizará recursivamente uma lista de diretórios e despejará 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);

Onde Di é um objeto DirectoryInfo enumerado de uma matriz DirectoryInfo [].

Provavelmente, não seremos capazes de receber o privilégio sesecurityprivilege. No entanto, não acho que isso deva ser necessário. Posso abrir a pasta e clicar com o botão direito do mouse para obter propriedades e clicar na guia de segurança e visualizá -la na GUI. EU deve ser capaz de acessá -lo programaticamente também.

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

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 eu verificaria a pasta remota para o Attrib de leitura na ACL quando falhar em obter o método "getAccessControl ()" para a pasta raiz? (Se eu passar no Server Path, ele erra para obter as informações para server path).

A conta de usuário é uma conta de domínio e tenho permissões para ler a estrutura do arquivo. Posso visualizar a segurança das propriedades da pasta/arquivos.

Vou verificar o monitor do processo, mas não tenho certeza se poderei executá -lo no servidor (não sou um administrador no (s) servidor (s) em questão).

Foi útil?

Solução

Você está recebendo o erro por causa da guia 'Auditoria', embora eu tenha certeza de que tudo o que você realmente deseja acessar na tela são os dados na guia 'Permissões'. O sesecurityprivilege controla o acesso ao SACL.

Tente mudar

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

para

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

Então você deve parar de receber o erro

Outras dicas

Verifique se a pasta remota concede o usuário executando os atributos de leitura do código no ACL.

Lembre -se também de que as permissões são resolvidas nas máquinas remotas (servidores); portanto, a associação ao grupo local (usuários e administradores) não pode incluir a conta de usuário em execução no cliente.

Tendo Monitor do processo Executar no servidor (filtrado nas pastas/arquivos em questão) pode ajudar a resolver detalhes de por que ele está falhando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top