risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

Come posso concedere le autorizzazioni a un utente su una directory (lettura, scrittura, modifica) utilizzando la riga di comando di Windows?

231
Amitabh

A partire da Vista, cacls è deprecato. 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. Questo è il modo in cui concedi a John il pieno controllo della cartella D:\test e di tutte le sue sottocartelle:

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

Secondo la documentazione MS:

  • F = Controllo completo
  • CI = Eredita del contenitore: questo flag indica che i contenitori subordinati erediteranno questo ACE.
  • OI = Object Inherit - Questo flag indica che i file subordinati erediteranno l'ACE.
  • /T = Applica in modo ricorsivo a file e sottocartelle esistenti. (OI e CI si applicano solo ai nuovi file e sottocartelle). Credito: commento di @AlexSpence.

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

358
Călin Darie

Puoi anche usare ICACLS.

Per garantire a Users group Full Control a una cartella:

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

Per concedere Modifica permesso a IIS utenti per C:\MyFolder (se hai bisogno del tuo IIS ha capacità di file R/W in una cartella specifica):

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

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

69
Vin.X

Utilizzare il comando cacls. Vedi informazioni qui .

File CACLS/e/p {USERNAME}: {PERMISSION}

Dove,

/ p: imposta nuova autorizzazione

/ e: modifica il permesso e mantiene il vecchio permesso dato che è, ad esempio, modificare ACL invece di sostituirlo.

{USERNAME}: nome dell'utente

{AUTORIZZAZIONE}: l'autorizzazione può essere:

R - Leggi

W - Scrivi

C - Cambia (scrivi)

F - Controllo completo

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

C:> file CACLS/e/p roccioso: f

Leggi la guida completa digitando il seguente comando:

C:> cacls /?

18
Jorge Ferreira

Apri un prompt dei comandi, quindi esegui questo comando:

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

F fornisce accesso completo.

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

Nota: talvolta è possibile eseguire "Esegui come amministratore".

18

Provo il 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 personale e assegnare a "Elimina" e quindi posso eliminare i file e le cartelle.

11
Ray Huang

Autorizzazioni corrotte: riottenere l'accesso a una cartella e ai relativi oggetti secondari

Sebbene la maggior parte delle risposte pubblicate in risposta alla domanda abbiano qualche merito, IMHO nessuna di esse fornisce una soluzione completa. La seguente (potrebbe essere) una soluzione perfetta per Windows 7 se si è bloccati da una cartella con le impostazioni dei permessi corrotte:

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

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

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

.
Note :

  1. Il comando viene applicato alla directory specificata.

  2. Specificare l'utente "Tutti" imposta l'autorizzazione più ampia possibile, poiché include ogni utente possibile.

  3. L'opzione "/ remove: d" cancella tutte le impostazioni DENY esplicite che possono esistere, poiché quelle sovrascrivono le impostazioni di ALLOW esplicite: un preliminare necessario per creare 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 permesso esplicito che sostituisce (": r") tutte le impostazioni ALLOW esplicite che possono esistere.

  5. Il parametro "F" (cioè il permesso creato) rende questa una concessione del controllo FULL.

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

  7. I parametri "(OI)" e "(CI)" aggiungono anche la ricorsione, applicando queste modifiche ai sottooggetti creati successivamente.
    .

ADDENDUM (2019/02/10) -

La riga di comando di Windows 10 above mi è stata gentilmente suggerita oggi, quindi eccola qui. Non ho Windows 10 per testarlo, ma per favore provalo se ne hai (e poi ti piacerà postare un commento sotto).

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

5
Ed999

Ho lottato con questo per un po 'e solo combinando le risposte in questo thread ha funzionato per me (su Windows 10):
1. Apri cmd o PowerShell e vai alla cartella con i file
2. takeown/R/F.
3. icacls */T/grant dan: F

In bocca al lupo!

4
Daniil Shevelev

Nel caso in cui ci sia qualcun altro che inciampa su questa pagina, se vuoi mettere insieme le varie autorizzazioni insieme in un unico comando, ho usato questo:

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

Nota la stringa csv per le varie autorizzazioni.

3
Ads

Con uno script vba di Excel per eseguire il provisioning e creare account. Avevo bisogno di concedere autorizzazioni per i diritti completi alla cartella e alle sottocartelle create dallo strumento utilizzando l'account 'x' dei nostri amministratori per il nostro nuovo utente.

cacls ha un aspetto simile al seguente: cacls\FileServer\Users\Username/e/g Domain\Username: C

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

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

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

(OI) (CI): questa cartella, sottocartelle e file.

F - Accesso completo

/ t - Attraversa tutte le sottocartelle per far corrispondere i file/le 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.

2
Gus

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

Puoi ottenere la distribuzione ufficiale da Pagina di supporto Microsoft

1
g222

La creazione della cartella in blocco e il permesso di concessione mi consentono di utilizzare lo script PowerShell sottostante.

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: è necessario creare lo stesso nome utente di dominio nel file CSV altrimenti si otterranno problemi di autorizzazione

1
user2934980

Sono amministratore e alcuni script hanno posto l'autorizzazione "Nega" sul mio nome su tutti i file e le sottocartelle in una directory. L'esecuzione del comando icacls "D:\test" /grant John:(OI)(CI)F /T non ha funzionato, perché sembrava non rimuovere "Deny" direttamente dal mio nome da questo elenco.

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

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

punto eccellente Călin Darie

Ho avuto un sacco di script per usare cacls li ho spostati in icacls come mai non sono riuscito a trovare uno script per modificare l'esempio dei volumi di montaggio radice: d:\datafolder. Alla fine ho creato lo script qui sotto, che monta il volume come unità temporanea, quindi applica sec. quindi lo smonta. È l'unico modo in cui ho trovato che è possibile aggiornare la sicurezza di root mount.

1 ottiene il montaggio della cartella GUID in un file temporaneo, quindi legge GUID per montare il volume come unità temporanea X: applica sec e registra le modifiche, quindi smonta il volume solo dalla X : guidare in modo che la cartella montata non venga alterata o interrotta se non quella applicata.

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
HandyMannyHE