Gli implementatori del cambiamento di produzione per il nostro gruppo IT hanno avuto il compito di esaminare la sicurezza per tutti i vari oggetti nel nostro gruppo, principalmente per assicurarsi che le persone che hanno lasciato il nostro impiego o trasferimento ad altri gruppi non ha più accesso alle condivisioni server, alle directory web, ai database sql, ecc. Di recente abbiamo completato la parte SQL e abbiamo uno script riutilizzabile che può essere eseguito annualmente (oa qualsiasi frequenza arriviamo con). Ha funzionato benissimo e abbiamo revisionato 20 database su circa 10 server con pochi minuti.Utilizzo di C# per ottenere un elenco di ACL per server e unità mappate
Ora, per il roba del server. Ho un'applicazione che ho scritto in C# usando .NET 2.0 che eseguirà la scansione in modo ricorsivo di un elenco di directory e scaricherà gli ACL in un file di testo. Questo funziona eccellente. Sulla macchina locale. I percorsi UNC e Mapped 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 sarà possibile ottenere il privilegio SeSecurityPrivilege. Tuttavia non penso che questo dovrebbe essere necessario. Posso aprire la cartella e fare clic destro per proprietà e fare clic sulla scheda sicurezza e visualizzarla nella GUI. I 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();
}
Edit: Come faccio a controllare la cartella remota per l'attrib lettura nella LCA quando non riesce a ottenere il metodo del "GetAccessControl()" per la cartella principale? (Se passo in \ server \ percorso, ha errori nel recuperare le informazioni per \ server \ percorso).
L'account utente è un account di dominio e dispongo delle autorizzazioni per leggere la struttura del file. Posso visualizzare la sicurezza dalle proprietà della cartella/dei file.
Verificherò il monitor di processo ma non sono sicuro che sarà in grado di eseguirlo sul server (non sono un amministratore sui server in questione).
Questo esempio di domanda/codice è stato davvero molto utile. Ho usato questo codice per creare un monitor di autorizzazione file per uno dei nostri sistemi interni. –