Frage

Die Implementierer der Produktion Änderung für unsere IT -Gruppe haben die Aufgabe, die Sicherheit für alle verschiedenen Objekte in unserer Gruppe zu überprüfen, vor allem, um sicherzustellen, dass Personen, die unsere Beschäftigung verlassen oder auf andere Gruppen übertragen haben , Webverzeichnisse, SQL-Datenbanken usw. usw. Wir haben kürzlich den SQL-Teil abgeschlossen und haben ein wiederverwendbares Skript, das jährlich ausgeführt werden kann (oder bei jeder Frequenz, die wir uns einfallen lassen). Es hat großartig funktioniert und wir haben 20 Datenbanken in etwa 10 Servern mit ein paar Minuten geprüft.

Jetzt für das Server. Ich habe eine Anwendung, die ich in C# mit .NET 2.0 geschrieben habe, um eine Liste von Verzeichnissen rekursiv zu scannen und die ACLs in eine Textdatei zu werfen. Das funktioniert ausgezeichnet. Auf der lokalen Maschine. UNC- und kartierte Pfade funktionieren nicht, ich erhalte die folgende Ausnahmenachricht: Der Prozess besitzt nicht das für diesen Vorgang erforderliche Privileg "securityPrivilege".

Auf dieser Zeile:

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

Wobei DI ein Verzeichnis ist, das aus einem Verzeichnis -Array [] -Array aufgeführt ist.

Wir werden wahrscheinlich nicht in der Lage sein, das SesecurityPrivilege -Privileg zu gewähren. Ich denke jedoch nicht, dass dies notwendig sein sollte. Ich kann den Ordner öffnen und mit der rechten Maustaste für Eigenschaften klicken und auf die Registerkarte Sicherheit klicken und ihn in der GUI anzeigen. ich sollte in der Lage sein, auch programmatisch darauf zugreifen zu können.

Irgendwelche Gedanken darüber, wie ich diesen Codeabschnitt ändern kann, um die Berechtigungen für den gezielten Ordner 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();
}

Bearbeiten: Wie würde ich den Remote -Ordner für die Readattribierung in der ACL überprüfen, wenn er die Methode "getAccesscontrol ()" für den Stammordner nicht erstellt? (Wenn ich server path übergasse, fehlerhaft, um die Informationen für server path zu erhalten).

Das Benutzerkonto ist ein Domänenkonto und ich habe Berechtigungen, die Dateistruktur zu lesen. Ich kann die Sicherheit aus den Eigenschaften des Ordners/der Dateien anzeigen.

Ich werde den Prozessmonitor überprüfen, aber ich bin mir nicht sicher, ob ich ihn auf dem Server ausführen kann (ich bin kein Administrator auf den betreffenden Server).

War es hilfreich?

Lösung

Sie erhalten den Fehler aufgrund der Registerkarte "Auditing". Ich bin mir jedoch ziemlich sicher, dass Sie auf dem Bildschirm wirklich nur auf die Registerkarte "Berechtigungen" zugreifen möchten. Das SesecurityPrivilege steuert den Zugang zum Sacl.

Versuchen Sie zu wechseln

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

zu

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access);

Dann sollten Sie aufhören, den Fehler zu bekommen

Andere Tipps

Überprüfen Sie, ob der Remote -Ordner dem Benutzer gewährt, der die Code -Leseattribute in der ACL ausführt.

Denken Sie auch daran, dass die Berechtigungen auf den Remote -Maschinen (Server) aufgelöst werden, sodass die lokale Gruppe (Benutzer und Administratoren) möglicherweise nicht das auf dem Client ausgeführte Benutzerkonto enthalten.

Haben Prozessmonitor Das Ausführen auf dem Server (filtriert in den betreffenden Ordnern/Dateien) kann dazu beitragen, Details zu beheben, warum es fehlschlägt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top