Laden...

Berechtigung für AD Gruppe zu "This Folder Only" verteilen

Erstellt von Tehral vor 2 Jahren Letzter Beitrag vor 2 Jahren 399 Views
T
Tehral Themenstarter:in
20 Beiträge seit 2013
vor 2 Jahren
Berechtigung für AD Gruppe zu "This Folder Only" verteilen

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

S
248 Beiträge seit 2008
vor 2 Jahren

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

T
Tehral Themenstarter:in
20 Beiträge seit 2013
vor 2 Jahren

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

463 Beiträge seit 2009
vor 2 Jahren

Nur mal so kurz meine Anmerkung dazu:

  • Zum Ändern der Berechtigungen benötigt das Programm/APP Administrationsrechte
  • Warum setzt du die Berechtigung nicht bei der Installation?
  • Berechtigungen werden normalerweise nur für Gruppen und nicht für Benutzer vergeben
  • Schau dir die Verwendung/Funktion von Vererbung(FileSystem) an