Domanda

Gli implementatori del cambiamento di produzione per il nostro gruppo IT sono stati incaricati di rivedere la sicurezza di tutti i vari oggetti nel nostro gruppo, principalmente per assicurarsi che le persone che hanno lasciato il nostro impiego o si sono trasferite ad altri gruppi non abbiano più accesso alle nostre condivisioni di server , directory web, database SQL, ecc. Ecc.Recentemente abbiamo completato la parte SQL e disponiamo di uno script riutilizzabile che può essere eseguito ogni anno (o con la frequenza che definiamo).Ha funzionato benissimo e abbiamo controllato 20 database su circa 10 server in pochi minuti.

Ora, per le cose del server.Ho un'applicazione che ho scritto in C# utilizzando .NET 2.0 che analizzerà ricorsivamente un elenco di directory e scaricherà gli ACL in un file di testo.Funziona in modo eccellente.Sul computer locale.I percorsi UNC e mappati non funzionano, ricevo il seguente messaggio di eccezione:Il processo non possiede il privilegio "SeSecurityPrivilege" richiesto per questa operazione.

Su questa linea:

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

Dove di è un oggetto DirectoryInfo enumerato da un array DirectoryInfo[].

Probabilmente non potremo ottenere il privilegio SeSecurityPrivilege.Tuttavia non penso che questo dovrebbe essere necessario.Posso aprire la cartella e fare clic con il pulsante destro del mouse per le proprietà, quindi fare clic sulla scheda Sicurezza e visualizzarla nella GUI.IO Dovrebbe essere in grado di accedervi anche a livello di programmazione.

Qualche idea su come posso modificare questa sezione di codice per ottenere le autorizzazioni per la cartella di destinazione?

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();
}

Modificare:Come posso controllare la cartella remota per l'attributo di lettura nell'ACL quando non riesce a ottenere il metodo "GetAccessControl()" per la cartella principale?(Se passo \server\percorso, si verifica un errore nell'ottenere le informazioni per \server\percorso).

L'account utente è un account di dominio e ho le autorizzazioni per leggere la struttura dei file.Posso visualizzare la sicurezza dalle proprietà della cartella/dei file.

Controllerò il monitor del processo ma non sono sicuro di poterlo eseguire sul server (non sono un amministratore dei server in questione).

È stato utile?

Soluzione

Ricevi l'errore a causa della scheda "Controllo", anche se sono abbastanza sicuro che tutto ciò a cui vuoi veramente accedere sullo schermo sono i dati nella scheda "Autorizzazioni".Il SeSecurityPrivilege controlla l'accesso al SACL.

Prova a cambiare

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

A

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

allora dovresti smettere di ricevere l'errore

Altri suggerimenti

Verificare che la cartella remota conceda all'utente che esegue il codice Leggi attributi nell'ACL.

Ricordare inoltre che le autorizzazioni vengono risolte sulle macchine remote (server), pertanto l'appartenenza al gruppo locale (Utenti e Amministratori) potrebbe non includere l'account utente in esecuzione sul client.

Avendo Monitoraggio del processo in esecuzione sul server (filtrato nelle cartelle/file in questione) può aiutare a risolvere i dettagli del motivo per cui non funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top