Die Implementierer für die Produktionsänderung für unsere IT-Gruppe wurden beauftragt, die Sicherheit für alle verschiedenen Objekte in unserer Gruppe zu überprüfen, hauptsächlich um sicherzustellen, dass Personen, die gegangen sind Unsere Mitarbeiter haben keine Zugriff auf unsere Serverfreigaben, Webverzeichnisse, SQL-Datenbanken usw. Wir haben vor kurzem den SQL-Teil abgeschlossen und haben ein wiederverwendbares Skript, das jährlich (oder mit beliebiger Häufigkeit) ausgeführt werden kann wir kommen auf). Es funktionierte großartig und wir überprüften 20 Datenbanken auf 10 oder so Servern mit ein paar Minuten.Verwenden von C#, um eine Liste der ACLs für Server und zugeordnete Laufwerke zu erhalten
Jetzt, für den Server Zeug. Ich habe eine Anwendung, die ich in C# mit .NET 2.0 geschrieben habe, die rekursiv eine Liste von Verzeichnissen scannt und die ACLs in eine Textdatei ablegt. Das funktioniert hervorragend. Auf dem lokalen Computer. UNC und zugeordnete Pfade funktionieren nicht. Ich erhalte die folgende Ausnahmebedingungsnachricht: Der Prozess besitzt nicht die Berechtigung 'SeSecurityPrivilege', die für diesen Vorgang erforderlich ist.
Auf dieser Linie:
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
Wo di ein Directory Objekt aus einem Directory [] Array aufgezählt ist.
Wir werden nicht in der Lage sein, das SeSecurityPrivilege-Privileg zu erhalten. Ich denke jedoch nicht, dass dies notwendig sein sollte. Ich kann den Ordner öffnen und mit der rechten Maustaste auf Eigenschaften klicken und auf die Registerkarte Sicherheit klicken und sie in der GUI anzeigen. I sollte in der Lage sein, auch programmgesteuert darauf zuzugreifen.
Irgendwelche Gedanken darüber, wie ich diesen Codeabschnitt ändern kann, um die Berechtigungen für den Zielordner zu erhalten?
private void CheckSecurity(DirectoryInfo[] DIArray)
{
foreach (DirectoryInfo di in DIArray)
{
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
string sAccessInfo = string.Empty;
foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
sAccessInfo += GetAceInformation(FSAR);
}
if (sAccessInfo != string.Empty)
{
// Write info to text file
}
}
}
private string GetAceInformation(FileSystemAccessRule ace)
{
StringBuilder info = new StringBuilder();
string line = string.Format("Account: {0}", ace.IdentityReference.Value);
info.AppendLine(line);
line = string.Format("Type: {0}", ace.AccessControlType);
info.AppendLine(line);
line = string.Format("Rights: {0}", ace.FileSystemRights);
info.AppendLine(line);
line = string.Format("Inherited ACE: {0}", ace.IsInherited);
info.AppendLine(line);
return info.ToString();
}
Edit: Wie würde ich die Remote-Ordner für die Lese attrib in der ACL zu überprüfen, wenn es darauf, die „GetAccessControl()“ Methode für den Stammordner fehlschlägt? (Wenn ich \ server \ path übergebe, wird beim Abrufen der Info für \ server \ path fehlgeschlagen).
Das Benutzerkonto ist ein Domänenkonto und ich habe Berechtigungen zum Lesen der Dateistruktur. Ich kann die Sicherheit von den Eigenschaften des Ordners/der Dateien sehen.
Ich werde den Prozessmonitor auschecken, aber ich bin mir nicht sicher, ob ich es auf dem Server ausführen kann (ich bin kein Administrator auf den fraglichen Servern).
Diese Frage/Codebeispiel wirklich sehr hilfreich war immer den Fehler stoppen. Ich habe diesen Code verwendet, um einen Datei-Erlaubnis-Monitor für eines unserer internen Systeme zu erstellen. –