web-dev-qa-db-fra.com

Comment accorder aux utilisateurs la permission d'utiliser un répertoire à l'aide de la ligne de commande sous Windows?

Comment puis-je accorder des autorisations à un utilisateur sur un répertoire (lecture, écriture, modification) à l'aide de la ligne de commande Windows?

244
Amitabh

À partir de Vista, cacls est obsolète. Voici les deux premières lignes d'aide:

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

Displays or modifies access control lists (ACLs) of files

Vous devriez utiliser icacls à la place. Voici comment vous accordez à John un contrôle total sur le dossier D:\test et tous ses sous-dossiers:

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

Selon la documentation MS:

  • F = Contrôle total
  • CI = Héritage du conteneur - Cet indicateur indique que les conteneurs subordonnés hériteront de cette ACE.
  • OI = Héritage d'objet - Cet indicateur indique que les fichiers subordonnés hériteront de l'ACE.
  • /T = Appliquer de manière récursive aux fichiers et sous-dossiers existants. (OI et CI s'appliquent uniquement aux nouveaux fichiers et sous-dossiers). Crédit: commentaire de @AlexSpence.

Pour une documentation complète, vous pouvez exécuter "icacls" sans arguments ou consulter la documentation de Microsoft ici et ici

371
Călin Darie

Vous pouvez également utiliser ICACLS.

Pour accorder le groupe tilisateursContrôle total à un dossier:

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

Pour accorder Modify permission à IIS utilisateurs de C:\MyFolder (si vous avez besoin de votre IIS a la capacité de fichiers R/W dans un dossier spécifique):

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

Si vous faites ICACLS /? vous pourrez voir toutes les options disponibles.

71
Vin.X

Utilisez la commande cacls. Voir les informations ici .

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

Où,

/ p: Définir une nouvelle autorisation

/ e: Modifie l’autorisation et conserve l’ancienne autorisation car c’est-à-dire modifier ACL au lieu de la remplacer.

{USERNAME}: Nom de l'utilisateur

{PERMISSION}: La permission peut être:

R - Lire

W - Ecrire

C - Changer (écrire)

F - Contrôle total

Par exemple, accordez le contrôle Rocky Full (F) avec la commande suivante (tapez à l'invite de commande Windows):

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

Lisez l'aide complète en tapant la commande suivante:

C:> cacls /?

19
Jorge Ferreira

Ouvrez une invite de commande, puis exécutez cette commande:

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

F donne un accès complet.

/q /c /t applique les autorisations aux sous-dossiers.

Remarque: Parfois, "Exécuter en tant qu'administrateur" vous aidera.

19

J'essaie la manière ci-dessous et ça marche pour moi:
1. ouvrir cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4. del *.* /S /Q

Pour que les fichiers puissent devenir mon propre accès, il est assigné à "Supprimer" puis je peux supprimer les fichiers et les dossiers.

11
Ray Huang

Autorisations corrompues: retrouver l'accès à un dossier et à ses sous-objets

Bien que la plupart des réponses postées en réponse à la question aient quelque mérite, aucun d’eux ne donne une solution complète. Ce qui suit (pourrait être) une solution parfaite pour Windows 7 si vous êtes verrouillé en dehors d'un dossier par des paramètres d'autorisation corrompus:

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

Pour Windows 1 l'utilisateur/SID doit être spécifié après l'option /remove:d:

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

.
Notes:

  1. La commande est appliquée au répertoire spécifié.

  2. Spécifier l'utilisateur "Tout le monde" définit l'autorisation la plus large possible, car elle inclut every utilisateur possible.

  3. L'option "/ remove: d" supprime tous les paramètres DENY explicites pouvant exister, car ils remplacent les paramètres ALLOW explicites: préalable nécessaire à la création d'un nouveau paramètre ALLOW. Ceci n'est qu'une précaution, car il n'y a souvent pas de paramètre DENY, mais mieux vaut prévenir que guérir.

  4. L'option "/ grant" crée un nouveau paramètre ALLOW, une autorisation explicite qui remplace (": r") tous les paramètres ALLOW explicites pouvant exister.

  5. Le paramètre "F" (c’est-à-dire l’autorisation créée) en fait un octroi du contrôle FULL.

  6. Le paramètre "/ T" ajoute une récursivité en appliquant ces modifications à tous les actuels sous-objets du répertoire spécifié (fichiers et sous-dossiers), ainsi qu'au dossier lui-même.

  7. Les paramètres "(OI)" et "(CI)" ajoutent également une récursivité, en appliquant ces modifications aux sous-objets créés ultérieurement.
    .

ADDENDUM (2019/02/10) -

La ligne de commande Windows 10 ci-dessus m'a gentiment été suggérée aujourd'hui, alors la voici. Je n'ai pas Windows 10 pour le tester, mais merci de l'essayer si vous en avez un (et ensuite allez-vous s'il vous plaît poster un commentaire ci-dessous).

La modification concerne uniquement la suppression du paramètre DENY dans un premier temps. Il se peut fort bien qu'aucun paramètre DENY ne soit présent. Cette option ne fait donc aucune différence. D'après ma compréhension, sous Windows 7, il n'est pas nécessaire de spécifier un utilisateur après / remove: d mais je me trompe peut-être!

5
Ed999

J'ai eu du mal avec cela pendant un moment et seulement combiner les réponses dans ce fil a fonctionné pour moi (sur Windows 10):
1. Ouvrez cmd ou PowerShell et accédez au dossier contenant les fichiers.
2. prise de contrôle/R/F .
3. icacls */T/grant dan: F

Bonne chance!

4
Daniil Shevelev

Juste au cas où quelqu'un tomberait sur cette page, si vous voulez enchaîner plusieurs permissions dans la même commande, j'ai utilisé ceci:

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

Notez la chaîne csv pour les différentes autorisations.

3
Ads

Avec un script vba Excel pour approvisionner et créer des comptes. J'avais besoin d'octroyer des autorisations complètes sur le dossier et les sous-dossiers créés par l'outil à l'aide du compte "x" de notre administrateur pour notre nouvel utilisateur.

cacls ressemblait à ceci: cacls\FileServer\Users\Nom d'utilisateur/e/g Domaine\Nom d'utilisateur: C

Je devais migrer ce code vers Windows 7 et les versions ultérieures. Ma solution s'est avérée être:

icacls\FileServer\Users\Nom d'utilisateur/subvention: r Domaine\Nom d'utilisateur: (OI) (CI) F/t

/ grant: r - Donne les droits d'accès utilisateur spécifiés. Les autorisations remplacent les autorisations explicites précédemment accordées. Sans: r, les autorisations sont ajoutées à toutes les autorisations explicites précédemment accordées.

(OI) (CI) - Ce dossier, les sous-dossiers et les fichiers.

F - Accès complet

/ t - Parcourez tous les sous-dossiers pour faire correspondre les fichiers/répertoires.

Cela m'a donné un dossier sur ce serveur dans lequel l'utilisateur ne pouvait voir que ce dossier et créer des sous-dossiers, qu'il pouvait lire et écrire des fichiers. Ainsi que créer de nouveaux dossiers.

2
Gus

XCACLS.VBS est un script très puissant qui modifiera/modifiera les informations de LCA. Aide xcacls.vbs de c:\windows\system32\cscript.exe renvoie tous les commutateurs et toutes les options.

Vous pouvez obtenir une distribution officielle de page de support Microsoft

1
g222

La création de dossier en vrac et l'autorisation d'accorder me fonctionnent à l'aide du script powershell ci-dessous.

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

}

Remarque: vous devez créer le même nom d'utilisateur de domaine dans le fichier csv, sinon vous obtiendrez des problèmes d'autorisation.

1
user2934980

Je suis administrateur et un script a placé l'autorisation "Refuser" sur mon nom sur tous les fichiers et sous-dossiers d'un répertoire. L'exécution de la commande icacls "D:\test" /grant John:(OI)(CI)F /T ne fonctionnait pas, car il semblait que cela ne supprimait pas le "Refuser" de mon nom dans cette liste.

La seule chose qui a fonctionné pour moi est la réinitialisation de toutes les autorisations avec la commande 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

excellent point Călin Darie

J'avais beaucoup de scripts pour utiliser cacls. Je les ai déplacés dans icacls, mais je n'ai jamais pu trouver de script pour modifier les volumes de montage racine, par exemple: d:\datafolder. J'ai finalement créé le script ci-dessous, qui monte le volume en tant que lecteur temporaire, puis s'applique s. puis le démonte. C'est la seule façon pour moi de mettre à jour la sécurité du montage racine.

1 récupère le dossier mount GUID dans un fichier temporaire, puis lit le GUID pour monter le volume en tant que lecteur temporaire X: apply sec et enregistre les modifications, puis démonte le volume uniquement à partir de X : lecteur pour que le dossier monté ne soit pas altéré ou interrompu autre que la durée appliquée.

voici un échantillon de mon 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