Benutzer mit den meisten Antworten
Ordnerberechtigungen setzen Windows Server 2008 SP2

Frage
-
Hallo,
ich möchte Dateirechte auf einen Windows Server 2008 SP2 setzen.Die Applikation (mit .NET V4) wird mit Adminrechten gestartet (Application.manifest < requestedExecutionLevel level="requireAdministrator" uiaccess="false">).
Der Benutzer wird im Code zuvor angelegt, existiert also. Der Benutzer ist in keiner Gruppe drin. Ich habe es auch mit einen Benutzer aus der Gruppe Users / Benutzer probiert, leider ohne Erfolg.Warum gelingt es mir nicht, mit den folgenden Zeilen dem Benutzer alle Dateirechte zu geben?
Wenn ich den Ornerberechtigungen aufmache, sehe ich den angelegten Benutzer. Dieser hat keine Berechtigungen.
string folder = @"D:\test";
string user = Environment.MachineName + @"\" + localUserName;
FilesystemSecurity.AddDirectorySecurity(folder, user, FileSystemRights.FullControl, AccessControlType.Allow);
public void AddDirectorySecurity(string directoryPath, string identity,
System.Security.AccessControl.FileSystemRights fileSystemRights,
System.Security.AccessControl.AccessControlType accessControlType)
{
// Create a new DirectoryInfo object.
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(directoryPath);// Get a DirectorySecurity object that represents the current security settings.
System.Security.AccessControl.DirectorySecurity dirSecurity = dirInfo.GetAccessControl();// Add the FileSystemAccessRule to the security settings.
dirSecurity.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(identity,
fileSystemRights, accessControlType));// Set the new access settings.
dirInfo.SetAccessControl(dirSecurity);
}Leider habe ich nicht so viel Glück wie der User hier: http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/4728f330-8734-4a32-8167-6a0ca74f29cb
Habt Ihr Tips für mich?
Danke
Andreas
Antworten
-
Vielen Dank für Eure Hilfe. Ich habe viel gelernt ;-)
Es lag letztenendes an den Flags:
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit und PropagationFlags.None
Wenn ich die so übergebe, werden die Rechte gesetzt.
Gruß
Andreas
- Als Antwort markiert AndreasM85 Mittwoch, 19. Januar 2011 20:44
Alle Antworten
-
Hallo Andreas,
mal ein funktionierender Code aus alten Threads kopiert:
private void Form1_Load(object sender, EventArgs e) { SecurityIdentifier sidBenutzer = new SecurityIdentifier( WellKnownSidType.BuiltinUsersSid, null); SetPermissionFolder(@"c:\Test", sidBenutzer); } private void SetPermissionFolder(string path, IdentityReference user) { DirectoryInfo myDirectoryInfo = new DirectoryInfo(path); DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl(); FileSystemRights rights = FileSystemRights.Read | FileSystemRights.Modify; myDirectorySecurity.AddAccessRule(new FileSystemAccessRule( user, rights,AccessControlType.Allow)); myDirectoryInfo.SetAccessControl(myDirectorySecurity); }
[Verzeichnisse Berechtigung weitergeben]
http://www.ms-news.net/f824/verzeichnisse-berechtigung-weitergeben-9231655.html
ciao Frank -
Hallo Andreas,
Da kann so manches dazwischenfunken, schwer aus der Ferne zu sagen...
Da Du aber in Deinem Beitrag einerseits keine Ausnahmen erwähnst und andererseits die Rechtevergabe auch mit einem "normalen" Benutzer keinen sichtbaren Erfolg bringt (muss nicht heißen dass sie fehlschlägt), nehme ich an, dass dem betroffenen Benutzer entweder direkt oder in geerbter Form (explizit oder über Gruppenzugehörigkeit) die Rechte verweigert wurden. Kann das sein? - In einem solchen Fall müßtest Du die Verweigerungs-ACEs erst rausnehmen bevor Du die neue Zulassungs-ACE hinzufügst:FileSystemAccessRule accessRuleDeny = new FileSystemAccessRule(identity, fileSystemRights, AccessControlType.Deny); dirSecurity.RemoveAccessRule(accessRuleDeny);
FileSystemSecurity.RemoveAccessRule-Methode (FileSystemAccessRule)
http://msdn.microsoft.com/de-de/library/zbfbabws.aspxFileSystemSecurity.RemoveAccessRuleAll-Methode (FileSystemAccessRule)
http://msdn.microsoft.com/de-de/library/f847a84z.aspx[Übrigens: Schon beim Setzen einer Zugriffsverweigerung wird man von Windows gewarnt: "Sie sind im Begriff einen Zugriffsverweigerungseintrag zu setzen. Zugriffsverweigerungen haben Vorrang vor Zugriffsgenehmigungen. Falls ein Benutzer Mitglied in zwei Gruppen ist, und einer Gruppe der Zugriff genehmigt und der anderen Grupp der Zugriff verweigert ist, wird dem Benutzer der Zugriff verweigert."]
Ob tatsächlich ein Deny-ACE Schuld am beschriebenen Verhalten ist, erfährst Du u.a. indem Du die Rechte auflistest:
AuthorizationRuleCollection ruleCollection = dirSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount) ); foreach (FileSystemAccessRule authorizationRule in ruleCollection) { Debug.WriteLine(string.Format("IdentityReference: {0}", authorizationRule.IdentityReference)); Debug.WriteLine(string.Format("AccessControlType: {0}", authorizationRule.AccessControlType)); Debug.WriteLine(string.Format("FileSystemRights: {0}", authorizationRule.FileSystemRights)); Debug.WriteLine(string.Format("IsInherited: {0}", authorizationRule.IsInherited)); }
Gruß
Marcel -
Der Tip mit der Zugriffsverweigerung ist gut ... Ich studiere morgen die Links und werde die Rechte des Verzeichnisses auflisten. Ich bin mir fast sicher, daß es keine Zugriffsverweigerung gibt. Ich prüfe es und werde berichten.
Danke erstmal.Andreas
-
Hallo Andreas,
siehe ggf. auch in meinen Links speziell u.a.:
[c# - An example of setting NTFS Directory / File ACLS]
http://blog.crowe.co.nz/archive/2007/08/25/c---An-example-of-setting-NTFS-Directory--File.aspxinsbesondere dort das:
// Remove any inheritable permissions from the path
RemoveInheritablePermissons(Path);
ciao Frank- Als Antwort vorgeschlagen Frank Dzaebel Donnerstag, 20. Januar 2011 06:00
-
Vielen Dank für Eure Hilfe. Ich habe viel gelernt ;-)
Es lag letztenendes an den Flags:
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit und PropagationFlags.None
Wenn ich die so übergebe, werden die Rechte gesetzt.
Gruß
Andreas
- Als Antwort markiert AndreasM85 Mittwoch, 19. Januar 2011 20:44