c# - DirectorySecurity définit des autorisations spéciales alors que FileSecurity ne le fait pas




1 Answers

La différence est la pertinence des indicateurs de propagation pour la sécurité de répertoire.

var accessRule = new FileSystemAccessRule(
    identity: group,
    fileSystemRights: FileSystemRights.FullControl,
    type: AccessControlType.Allow,
    inheritanceFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    propagationFlags: PropagationFlags.None);

Notez le paramètre inheritanceFlags . Si elle n'est pas spécifiée, la valeur par défaut est none, ce qui est classé comme "spécial".

Examinez les deux blocs de code suivants:

System.Security.AccessControl.DirectorySecurity dsec = System.IO.Directory.GetAccessControl(str);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
dsec.SetAccessRule(myrule);
System.IO.Directory.SetAccessControl(str,dsec);

et

System.Security.AccessControl.FileSecurity fsec = System.IO.File.GetAccessControl(file);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
fsec.SetAccessRule(myrule);
System.IO.File.SetAccessControl(file,fsec);

On s'attendrait à ce que les deux fassent exactement la même chose, un seul dans un répertoire et un autre dans un fichier. Et, à certains égards, ils le font. Dans les deux cas, l'objet du système de fichiers en question change de sorte que DOMAIN \ USERGROUP possède les autorisations effectives du contrôle total.

Cependant, la partie étrange est, quand vous faites un clic droit sur un fichier et affichez la sécurité, vous voyez ceci:

et quand vous faites un clic droit sur un dossier et affichez la sécurité, vous voyez ceci:

Si je vais alors dans Advanced-> Effective Permissions-> Select (DOMAINE \ USERGROUP), cela montre que les permissions effectives pour le dossier, pour ce groupe, sont Full Control (Toutes les cases sont cochées, pas seulement la Full Control Box Ce serait encore plus bizarre).

Ma question est, pourquoi est-il une différence dans l'effet d'une mise en œuvre presque identique et quelqu'un sait-il comment reproduire l'effet de l'application des autorisations sur les fichiers?




Related

c# .net permissions implementation