Pregunta

Los ejecutores del cambio de producción para nuestro grupo de TI tienen la tarea de revisar la seguridad para todos los diversos objetos en nuestro grupo, principalmente para asegurarse de que las personas que han salido de esta empresa de o han sido transferidos a otros grupos ya no tienen acceso a nuestros recursos compartidos del servidor, directorios web, bases de datos SQL, etc etc. completado recientemente la parte de SQL y tenemos un guión reutilizable que se puede ejecutar anualmente (o en cualquier frecuencia nos encontramos con). Se trabajó mucho y auditado 20 bases de datos a través de 10 o más servidores EL PLAZO unos minutos.

Ahora, para la materia de servidor. Tengo una aplicación que he escrito en C # con .NET 2.0 que forma recursiva leer la lista de directorios y volcar las ACL en un archivo de texto. Esto funciona excelente. En la máquina local. UNC y rutas asignadas no funcionan, me sale el siguiente mensaje de excepción:. El proceso no posee el privilegio 'SeSecurityPrivilege' que se requiere para esta operación

En esta línea:

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

Donde di es un objeto DirectoryInfo enumerado de una matriz DirectoryInfo [].

No es probable que va a ser capaz de ser concedido el privilegio SeSecurityPrivilege. Sin embargo, yo no creo que esto debería ser necesario. Puedo abrir la carpeta y haga clic derecho para las propiedades y haga clic en la pestaña de seguridad y verlo en la interfaz gráfica de usuario. I debe ser capaz de acceder a él mediante programación también.

¿Alguna idea sobre cómo puedo cambiar esta sección del código para obtener los permisos para la carpeta de destino?

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();
}

Editar: ¿Cómo iba a comprobar la carpeta remota para el attrib lectura en la ACL cuando falla en conseguir el método "GetAccessControl ()" para la carpeta raíz? (Si paso en \ servidor \ ruta, que los errores en conseguir la información de \ servidor \ ruta).

La cuenta de usuario es una cuenta de dominio y no tengo permisos para leer la estructura de archivos. Puedo ver la seguridad de las propiedades de las carpetas / archivos.

I se echa un vistazo al monitor de proceso, pero no estoy seguro de que voy a ser capaz de ejecutar en el servidor (no soy un administrador en el servidor (s) en cuestión).

¿Fue útil?

Solución

Su recibiendo el error debido a la pestaña 'auditoría', aunque estoy bastante seguro de que todo lo que realmente desea tener acceso en la pantalla son los datos de la ficha 'Permisos'. El SeSecurityPrivilege controla el acceso a la SACL.

Trate de cambiar

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

a

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

entonces debería dejar de recibir el error

Otros consejos

Compruebe que la carpeta remota otorga al usuario que ejecuta el código Atributos de lectura en la ACL.

Asimismo, recuerda que los permisos se resuelven en las máquinas remotas (servidor), grupo tan local (los usuarios y administradores) de miembros no pueden incluir la cuenta de usuario que se ejecuta en el cliente.

Process Monitor se ejecuta en el servidor (filtrada a las carpetas / archivos en cuestión) pueden ayudar a resolver los detalles de por qué está fallando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top