Impossibile modificare le autorizzazioni ACL in C # nella directory CommonAppDataPath

StackOverflow https://stackoverflow.com/questions/1440149

  •  10-07-2019
  •  | 
  •  

Domanda

Quindi sto cercando di modificare le autorizzazioni per il gruppo BUILTIN \ Users almeno per avere il diritto di accesso al file system Modifica. Sfortunatamente, i miei tentativi di utilizzare il codice seguente producono ACL invariato.

            SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
            DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName);
            FileSystemAccessRule accessRule 
                = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, AccessControlType.Allow);

            directorySecurity.ModifyAccessRule(AccessControlModification.Add,
                accessRule,
                out modified);

            Console.WriteLine(modified);

I report modificati sono veri in ogni caso, ma i permessi non vengono aggiornati quando li guardi nelle proprietà della cartella.

Ho anche provato ad aggiungere una regola di accesso per un SecurityIdentifier che non aveva già un ACL per la directory usando un codice simile ma solo AddAccessRule invece di modificarlo. Anche se il nuovo SecurityIdentifier è stato visualizzato nell'elenco dei permessi per la directory, non avevano l'accesso specificato.

Sto tentando di modificare l'accesso per una directory proprietaria in Environment.SpecialFolders.CommonApplicationData di cui è proprietario un account amministratore. Sto anche tentando di modificare l'ACL come amministratore.

Qualcuno ha idea di cosa non vada con il codice sopra o ha delle risorse che possono portarmi al modo corretto di impostare l'ACL usando native le classi .NET native?

È stato utile?

Soluzione

L'ho capito con l'aiuto di un amico che lavora in Microsoft. In realtà il processo che stavo usando per impostare l'ACL era accurato. Stavo interpretando i risultati in modo errato. Fondamentalmente, non è un problema impostare l'ACL su una directory in questo modo, purché si operi come amministratore quando si tenta di apportare le modifiche.

Le autorizzazioni precise per la cartella erano disponibili per la visualizzazione (in Vista) da:

  1. Fai clic con il pulsante destro del mouse sulla cartella in questione e seleziona le proprietà
  2. Seleziona la scheda Sicurezza
  3. Fai clic su Avanzate
  4. Fai clic su Modifica
  5. Seleziona l'entità per cui desideri visualizzare le autorizzazioni e fai clic su Modifica.

Questa è la parte che mi mancava. Il percorso CommonApplicationData ha già le autorizzazioni impostate per l'entità BUILTIN \ Users. Quindi dopo aver eseguito il mio codice, in realtà finisco con due entità. Uno dice Leggi & amp; Esegui e l'altro dice Autorizzazioni speciali. Quando modifico l'entità con autorizzazioni speciali, in realtà vedo che BUILTIN \ Users ha accesso per la directory.

Stavo davvero cercando BUILTIN \ Users per avere accesso alla directory e a tutte le sue cartelle e oggetti figlio. Ecco uno snippet di codice da quello che ho finito per usare. Sono stato in grado di confermare che il mio codice ha funzionato sia attraverso un cablaggio di prova che ispezionando manualmente gli elenchi ACL di file e directory.

DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
FileSystemAccessRule accessRule
    = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, 
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
        PropagationFlags.None, 
        AccessControlType.Allow);

bool modified=false;
directorySecurity.ModifyAccessRule(AccessControlModification.Add,
    accessRule,
    out modified);

if (modified)
{
    source.Create(directorySecurity);
}
else
{
    source.Create();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top