No se pueden modificar los permisos de ACL en C # en el directorio CommonAppDataPath

StackOverflow https://stackoverflow.com/questions/1440149

  •  10-07-2019
  •  | 
  •  

Pregunta

Así que estoy tratando de modificar los permisos para el grupo BUILTIN \ Users para al menos tener el derecho de acceso al sistema de archivos Modificar. Desafortunadamente, mis intentos de usar el siguiente código producen ACL sin cambios.

            SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
            DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName);
            FileSystemAccessRule accessRule 
                = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, AccessControlType.Allow);

            directorySecurity.ModifyAccessRule(AccessControlModification.Add,
                accessRule,
                out modified);

            Console.WriteLine(modified);

Los informes modificados son verdaderos en todos los casos, pero los permisos no se actualizan cuando los mira en las propiedades de la carpeta.

También he intentado agregar una regla de acceso para un SecurityIdentifier que aún no tenía una ACL para el directorio usando un código similar, sino solo AddAccessRule en lugar de modificar. A pesar de que el nuevo SecurityIdentifier apareció en la lista de permisos para el directorio, no tenía el acceso que especifiqué.

Estoy intentando modificar el acceso a un directorio propietario en Environment.SpecialFolders.CommonApplicationData del que es propietaria una cuenta de administrador. También estoy intentando modificar la ACL como administrador.

¿Alguien tiene alguna idea de lo que está mal con el código anterior o tiene algún recurso que pueda llevarme a la forma correcta de configurar la ACL usando las clases nativas .NET nativas?

¿Fue útil?

Solución

Lo descubrí con la ayuda de un amigo que trabaja en Microsoft. En realidad, el proceso que estaba usando para configurar la ACL fue preciso. Estaba interpretando los resultados incorrectamente. Básicamente, no es un problema configurar la ACL en un directorio de esta manera siempre que esté operando como administrador cuando intente realizar los cambios.

Permisos precisos para la carpeta estaban disponibles para ver (en Vista) por:

  1. Haga clic derecho en la carpeta en cuestión y seleccione propiedades
  2. Seleccione la pestaña Seguridad
  3. Haga clic en Avanzado
  4. Haga clic en Editar
  5. Seleccione la entidad para la que desea ver los permisos y haga clic en Editar.

Esta es la parte que me faltaba. La ruta CommonApplicationData ya tiene permisos establecidos para la entidad BUILTIN \ Users. Entonces, después de ejecutar mi código, en realidad termino con dos entidades. Uno dice Read & amp; Ejecutar y el otro dice Permisos especiales. Cuando edito la entidad con permisos especiales, en realidad veo que BUILTIN \ Users tienen acceso al directorio.

Realmente estaba buscando BUILTIN \ Users para tener acceso al directorio y a todas sus carpetas y objetos secundarios. Aquí hay un fragmento de código de lo que terminé usando. Pude confirmar que mi código funcionó a través de un arnés de prueba e inspeccionando manualmente las listas de ACL de archivos y directorios.

DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
FileSystemAccessRule accessRule
    = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, 
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow);

bool modified=false;
directorySecurity.ModifyAccessRule(AccessControlModification.Add,
    accessRule,
    out modified);

if (modified)
{
    source.Create(directorySecurity);
}
else
{
    source.Create();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top