Laden...

Berechtigung auf einem Verzeichnis ermitteln

Erstellt von Koerner vor 19 Jahren Letzter Beitrag vor 18 Jahren 11.014 Views
K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren
Berechtigung auf einem Verzeichnis ermitteln

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

V
842 Beiträge seit 2003
vor 19 Jahren

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

K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren

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.

379 Beiträge seit 2004
vor 19 Jahren

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 🙂)

C
1.215 Beiträge seit 2004
vor 19 Jahren

das geht per "System.Management"-namespace...

grtz
chief

K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren

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 🤔

N
4.644 Beiträge seit 2004
vor 19 Jahren

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]

V
842 Beiträge seit 2003
vor 19 Jahren

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

F
529 Beiträge seit 2003
vor 19 Jahren

Eine Frage: Geht das eigentlich in Windowsversionen die älter sind als Windows 2003???

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

V
842 Beiträge seit 2003
vor 19 Jahren

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

C
1.215 Beiträge seit 2004
vor 19 Jahren

codehacker hat da schon den richtigen ansatz...

es geht, wie gesagt, per WMI.

dort findet man folgende klassen:

  • "Win32_LogicalFileSecuritySetting" // enthält sicherheitseinstellungen
  • "Win32_LogicalShareSecuritySetting" // dito für freigaben
  • "Win32_ACE" // kontrollisten-eintrag
  • "Win32_Trustee" // gültige SID (user, group etc...)

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

200 Beiträge seit 2004
vor 19 Jahren

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

C
1.215 Beiträge seit 2004
vor 19 Jahren

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

K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren

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.

379 Beiträge seit 2004
vor 19 Jahren

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

K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren

Hi,

Ich habe nun endlich ein brauchbares Beispiel zum ermitteln der Berechtigungen auf einem Verzeichnis gefunden. Den Link findet ihr hier.

R
139 Beiträge seit 2004
vor 19 Jahren

sehr schön danke 👍

posted by the real prince of persia

K
Koerner Themenstarter:in
16 Beiträge seit 2004
vor 19 Jahren

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?

379 Beiträge seit 2004
vor 19 Jahren

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

48 Beiträge seit 2005
vor 18 Jahren

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.

49.485 Beiträge seit 2005
vor 18 Jahren

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

48 Beiträge seit 2005
vor 18 Jahren

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.

D
1 Beiträge seit 2006
vor 18 Jahren
DaclObject = null

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 🙂