Hallo allemiteinander,
ich würde gern in C# ermitteln welche User und Gruppen auf ein bestimmtes Verzeichnis oder eine Datei zugelassen sind. Hab aber leider keine Ahnung wie ich dieses Problem angehen soll. Vielen Dank im Voraus, bin dankbar für jeden Ratschlag.
Grüssle Markus
Hi!
Wenn ich mich recht erinner sollte das wie so vieles andere auch im Namespace System.DirecotyServices zu finden sein. Welche Funktionen/Klassen das sind musst du selbst nachsehen.
Code-Hacker
Danke, aber mit dem Namespace System.DirectoryService kann ich "nur" auf die Active Directory zugreifen und diese verändern und auswerten. Ich denke, dass ich das später gebrauchen kann wenn ich weiss welche Gruppen auf ein Verzeichnis zugelassen sind um diese auszuwerten. Ich habe aber leider immer noch nicht herausgefunden wie ich die Gruppen und ihre Berechtigungen auf einem Verzeichnis oder einer Datei ermitteln kann. Ich stellen mir das so vor: Ich ermittle die User und Gruppen auf einem bestimmten Netzwerkpfad und lasse mit die Gruppenmitglieder von der ActiveDirectory auflösen. Danach möchte ich die Gruppen und User in einer TreeView anzeigen. Soviel zur Theorie 🙂, doch praktisch weiss ich nicht wie ich die Gruppen ermitteln kann die auf das Verzeichnis zugelassen sind. Ich habe gestern Nachmittag auch mal ausgiebig gegoogelt hab aber nichts gefunden.
Hallo Koerner,
also ich habe ein ähnliches Problem und bin bis jetzt auch noch nicht weiter gekommen. Und zwas will ich gerne Berechtigungen für ein Verzeichnis vergeben, habe aber bis jetzt noch nichts sinnvolles gefunden.
Wenn ich doch noch was finde, was auch dir weiterhilft, dann schreibe ich dir 🙂)
das geht per "System.Management"-namespace...
grtz
chief
Original von Chief Brodie
das geht per "System.Management"-namespace...
in welcher Klasse soll so etwas enthalten sein? Hab mir gerade den namespace angeschaut, bin aber nicht schlau daraus geworden 🤔
Für Berechtigungen auf Dateizugriffe dient die Klasse System.Security.Permissions.FileIOPermission.
[edit]
Verdammt, ich sehe gerade das Du die Berechtigungen ermitteln willst und nicht festlegen. Sorry!
[/edit]
Hi!
Schon mal in der MSDN nachgesehen? Da findet man nicht immer unbedingt was man sucht, aber manchmal stößt man per Zufall auf Beispiele die in etwa das machen was man benötigt, da es zur Darstellung einer Klasse oder eines Namensbereiches sehr gut dient.
Ich habe mal ein bischen gesucht in der lokalen MSDN. Außer das du die mal alles was mit Dateien zu tun hat ansehen solltest habe ich im besonderen folgendes gefunden:
AccessControlList-Klasse:
"Enthält eine Liste von Zugriffssteuerungseinträgen, die Zugriffsrechte für einen oder mehrere Vertrauensnehmer angeben."
AccessControlEntry-Klasse:
"Gibt Zugriffsrechte für einen Vertrauensnehmer (einen Benutzer, eine Gruppe oder einen Computer) für die Ausführung anwendungsspezifischer Implementierungen allgemeiner Aufgaben an."
Such mal nach diesen in der MSDN, ich denke das hilft weiter.
EDIT: Da mich das ein wenig interessiert wo man soetwas findet (sehr gut für ein Systemüberwachungstool) solltest du mal nach folgendem Begriff suchen, am Besten in einer lokalen MSDN:
"Datei Zugriffsrechte"
"Zugriffssteuerung" ("Erläutert die Grundlagen der Zugriffssteuerung in Microsoft Windows.") bzw. "Zugriffsmodell"
Code-Hacker
Eine Frage: Geht das eigentlich in Windowsversionen die älter sind als Windows 2003???
--
mfg
Franknstein
Besuchen sie das VisualC++ - Forum
Hi!
Original von Franknstein
Eine Frage: Geht das eigentlich in Windowsversionen die älter sind als Windows 2003???
Was meinst du genau? Worauf beziehst du dich?
Code-Hacker
codehacker hat da schon den richtigen ansatz...
es geht, wie gesagt, per WMI.
dort findet man folgende klassen:
der zuständige namespace des framework ist "System.Mangement".
hierüber können die sicherheitseinstellungen ausgelesen und gesetzt werden.
es ist allerdings vorsicht geboten - berechtigungen werden auch dann geschrieben, wenn diese definitiv falsch und damit später unleserlich sind...
...wer hier fehler macht, kann sich ne menge probleme einhandeln!
seit winNT ist das prinzip der ACLs auf unterster system-ebene gleichbleibend - es ist also gleichgültig, ob man für winNT oder win2003 codet.
grtz
chief
Gehe ich richtig in der Annahme das Du abfragen möchtest, ob der Programmbenutzer volle Schreibrechte hat oder gar der Administrator ist? Grundsätzlich sollte darauf verzichtet werden Programme so zu schreiben das sie nur mit Administratorrechten laufen. Das würde Dir mit Sicherheit ab SP2 von Xp das Genick brechen. Nutze die Anwendungs- Verzeichnisse über die Environment aus dem .NET Framework. Darüber erhältst Du auch die „Eigenen Dateien“ des jeweils angemeldeten Benutzers. In den Verzeichnissen der anderen nicht angemeldeten Benutzer hast Du dann eh nix zu suchen, machst Du es doch stellst Du damit eine Potentielle Sicherheitslücke dar.
HTH
TOM_MUE
hmmm...
ich glaube, da muss ich dir widersprechen!
wer den security-descriptor eines objects auslesen kann, wird im einzelnen in den sicherheitsbeschreibungen festgelegt...
über den wert "AccessMask" eines ACE (AccessControlEntry) kann bestimmt werden, wer z.b. auch die berechtigungen lesen/schreiben bzw. den besitzer schreiben etc. darf...
grtz
chief
Hi,
gibt es irgendwo im Netz ein Beispiel dazu? Den ich werd aus der Hilfe des VisualStudio bzw. MSDN nicht so richtig schlau! Hab auch schon ein wenig rumgegoogelt, aber bisher noch nichts gefunden.
Hallo Koerner,
ich habe hier ein Beispiel gefunden:
http://www.codeproject.com/dotnet/adduseracetofile.asp
Da werden vorhandene User die Berechtigungen haben ausgegeben und ein neuer soll angelegt werden. Leider bekomme ich beim Anlegen immer einen Fehler 🤔
Und zwar:
System.Runtime.InteropServices.COMException (0x80070539): Die Struktur der Sicherheitskennung ist unzulässig.
at ActiveDs.ADsSecurityUtilityClass.SetSecurityDescriptor(Object varPath, Int32 lPathFormat, Object varData, Int32 lDataFormat)
at auth.TESTER.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\auth\webform1.aspx.cs:line 83
Kann damit jemand was anfangen ???
Habe das BEipeil kopiert und die entsprechnde DLL eingebunden... Ic hhabe auch versucht mal andere Nutzer anzulegen, aber da kommt immer das selbe. Verstehe das nich hmpf.
ciao Anke
Habt ihr euch das Beispiel schon reingezogen?
Es funktioniert wunderbar auf lokale Verzeichnisse und Netzlaufwerke. Leider bricht es bei DFS (Verteiltes Dateisystem) Verzeichnissen runter 🙁 (\Domäne\Standort\Verzeichnis). Hat jemand eine Idee wie ich es fertig bringe auch die Berechtigungen von DFS-Verzeichnissen auszuwerten?
Hmm, ich weiß nicht, ich versuche immer noch Rechte zu setzen, komme aber leider immer noch nicht weiter X( ich habe da ein Beispiel, aber da kommt immer so ein doofer Fehler, obwohl es so gehen soll... 8o
Hallo,
Ich habe nun endlich ein brauchbares Beispiel zum ermitteln der Berechtigungen auf einem Verzeichnis gefunden. Den Link findet ihr hier.
Der Link funktioniert leider nicht mehr. Weiß noch irgendjemand wo das war? Das würde ich nämlich auch brauchen...
Gruß
thomassa
"Versuche immer alles ein bißchen besser zu machen."
Zitat G.R.
Hallo thomassa,
bei mir geht der Link noch.
Aber davon angesehen müsste man mit .NET 2.0 das Problem direkt lösen können, weil .NET 2.0 Unterstützung für ACLs bietet.
herbivore
Hallo herbivore,
stimmt, jetzt tut er bei mir auch.
Aber davon angesehen müsste man mit .NET 2.0 das Problem direkt lösen können, weil .NET 2.0 Unterstützung für ACLs bietet.
Leider sind wir noch nicht auf .NET 2.0 umgestiegen!
Gruß
thomassa
"Versuche immer alles ein bißchen besser zu machen."
Zitat G.R.
Hi,
wie habt ihr den code zum laufen gebracht? Ich bekomme immer folgenden Fehler:
Win32_SecurityDescriptor
ControlFlags
DACL
Group
Owner
SACL
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei Tester.DumpACEs(ManagementBaseObject[] DaclObject) .....
Scheinbar ist DaclObject = null. Habt ihr eine Idee?
Danke 🙂