Ich habe ein paar Probleme mit Ordnerberechtigungen.
Ich möchte eine AD-Gruppe zu einem Ordner mit Änderungszugriff hinzufügen, aber dann einschränken.
Das Problem ist, dass ich nicht herausfinden konnte, wie ich eine Berechtigung auf "nur diesen Ordner" anwenden kann.
Das Ziel ist es, die folgenden Einschränkungen für einen Hauptordner festzulegen:
deny delete subfolders
deny delete
deny change permissions
deny take ownership
Ich habe ein Bild aus Windows angehängt wie es dort aussieht.
Weiss jemand wie das geht?
Vielen Dank und beste GRüsse
Hallo Tehral,
mit folgendem Code kannst du die Berechtigungen eines Ordners abrufen:
var info = new DirectoryInfo(path);
var accessControl = info.GetAccessControl();
var rules = accessControl.GetAccessRules(true, false, typeof(SecurityIdentifier));
foreach (FileSystemAccessRule rule in rules)
{
NTAccount account = (NTAccount)rule.IdentityReference.Translate(typeof(NTAccount));
...
}
Du kannst über die DirectorySecurity.AddAccessRule(FileSystemAccessRule) Methode deine gewünschte Regel hinzufügen.
Dass diese nur für den Ordner alleine gilt müsstest du glaube ich PropagationFlags.NoPropagateInherit verwenden (nicht getestet).
Du könntest diese Methode als Grundlage für dein Vorhaben anpassen:
public static void SetDirectoryAccess(
string path, string account, FileSystemRights access, AccessControlType controlType,
InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags propagationFlags = PropagationFlags.None)
{
DirectoryInfo info = new DirectoryInfo(path);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(new FileSystemAccessRule(account, access, inheritanceFlags, propagationFlags, controlType));
info.SetAccessControl(security);
}
Grüße
spooky
Vielen Dank für die Antwort Spook,
ich konnte das nun mit folgenden Code machen:
//set params for all access sets
AccessControlType DenyAccess = AccessControlType.Deny;
AccessControlType AllowAccess = AccessControlType.Allow;
InheritanceFlags inheritFlag = InheritanceFlags.None;
InheritanceFlags inheritFlag2 = InheritanceFlags.ContainerInherit;
InheritanceFlags inheritFlag3 = InheritanceFlags.ObjectInherit;
PropagationFlags propagationFlags = PropagationFlags.None;
FileSystemRights access = FileSystemRights.ChangePermissions;
FileSystemRights access2 = FileSystemRights.Delete;
FileSystemRights access3 = FileSystemRights.TakeOwnership;
FileSystemRights access4 = FileSystemRights.DeleteSubdirectoriesAndFiles;
FileSystemRights ReadAccess = FileSystemRights.ReadAndExecute;
FileSystemRights ModifyAccess = FileSystemRights.Modify;
DirectoryInfo info = new DirectoryInfo(strPath);
DirectorySecurity security = info.GetAccessControl();
//set read right for group
NTAccount GroupRead = new NTAccount(StrDomain, strGroupRead);
security.AddAccessRule(new FileSystemAccessRule(GroupRead, ReadAccess, inheritFlag2, propagationFlags, AllowAccess));
security.AddAccessRule(new FileSystemAccessRule(GroupRead, ReadAccess, inheritFlag3, propagationFlags, AllowAccess));
//set Modify right for group
NTAccount GroupModify = new NTAccount(StrDomain, strGoupModify);
security.AddAccessRule(new FileSystemAccessRule(GroupModify, ModifyAccess, inheritFlag2, propagationFlags, AllowAccess));
security.AddAccessRule(new FileSystemAccessRule(GroupModify, ModifyAccess, inheritFlag3, propagationFlags, AllowAccess));
//set special right group
security.AddAccessRule(new FileSystemAccessRule(groupModify, access, inheritFlag, propagationFlags, DenyAccess)); //ChangePermission
security.AddAccessRule(new FileSystemAccessRule(groupModify, access2, inheritFlag, propagationFlags, DenyAccess)); //Delete
security.AddAccessRule(new FileSystemAccessRule(groupModify, access3, inheritFlag, propagationFlags, DenyAccess)); //Ownership
security.AddAccessRule(new FileSystemAccessRule(groupModify, access4, inheritFlag, propagationFlags, DenyAccess)); //Delete subfiles and folders
//add rights to folder
info.SetAccessControl(security);
Am Ende habe ich nun einen Ordner mit einer Readgruppe, und einer Modifygruppe welche den Hauptordner nicht löschen, übernehmen und die Berechtigungen anpassen kann.
Dies ist wichtig damit ein User nicht ausversehen den Hauptfolder löschen kann.
Gruss,
Tehral
Nur mal so kurz meine Anmerkung dazu: