Correction des erreurs «Cette liste de contrôle d'accès n'est pas sous forme canonique» à partir de la ligne de commande

9

Sur plusieurs de nos postes de travail de développeur, nous avons eu le redouté "Cette liste de contrôle d'accès n'est pas sous forme canonique et ne peut donc pas être modifiée." erreur lorsque nous essayons de définir des autorisations sur certains dossiers. Nous n'avons pas été en mesure de déterminer ce qui endommage ces listes de contrôle d'accès.

À l'heure actuelle, la seule façon de le résoudre est de cliquer avec le bouton droit sur le dossier / fichier corrompu, de choisir Propriétés et de cliquer sur l'onglet Sécurité. Windows remarquera alors la corruption et proposera de la corriger. Je n'aime pas cela car il est manuel et nécessite que l'utilisateur fasse des recherches pour déterminer quel dossier / fichier est corrompu.

Y a-t-il un script ou un programme quelque part qui le fera automatiquement? Je vois que cela icaclsa un /verifyparamètre, mais cela me montre simplement que les ACL sur un fichier / dossier sont corrompus. Il ne propose rien de réparer.

bits éclaboussés
la source

Réponses:

6

Vous pouvez essayer d'utiliser un simple script PowerShell pour remplacer les fichiers currupt acl par l'acl d'un autre fichier: get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file

mschneider
la source
L' autre réponse suggère que vous pourriez simplement le faire get-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file.
binki
5

J'ai finalement pu trouver une solution automatisée pour cela. Lorsque vous appelez l' Set-Aclapplet de commande de PowerShell , il réorganise correctement les listes de contrôle d'accès:

$path = C:\Path\To\Item\With\Borked\ACL
$acl = Get-Acl $path
Set-Acl $path $acl

Bien sûr, il pourrait s'agir d'un parent du répertoire qui est foiré, vous devriez donc faire un peu de recherche pour trouver le coupable. Utilisez icacls C:\Path\To\Item\With\Suspect\CL /verifypour déterminer si quelque chose doit être réparé.

Dans notre environnement, Cygwin est le coupable probable: lorsqu'il crée des répertoires, il aime leur accorder des autorisations de style POSIX, au lieu de s'appuyer sur Windows pour gérer la sécurité du système de fichiers.

bits éclaboussés
la source
1
Merci pour l'astuce. J'ai eu le problème aujourd'hui et j'ai écrit un petit PowerShell pour automatiser la correction: gist.github.com/vbfox/8fbec5c60b0c16289023
Julien Roncaglia
1

Pour moi, il y avait un double problème: ACL non canonique + règle erronée déclarée pour NULL SID (WTH?). Je suggère que cela a été causé par la version cygwin de git.

Quoi qu'il en soit, dans mon cas, la réapplication de la même ACL n'avait aucun sens:

> Set-Acl $f.FullName (Get-Acl $f.FullName)
> (Get-Acl $f.FullName).AreAccessRulesCanonical
False
> (Get-Acl $f.FullName).GetAccessRules($True, $False, [System.Security.Principal.NTAccount]) | ? {$_.Identityeference.Value -eq "NULL SID" }
FileSystemRights  : WriteExtendedAttributes, ExecuteFile, DeleteSubdirectoriesAndFiles, ReadPermissions
AccessControlType : Deny
IdentityReference : NULL SID
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

J'ai donc dû appliquer explicitement ACL à partir d'un fichier ayant un bon, comme mentionné par @mschneider

oxfn
la source
1

icacls peut également le réparer:

c:\> accesschk -q FILE
Error: FILE has a non-canonical DACL:
   Explicit Deny after Explicit Allow

c:\> icacls FILE /t /q /c /reset
Successfully processed 1 files; Failed processing 0 files

c:\> accesschk -q FILE
.. OK

Autres commandes pratiques, équivalent de chmod 0777 FILE, chown root FILE

  icacls  FILE /t /q /c /grant    :r Everyone:F
  icacls  FILE /t /q /c /grant    :r Everyone:F /inheritance:r
  icacls  FILE /t /q /c /setowner Administrators
mosh
la source
1

Ce problème apparaît lors de l'utilisation de Cygwin. Il essaie d'émuler les autorisations de fichiers POSIX sur les listes de contrôle d'accès Windows. Cela conduit fréquemment à des listes de contrôle d'accès non canoniques, qui sont légales mais ne peuvent pas être traitées correctement par explorer.exe .

Vous pouvez désactiver cette émulation problématique en montant avec l'option "noacl", par exemple dans /etc/fstab:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
ManuelAtWork
la source
-1
  1. Dans IIS, cliquez avec le bouton droit sur le dossier avec le problème
  2. Modifier les autorisations ...
  3. Sélectionnez l'onglet Sécurité
  4. Cliquez sur le bouton «Modifier» et enregistrez (cela semble réorganiser l'ACL)
  5. Confirmez tous les popups
James
la source
Cette solution est déjà mentionnée dans la question. Cependant, l'auteur demande une solution automatique.
scai
En outre, ce sont des autorisations NTFS, donc IIS n'est pas impliqué.
bits éclaboussés