Comment accorder l'autorisation aux utilisateurs pour un répertoire en utilisant la ligne de commande dans Windows?


277

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

Réponses:


420

À partir de Vista, caclsest 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 à la icaclsplace. Voici comment vous accordez à John le contrôle total sur le D:\testdossier et tous ses sous-dossiers:

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

Selon la documentation MS:

  • F = Contrôle total
  • CI = Container Inherit - Cet indicateur indique que les conteneurs subordonnés hériteront de cet ACE.
  • OI = Object Inherit - Cet indicateur indique que les fichiers subordonnés hériteront de l'ACE.
  • /T= Appliquer récursivement aux fichiers et sous-dossiers existants. ( OIet CIne s'appliquent qu'aux nouveaux fichiers et sous-dossiers). Crédit: commentaire de @AlexSpence.

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


4
Felipe: Les paramètres (OI) et (CI) rendent cela récursif
Chris Miller

22
J'ai eu des problèmes d'accès refusé en essayant de modifier les autorisations dans l'interface utilisateur de l'explorateur Windows. L'ajout de l'indicateur / T à la fin a remplacé les objets existants et a pu résoudre le problème pour moi. C:> icacls "D: \ test" / grant John: (OI) (CI) F / T
Alex Spence

9
@AlexSpence Grand point! Le / T est nécessaire pour mettre à jour les autorisations des fichiers et dossiers existants . (OI) et (CI) ne s'appliquent qu'aux fichiers et dossiers créés à l'avenir.
Jesse

5
Venant du monde * nix et étant utilisé pour 'chown / chmod' pour donner accès et définir des autorisations via la CLI, ce fil a été très utile.
bgarlock

5
Si vous exécutez cela dans Powershell dans Windows 10, vous obtiendrez l'erreur sur "OI non reconnu". Solution: mettez l'argument utilisateur + perms entre guillemets. Par exemple:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

Vous pouvez également utiliser ICACLS.

Pour accorder au groupe d' utilisateurs le contrôle total sur un dossier:

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

Pour accorder Modifier l' autorisation aux utilisateurs IIS pour C:\MyFolder(si vous avez besoin de votre IIS a la capacité de fichiers R / W dans le dossier spécifique):

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

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


Et étant donné que cela a caclsdisparu, c'est encore plus de raisons d'utiliser icacls .
Ian Boyd

2
L'ajout d'un contrôle total n'a pas fonctionné pour moi jusqu'à ce qu'il soit /grant Users:(OI)(CI)Futilisé
Jan Zahradník

Dois-je remplacer Userspar autre chose ou NON? Selonicacls "C:\MyFolder" /grant Users:F
iori

Si l'utilisateur actuel est membre du groupe d'utilisateurs nommé "Utilisateurs" (ce qui est normalement le cas sous Windows 7), l'octroi d'une autorisation à ce groupe affectera les droits d'accès de l'utilisateur actuel. Dans tous les autres cas, remplacez le nom Users par le nom réel de l'utilisateur actuel (par exemple John), ainsi: / grant John: (OI) (CI) F
Ed999

24

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» peut aider.


"Exécuter en tant qu'administrateur" est nécessaire, tout simplement la meilleure réponse!
Jeb50

20

Utilisez la caclscommande. Voir les informations ici .

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

Où,

/ p: définir une nouvelle autorisation

/ e: Modifier l'autorisation et conserver l'ancienne autorisation telle qu'elle est, c'est-à-dire modifier l'ACL au lieu de la remplacer.

{USERNAME}: nom de l'utilisateur

{PERMISSION}: La permission peut être:

R - Lire

W - Écrire

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 rocheux: f

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

C:> cacls /?


Très bonne réponse! La seule chose à noter, c'est que les fichiers sont les fichiers réels sur lesquels vous souhaitez modifier les autorisations. Peut-être que [fichiers] ou {fichiers} seraient une meilleure explication.
Connor Ross

14
Cacls est obsolète!
Hardik Thaker

caclsest pertinent; il est toujours disponible en Windows 10; Microsoft déconseillerait cmd.exeégalement Powershell.

1
@ Chinggis6 Être "toujours disponible" ne signifie pas que quelque chose est une bonne idée à utiliser ou à recommander à d'autres. De plus, cmd.exen'est pas déconseillé et ne le sera probablement pas, ce n'est donc pas du tout un point en faveur du icaclscontraire, bien au contraire.
underscore_d

1
Je connais. Je n'ai pas précisé si c'est une bonne idée à utiliser ou à recommander cacls.exe. Je n'ai pas non plus mentionné que cmd.exec'est déjà obsolète. Je pense que les gens devraient au moins être conscients de sa disponibilité dans les versions supérieures, même uniquement pour une compatibilité descendante ou pour toute autre raison.

12

J'essaie la méthode ci-dessous et cela fonctionne pour moi:
1. ouvrez 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 et les affecter à "Supprimer", puis je peux supprimer les fichiers et les dossiers.


7

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

Bien que la plupart des réponses affichées en réponse à la question aient un certain mérite, à mon humble avis, aucune d'entre elles ne donne une solution complète. Ce qui suit (peut être) une solution parfaite pour Windows 7 si vous êtes verrouillé d'un dossier par des paramètres d'autorisation corrompus:

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

Pour Windows 10, l'utilisateur / SID doit être spécifié après l' /remove:doption:

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

.
Remarques :

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

  2. La spécification de l'utilisateur "Tout le monde" définit l'autorisation la plus large possible, car elle inclut tous les utilisateurs possibles.

  3. L'option "/ remove: d" supprime tous les paramètres DENY explicites qui peuvent exister, car ceux-ci remplacent les paramètres ALLOW explicites: un préalable nécessaire à la création d'un nouveau paramètre ALLOW. Ce n'est qu'une précaution, car il n'y a souvent aucun paramètre DENY présent, 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 qui peuvent exister.

  5. Le paramètre "F" (c'est-à-dire l'autorisation créée) en fait une attribution de contrôle COMPLET.

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

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

ADDENDA (10/02/2019) -

La ligne de commande Windows 10 ci-dessus m'a été aimablement suggérée aujourd'hui, alors la voici. Je n'ai pas Windows 10 pour le tester, mais essayez-le si vous en avez (et pourrez-vous poster un commentaire ci-dessous).

La modification concerne uniquement la suppression du paramètre DENY dans un premier temps. Il est possible qu'aucun paramètre DENY ne soit présent, de sorte que cette option peut ne faire aucune différence. Je comprends, sous Windows 7, que vous n'avez pas besoin de spécifier un utilisateur après / supprimer: d mais je peux me tromper à ce sujet!

.

ADDENDA (21/11/2019) -

L'utilisateur astark recommande de remplacer Tout le monde par le terme * S-1-1-0 pour que la commande soit indépendante de la langue. Je n'ai qu'une installation de Windows en anglais, donc je ne peux pas tester cette proposition, mais cela semble raisonnable.


Aucune disposition n'est nécessaire pour les autorisations INHERITED, car les autorisations EXPLICIT les remplacent. Ainsi, la création du nouveau paramètre explicite annule tous les paramètres hérités qui peuvent exister (car le nouveau paramètre explicite inclut la récursivité).
Ed999

Invalid parameter "/remove:d"
DFSFOT

J'exécute (ne peut exécuter) icacls.exe sur Windows 7. Je ne peux pas commenter ni tester les modifications qui pourraient exister sous Windows 8 ou 10. Comme testé par moi sur Windows 7 64 bits, la suppression L'option est efficace pour supprimer les paramètres DENY. Son utilisation peut entraîner un message d'erreur s'il n'y a PAS de paramètres de refus, mais s'il n'y en a pas, il ne peut pas les supprimer de toute façon.
Ed999

Si vous ne reproduisez pas exactement la ligne de commande dans ma réponse d'origine (sauf pour le chemin du répertoire), la commande échouera. En particulier, n'ajoutez PAS de guillemets qui ne figurent pas dans ma réponse. Si vous mettez (par exemple) l'option / remove: d entre guillemets, la commande échouera bien sûr.
Ed999

1
@DFSFOT Eh bien, je sympathise. Mais j'utilise Windows 7. Avec la grâce de Dieu, je n'utiliserai jamais Windows 10. Je préfère migrer vers Ubuntu! Je soupçonne que / remove: g supprimera probablement tous les droits, à la fois les entrées ALLOW et DENY (bien qu'avec la possibilité que «accordé» dans ce contexte signifie seulement ALLOW et qu'il ne traitera donc aucune entrée DENY); tandis que / remove: d supprimera vraisemblablement uniquement les entrées DENY, laissant les entrées ALLOW inchangées. Mais bien sûr, je ne peux pas en être sûr.
Ed999

5

Je me suis battu avec pendant un certain temps et que la combinaison des réponses dans ce fil a fonctionné pour moi (sous Windows 10):
1. Ouvrez cmd ou PowerShell et accédez au dossier avec les fichiers
2. takeown / R / F .
3. icacls * / T / grant dan: F

Bonne chance!


3

Juste au cas où quelqu'un d'autre trébucherait sur cette page, si vous voulez enchaîner diverses autorisations 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.


Merci beaucoup. Cela m'a aidé à définir l'autorisation pour RX & RD. Dans la plupart des exemples donnés sur Internet, il a été expliqué avec la permission complète / F, ce qui ne devrait pas être le cas.
Mani

2

Avec un script vba Excel pour provisionner et créer des comptes. Je devais accorder des autorisations de droits complets sur le dossier et les sous-dossiers créés par l'outil à l'aide du compte x de nos administrateurs à notre nouvel utilisateur.

cacls ressemblait à ceci: cacls \ FileServer \ Users \ Username / e / g Domain \ Username: C

J'avais besoin de migrer ce code vers Windows 7 et au-delà. Ma solution s'est avérée être:

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

/ grant: r - Accorde 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, sous-dossiers et 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 que l'utilisateur ne pouvait voir que ce dossier et créé des sous-dossiers, qu'il pouvait lire et écrire des fichiers. En plus de créer de nouveaux dossiers.


1

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

Vous pouvez obtenir la distribution officielle de la page de support Microsoft


3
Pouvez-vous fournir une référence où XCACLS.VBSse trouve?
Jeremy J Starcher

1

La création de dossiers en vrac et la permission d'accord me fonctionnent en utilisant le 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


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

2
Ce sont des attributs du fichier (lecture seule, archive, système, caché) et non des autorisations, qui sont liés aux comptes d'utilisateurs.
Robin Bennett

0

excellent point Călin Darie

J'avais beaucoup de scripts pour utiliser cacls, je les déplace vers icacls, mais je n'ai jamais trouvé de script pour changer l'exemple de volume de montage racine: d: \ datafolder. J'ai finalement créé le script ci-dessous, qui monte le volume en tant que lecteur temporaire, puis applique sec. puis le démonte. C'est la seule façon dont j'ai trouvé que vous pouvez mettre à jour la sécurité de montage racine.

1 obtient le GUID de montage du dossier dans un fichier temporaire, puis lit le GUID pour monter le volume en tant que lecteur temporaire X: applique sec et enregistre les modifications, puis démonte le volume uniquement à partir du lecteur X: afin que le dossier monté ne soit pas modifié ou interrompu. puis le sec appliqué.

voici un exemple 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

Je suis administrateur et certains scripts ont placé l'autorisation "Refuser" sur mon nom sur tous les fichiers et sous-dossiers d'un répertoire. L'exécution de la icacls "D:\test" /grant John:(OI)(CI)F /Tcommande n'a pas fonctionné, car il semble qu'elle n'ait pas supprimé le droit "Refuser" de mon nom de cette liste.

La seule chose qui a fonctionné pour moi est de réinitialiser toutes les autorisations avec la icacls "D:\test" /reset /Tcommande.


Il est possible de résoudre le problème sans utiliser la commande de réinitialisation, en spécifiant '' / remove: d '' pour supprimer tous les paramètres DENY explicites qui peuvent exister - voir ma solution parfaite (ci-dessus).
Ed999

-1

dans Windows 10 fonctionnant sans "c:>" et ">"

Par exemple:

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

cacls "chemin du fichier ou du dossier" / e / p UserName: F

(cela corrige également les erreurs 2502 et 2503)

cacls "C: \ Windows \ Temp" / e / p UserName: F


-5

C'est ce qui a fonctionné pour moi:

  1. Ouvrez manuellement le dossier dont l'accès est refusé.

  2. Sélectionnez le fichier exécutable / d'application dans ce dossier.

  3. Faites un clic droit dessus et allez dans Properties->Compatibility

  4. Maintenant, voyez le Privilege Levelet vérifiez-leRun As Administrator

  5. Cliquez sur Change Settings for all users.

Le problème est maintenant résolu.


La question est de faire ce qui précède via la ligne de commande. Bien que votre suggestion puisse bien fonctionner, elle n'est pas applicable si vous n'avez accès au terminal (ssh) qu'à un serveur qui doit être configuré, vous devrez donc utiliser un script cmd
Ivaylo Slavov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.