c# permissions filesystems file-permissions ntfs

c# - Duplicar GetAccessRules, FileSystemAccessRule entradas



permissions filesystems (1)

Obtendrá entradas de reglas separadas para reglas heredadas y para reglas establecidas explícitamente en esa carpeta. También hay una diferencia dependiendo de la configuración de propagación en cada regla. Por ejemplo, puede tener un conjunto de permisos que se establecen para propagarse a subcarpetas, y un conjunto diferente a archivos dentro de la carpeta. Su código también está obteniendo las reglas de auditoría (SACL) en la carpeta donde parece que solo desea los permisos de acceso (DACL).

Prueba esto:

protected void directoryInfo() { var di = new DirectoryInfo(Server.MapPath("/")); foreach (DirectoryInfo dir in di.GetDirectories()) { Response.Write(dir.FullName + "<br/>"); DirectorySecurity ds = dir.GetAccessControl(AccessControlSections.Access); foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) { string userName = fsar.IdentityReference.Value; string userRights = fsar.FileSystemRights.ToString(); string userAccessType = fsar.AccessControlType.ToString(); string ruleSource = fsar.IsInherited ? "Inherited" : "Explicit"; string rulePropagation = fsar.PropagationFlags.ToString(); string ruleInheritance = fsar.InheritanceFlags.ToString(); Response.Write(userName + " : " + userAccessType + " : " + userRights + " : " + ruleSource + " : " + rulePropagation + " : " + ruleInheritance + "<br/>"); } } }

El permiso ReadAndExecute que está viendo incluye el permiso " ReadAndExecute contenido de la carpeta". Puede verificar los permisos individuales utilizando el indicador apropiado en la enumeración FileSystemRights. Por ejemplo:

if (fsar.FileSystemRights && FileSystemRights.ListDirectory) Console.WriteLine("Has List Directory permission");

Obtengo un FileSystemAccessRule duplicado de este código a continuación:

C:/inetpub/wwwroot/AspInfo/Account BUILTIN/IIS_IUSRS : Allow : ReadAndExecute, Synchronize BUILTIN/IIS_IUSRS : Allow : -1610612736 NT SERVICE/TrustedInstaller : Allow : FullControl NT SERVICE/TrustedInstaller : Allow : 268435456

y no puedo averiguar qué o por qué es.

Y los permisos que se muestran no coinciden con lo que puedo ver con las propiedades del archivo FileManager. Por ejemplo, cómo encuentro el permiso "Mostrar contenido de carpeta" de esta iteración o similar. Si alguien sabe de un ejemplo dentro de los documentos de .NET sería útil.

protected void directoryInfo() { var di = new DirectoryInfo(Server.MapPath("/")); foreach (DirectoryInfo dir in di.GetDirectories()) { Response.Write(dir.FullName + "<br/>"); DirectorySecurity ds = dir.GetAccessControl(); foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) { string userName = fsar.IdentityReference.Value; string userRights = fsar.FileSystemRights.ToString(); string userAccessType = fsar.AccessControlType.ToString(); Response.Write(userName + " : " + userAccessType + " : " + userRights + "<br/>"); } } }