Risposte:
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 icacls
invece. Ecco come concedere a John il pieno controllo sulla D:\test
cartella e su tutte le sue sottocartelle:
C:\>icacls "D:\test" /grant John:(OI)(CI)F /T
Secondo la documentazione MS:
F
= Controllo completoCI
= 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. ( OI
e CI
si 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
C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
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.
cacls
è sparito, è ancora più motivo per usare icacls .
/grant Users:(OI)(CI)F
usato
Users
con qualcos'altro o NO? Secondoicacls "C:\MyFolder" /grant Users:F
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.
Usa il cacls
comando. 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 /?
cacls
è rilevante; è ancora disponibile in Windows 10
; Microsoft si cmd.exe
deprecerebbe anche a favore di Powershell.
cmd.exe
non è deprecato e probabilmente non lo sarà, quindi non è affatto un punto a favore icacls
, anzi il contrario.
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.
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:d
opzione:
icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
.
Note :
Il comando viene applicato alla directory specificata.
Specificando l'utente "Everyone" si imposta l'autorizzazione più ampia possibile, in quanto include tutti gli utenti possibili.
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.
L'opzione "/ grant" crea una nuova impostazione ALLOW, un'autorizzazione esplicita che sostituisce (": r") tutte le impostazioni ALLOW esplicite eventualmente esistenti.
Il parametro "F" (ovvero l'autorizzazione creata) rende questo un controllo FULL.
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.
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.
Invalid parameter "/remove:d"
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!
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.
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.
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
XCACLS.VBS
si trova?
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
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
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**
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 /T
comando.
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
Questo è ciò che ha funzionato per me:
Aprire manualmente la cartella per cui è negato l'accesso.
Seleziona il file eseguibile / dell'applicazione in quella cartella.
Fai clic destro su di esso e vai a Properties->Compatibility
Ora guarda Privilege Levele controlla perRun As Administrator
Clicca su Change Settings for all users.
Il problema è ora risolto.