Question

Les implémenteurs du changement de production de notre groupe informatique ont été chargés d'examiner la sécurité de tous les différents objets de notre groupe, principalement pour s'assurer que les personnes qui ont quitté notre emploi ou ont été transférées à d'autres groupes n'ont plus accès à nos parts de serveur , répertoires Web, bases de données SQL, etc. Nous avons récemment terminé la partie SQL et nous avons un script réutilisable qui peut être exécuté chaque année (ou à n'importe quelle fréquence que nous proposons). Cela a très bien fonctionné et nous avons audité 20 bases de données sur environ 10 serveurs avec quelques minutes.

Maintenant, pour le serveur. J'ai une application que j'ai écrite en C # en utilisant .NET 2.0 qui analysera récursivement une liste des répertoires et videra les ACL dans un fichier texte. Cela fonctionne excellent. Sur la machine locale. UNC et les chemins mappés ne fonctionnent pas, j'obtiens le message d'exception suivant: Le processus ne possède pas le privilège «SESECURITYPRIVILEGE» requis pour cette opération.

Sur cette ligne:

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

Où Di est un objet DirectoryInfo énuméré à partir d'un tableau DirectoryInfo [].

Nous ne serons probablement pas en mesure de bénéficier du privilège SESECURITYPRIVILEGE. Cependant, je ne pense pas que cela devrait être nécessaire. Je peux ouvrir le dossier et un clic droit pour les propriétés et cliquer sur l'onglet de sécurité et le voir dans l'interface graphique. je devrait être en mesure d'y accéder également par programme.

Des réflexions sur la façon dont je peux modifier cette section de code pour obtenir les autorisations du dossier ciblé?

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: Comment vérifier le dossier distant de l'attrib de lecture dans l'ACL lorsqu'il échoue à obtenir la méthode "getAccessControl ()" pour le dossier racine? (Si je passe dans Server Path, il erre sur l'obtention des informations pour Server Path).

Le compte d'utilisateur est un compte de domaine et j'ai des autorisations pour lire la structure des fichiers. Je peux afficher la sécurité à partir des propriétés du dossier / fichiers.

Je vais vérifier le moniteur de processus, mais je ne suis pas sûr de pouvoir l'exécuter sur le serveur (je ne suis pas un administrateur sur le (s) serveur en question).

Était-ce utile?

La solution

Vous obtenez l'erreur en raison de l'onglet «audit», bien que je sois assez sûr que tout ce que vous voulez vraiment accéder à l'écran est les données de l'onglet «Autorisations». Le SESECURITYPRIVILEGE contrôle l'accès au SACL.

Essayez de changer

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

à

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

alors tu devrais arrêter d'obtenir l'erreur

Autres conseils

Vérifiez que le dossier distant accorde à l'utilisateur exécutant les attributs de lecture de code dans l'ACL.

N'oubliez pas non plus que les autorisations sont résolues sur les machines distantes (serveur), de sorte que l'adhésion au groupe local (utilisateurs et administrateurs) peut ne pas inclure le compte d'utilisateur exécuté sur le client.

Ayant Moniteur de processus L'exécution sur le serveur (filtré dans les dossiers / fichiers en question) peut aider à résoudre les détails sur les raisons pour lesquelles il échoue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top