Come concedere l'autorizzazione agli utenti per una directory utilizzando la riga di comando in Windows?


Risposte:


420

A partire da Vista, caclsè obsoleto. Ecco la prima coppia di linee guida:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Dovresti usare icaclsinvece. Ecco come concedere a John il pieno controllo sulla D:\testcartella e su tutte le sue sottocartelle:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

Secondo la documentazione MS:

  • F = Controllo completo
  • CI = Eredità contenitore: questo flag indica che i contenitori subordinati erediteranno questo ACE.
  • OI = Eredita oggetto: questo flag indica che i file subordinati erediteranno l'ACE.
  • /T= Applica ricorsivamente a file e sottocartelle esistenti. ( OIe CIsi applica solo a nuovi file e sottocartelle). Credito: commento di @AlexSpence.

Per una documentazione completa, è possibile eseguire " icacls" senza argomenti o consultare la documentazione Microsoft qui e qui


4
Felipe: I parametri (OI) e (CI) rendono questo ricorsivo
Chris Miller,

22
Ho avuto problemi con l'accesso negato nel tentativo di modificare le autorizzazioni nell'interfaccia utente di Windows Explorer. L'aggiunta del flag / T alla fine ha sostituito gli oggetti esistenti ed è stato in grado di risolvere il problema per me. C:> icacls "D: \ test" / grant John: (OI) (CI) F / T
Alex Spence

9
@AlexSpence Ottimo punto! Il / T è necessario per aggiornare le autorizzazioni di file e cartelle esistenti . (OI) e (CI) si applicano solo ai file e alle cartelle creati in futuro.
Jesse,

5
Proveniente dal mondo * nix e utilizzato per "chown / chmod" per consentire l'accesso e impostare le autorizzazioni tramite l'interfaccia della riga di comando, questo thread è stato molto utile.
bgarlock,

5
Se lo esegui in Powershell in Windows 10, otterrai l'errore "OI non riconosciuto". Soluzione: inserisci l'argomento user + perms tra virgolette. Ad esempio:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

Puoi anche usare ICACLS.

Per concedere al gruppo Utenti il controllo completo su una cartella:

>icacls "C:\MyFolder" /grant Users:F

Per concedere l' autorizzazione Modifica agli utenti IIS per C:\MyFolder(se è necessario che IIS abbia la capacità di archiviare i file in una cartella specifica):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

Se fai ICACLS /? sarai in grado di vedere tutte le opzioni disponibili.


E dato che caclsè sparito, è ancora più motivo per usare icacls .
Ian Boyd,

2
L'aggiunta di pieno controllo non ha funzionato per me fino a quando /grant Users:(OI)(CI)Fusato
Jan Zahradník

Devo sostituire Userscon qualcos'altro o NO? Secondoicacls "C:\MyFolder" /grant Users:F
iori

Se l'utente corrente è un membro del gruppo di utenti denominato "Utenti" (che, in Windows 7, è normalmente il caso), la concessione di un'autorizzazione a quel gruppo influirà sui diritti di accesso dell'utente corrente. In ogni altro caso, sostituisci il nome Utenti con il nome effettivo dell'utente corrente (ad es. John), quindi: / grant John: (OI) (CI) F
Ed999

24

Apri un prompt dei comandi, quindi esegui questo comando:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F dà accesso completo.

/q /c /t applica le autorizzazioni alle sottocartelle.

Nota: a volte "Esegui come amministratore" sarà di aiuto.


È necessario "Esegui come amministratore", semplicemente la risposta migliore!
Jeb50,

20

Usa il caclscomando. Vedi informazioni qui .

CACLS files / e / p {NOMEUTENTE}: {PERMISSION}

Dove,

/ p: imposta una nuova autorizzazione

/ e: modifica autorizzazione e mantenuta la vecchia autorizzazione in quanto è cioè modifica ACL invece di sostituirla.

{NOME UTENTE}: nome dell'utente

{PERMISSION}: l'autorizzazione può essere:

R - Leggi

W: Scrivi

C - Modifica (scrivi)

F - Controllo completo

Ad esempio, concedi il controllo Rocky Full (F) con il seguente comando (digita al prompt dei comandi di Windows):

C:> File CACLS / e / p rocky: f

Leggi la guida completa digitando il comando seguente:

C:> cacls /?


Bella risposta! L'unica cosa da notare è che i file sono i file effettivi su cui si desidera modificare le autorizzazioni. Forse [files] o {files} sarebbe una spiegazione migliore.
Connor Ross,

14
Cacls è deprecato!
Hardik Thaker

caclsè rilevante; è ancora disponibile in Windows 10; Microsoft si cmd.exedeprecerebbe anche a favore di Powershell.

1
@ Chinggis6 Essere "ancora disponibile" non significa che qualcosa sia una buona idea da usare o raccomandare ad altri di usare. Inoltre, cmd.exenon è deprecato e probabilmente non lo sarà, quindi non è affatto un punto a favore icacls, anzi il contrario.
underscore_d

1
Lo so. Non ho dichiarato se è una buona idea usare o raccomandare cacls.exe. Né ho detto che cmd.exeè già deprecato. Penso che le persone dovrebbero almeno essere consapevoli della sua disponibilità nelle versioni superiori anche solo per compatibilità con le versioni precedenti o per qualsiasi altro motivo.

12

Provo nel modo seguente e funziona per me:
1. apri cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

In modo che i file possano diventare il mio accesso e assegnare a "Elimina" e quindi posso eliminare i file e le cartelle.


7

Autorizzazioni corrotte: recupero dell'accesso a una cartella e ai suoi oggetti secondari

Sebbene la maggior parte delle risposte postate in risposta alla domanda abbia qualche merito, IMHO nessuna di esse fornisce una soluzione completa. Di seguito (potrebbe essere) una soluzione perfetta per Windows 7 se si è bloccati da una cartella da impostazioni di autorizzazione danneggiate:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Per Windows 10 l'utente / SID deve essere specificato dopo l' /remove:dopzione:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Note :

  1. Il comando viene applicato alla directory specificata.

  2. Specificando l'utente "Everyone" si imposta l'autorizzazione più ampia possibile, in quanto include tutti gli utenti possibili.

  3. L'opzione "/ remove: d" elimina tutte le impostazioni DENY esplicite che potrebbero esistere, poiché quelle sovrascrivono le impostazioni ALLOW esplicite: un preliminare necessario alla creazione di una nuova impostazione ALLOW. Questa è solo una precauzione, poiché spesso non è presente alcuna impostazione DENY, ma è meglio prevenire che curare.

  4. L'opzione "/ grant" crea una nuova impostazione ALLOW, un'autorizzazione esplicita che sostituisce (": r") tutte le impostazioni ALLOW esplicite eventualmente esistenti.

  5. Il parametro "F" (ovvero l'autorizzazione creata) rende questo un controllo FULL.

  6. Il parametro "/ T" aggiunge la ricorsione, applicando queste modifiche a tutti gli oggetti secondari correnti nella directory specificata (cioè file e sottocartelle), nonché alla cartella stessa.

  7. Anche i parametri "(OI)" e "(CI)" aggiungono ricorsione, applicando queste modifiche ai sotto-oggetti creati successivamente.
    .

ADDENDUM (2019/02/10) -

La riga di comando di Windows 10 sopra mi è stata gentilmente suggerita oggi, quindi eccola qui. Non ho Windows 10 per testarlo, ma per favore provalo se lo hai (e quindi per favore pubblichi un commento qui sotto).

La modifica riguarda solo la rimozione dell'impostazione DENY come primo passo. Potrebbe non esserci alcuna impostazione DENY presente, quindi questa opzione potrebbe non fare alcuna differenza. La mia comprensione è, su Windows 7, che non è necessario specificare un utente dopo / rimuovere: d ma potrei sbagliarmi al riguardo!

.

ADDENDUM (2019/11/21) -

L'utente astark consiglia di sostituire Everyone con il termine * S-1-1-0 affinché il comando sia indipendente dalla lingua. Ho solo un'installazione inglese di Windows, quindi non posso testare questa proposta, ma sembra ragionevole.


Non è necessaria alcuna disposizione per le autorizzazioni INHERITED, poiché le autorizzazioni EXPLICIT le sovrascrivono. Pertanto, la creazione della nuova impostazione esplicita annulla tutte le impostazioni ereditate che possono esistere (poiché la nuova impostazione esplicita include la ricorsione).
Ed999,

Invalid parameter "/remove:d"
DFSFOT

Sono in esecuzione (posso solo eseguire) icacls.exe su Windows 7. Non posso commentare, né testare, eventuali modifiche ad esso che potrebbero esistere su Windows 8 o 10. Come testato da me su Windows 7 a 64 bit, la rimozione l'opzione è efficace per rimuovere le impostazioni DENY. Il suo utilizzo potrebbe comportare un messaggio di errore se NON sono presenti impostazioni di rifiuto, ma se non ne sono presenti, non è possibile rimuoverle comunque.
Ed999,

Se non riesco a riprodurre esattamente la riga di comando nella mia risposta originale (salvo per il percorso della directory), il comando fallirà. In particolare, NON aggiungere virgolette che non sono presenti nella mia risposta. Se racchiudi (ad esempio) l'opzione / remove: d tra virgolette, il comando fallirà ovviamente.
Ed999,

1
@DFSFOT Bene, mi dispiace. Ma io uso Windows 7. Con la grazia di Dio, non userò mai Windows 10. Preferirei migrare su Ubuntu! I sospetto che / remove: g probabilmente togliere tutti i diritti, sia la Consenti e Nega le voci (anche se con la possibilità che 'concesso' in questo contesto significa solo permettere e in modo da non elaborare qualsiasi negare voci); mentre / remove: d presumibilmente rimuoverà solo le voci DENY, lasciando invariate tutte le voci ALLOW. Ma ovviamente non posso esserne sicuro.
Ed999,

5

Ho lottato con questo per un po 'e solo unendo le risposte in questa discussione lavorato per me (su Windows 10):
1. Aprire cmd o PowerShell e andare alla cartella con i file
2. takeown / R / F .
3. icacls * / T / grant dan: F

In bocca al lupo!


3

Nel caso in cui ci sia qualcun altro che si imbatte in questa pagina, se vuoi mettere insieme varie autorizzazioni in un solo comando, ho usato questo:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Nota la stringa CSV per le varie autorizzazioni.


Grazie mille. Mi ha aiutato a impostare l'autorizzazione per RX e RD. Nella maggior parte dell'esempio fornito in Internet è stato spiegato con / F piena autorizzazione, il che non dovrebbe essere un caso.
Mani,

2

Con uno script vba di Excel per il provisioning e la creazione di account. Avevo bisogno di concedere le autorizzazioni complete per i diritti alla cartella e alle sottocartelle create dallo strumento usando l'account x degli amministratori per il nostro nuovo utente.

cacls assomigliava a questo: cacls \ FileServer \ Users \ Username / e / g Domain \ Username: C

Avevo bisogno di migrare questo codice su Windows 7 e oltre. La mia soluzione si è rivelata essere:

icacls \ FileServer \ Users \ Nome utente / concessione: r Dominio \ Nome utente: (OI) (CI) F / t

/ grant: r - Concede i diritti di accesso dell'utente specificati. Le autorizzazioni sostituiscono le autorizzazioni esplicite precedentemente concesse. Senza: r, le autorizzazioni vengono aggiunte a qualsiasi autorizzazione esplicita precedentemente concessa

(OI) (CI) - Questa cartella, sottocartelle e file.

F - Accesso completo

/ t - Attraversa tutte le sottocartelle per far corrispondere file / directory.

Ciò che mi ha dato era una cartella su questo server che l'utente poteva vedere solo quella cartella e creare sottocartelle, che potevano leggere e scrivere file. Oltre a creare nuove cartelle.


1

XCACLS.VBS è uno script molto potente che cambierà / modificherà le informazioni ACL. c: \ windows \ system32 \ cscript.exe xcacls.vbs aiuta a restituire tutti gli switch e le opzioni.

Puoi ottenere la distribuzione ufficiale dalla pagina di supporto di Microsoft


3
Potete fornire un riferimento dove XCACLS.VBSsi trova?
Jeremy J Starcher,

1

La creazione di cartelle collettive e l'autorizzazione di concessione mi funzionano utilizzando lo script PowerShell seguente.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

Nota: devi creare lo stesso nome utente di dominio nel file CSV, altrimenti otterrai problemi di autorizzazione


0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

2
Questi sono attributi del file (sola lettura, archivio, sistema, nascosto) e non autorizzazioni, che sono collegati agli account utente.
Robin Bennett,

0

ottimo punto Călin Darie

Avevo molti script per usare i cacl, li sposto in icacls, tuttavia non sono mai riuscito a trovare uno script per cambiare l'esempio dei volumi di montaggio root: d: \ datafolder. Alla fine ho creato lo script seguente, che monta il volume come unità temporanea, quindi applica sec. quindi smonta. È l'unico modo in cui ho scoperto che è possibile aggiornare la sicurezza di root mount.

1 ottiene il GUID di montaggio cartella in un file temporaneo, quindi legge il GUID per montare il volume come unità temporanea X: applica sec e registra le modifiche, quindi smonta il volume solo dall'unità X: in modo che la cartella montata non venga alterata o interrotta altro quindi il sec applicato.

ecco un esempio del mio script:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

0

Sono Amministratore e alcuni script hanno inserito l'autorizzazione "Nega" sul mio nome su tutti i file e sottocartelle in una directory. Eseguire ilicacls "D:\test" /grant John:(OI)(CI)F /T comando non ha funzionato, perché sembrava non rimuovere il "Nega" proprio dal mio nome da questo elenco.

L'unica cosa che ha funzionato per me è ripristinare tutte le autorizzazioni con il icacls "D:\test" /reset /Tcomando.


È possibile superare il problema senza utilizzare il comando reset, specificando '' / remove: d '' per eliminare eventuali impostazioni DENY esplicite che possono esistere - vedere la mia soluzione perfetta (sopra).
Ed999,

-1

in Windows 10 funziona senza "c:>" e ">"

Per esempio:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "percorso file o cartella" / e / p Nome utente: F

(anche questo risolve l'errore 2502 e 2503)

cacls "C: \ Windows \ Temp" / e / p Nome utente: F


-5

Questo è ciò che ha funzionato per me:

  1. Aprire manualmente la cartella per cui è negato l'accesso.

  2. Seleziona il file eseguibile / dell'applicazione in quella cartella.

  3. Fai clic destro su di esso e vai a Properties->Compatibility

  4. Ora guarda Privilege Levele controlla perRun As Administrator

  5. Clicca su Change Settings for all users.

Il problema è ora risolto.


La domanda è per fare quanto sopra attraverso la riga di comando. Anche se il tuo suggerimento potrebbe funzionare bene, non è applicabile se hai solo l'accesso terminale (ssh) a un server che deve essere impostato, quindi dovrai usare uno script cmd
Ivaylo Slavov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.