Réponses:
À 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 à la icacls
place. Voici comment vous accordez à John le contrôle total sur le D:\test
dossier et tous ses sous-dossiers:
C:\>icacls "D:\test" /grant John:(OI)(CI)F /T
Selon la documentation MS:
F
= Contrôle totalCI
= 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. ( OI
et CI
ne 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
C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
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.
cacls
disparu, c'est encore plus de raisons d'utiliser icacls .
/grant Users:(OI)(CI)F
utilisé
Users
par autre chose ou NON? Selonicacls "C:\MyFolder" /grant Users:F
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.
Utilisez la cacls
commande. 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 /?
cacls
est pertinent; il est toujours disponible en Windows 10
; Microsoft déconseillerait cmd.exe
également Powershell.
cmd.exe
n'est pas déconseillé et ne le sera probablement pas, ce n'est donc pas du tout un point en faveur du icacls
contraire, bien au contraire.
cacls.exe
. Je n'ai pas non plus mentionné que cmd.exe
c'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.
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.
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:d
option:
icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
.
Remarques :
La commande est appliquée au répertoire spécifié.
La spécification de l'utilisateur "Tout le monde" définit l'autorisation la plus large possible, car elle inclut tous les utilisateurs possibles.
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.
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.
Le paramètre "F" (c'est-à-dire l'autorisation créée) en fait une attribution de contrôle COMPLET.
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.
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.
Invalid parameter "/remove:d"
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!
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.
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.
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
XCACLS.VBS
se trouve?
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
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
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**
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 /T
commande 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 /T
commande.
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
C'est ce qui a fonctionné pour moi:
Ouvrez manuellement le dossier dont l'accès est refusé.
Sélectionnez le fichier exécutable / d'application dans ce dossier.
Faites un clic droit dessus et allez dans Properties->Compatibility
Maintenant, voyez le Privilege Levelet vérifiez-leRun As Administrator
Cliquez sur Change Settings for all users.
Le problème est maintenant résolu.