web-dev-qa-db-ja.com

コマンドラインからの「このアクセス制御リストは正規の形式ではありません」エラーの修正

開発者のワークステーションのいくつかでは、「このアクセス制御リストは正規の形式ではないため、変更できない」という恐ろしいことがありました。特定のフォルダにアクセス許可を設定しようとするとエラーが発生します。これらのACLを破損している原因を特定することはできません。

現時点で、修正する唯一の方法は、破損したフォルダー/ファイルを右クリックし、[プロパティ]を選択して[セキュリティ]タブをクリックすることです。 Windowsは破損を認識し、修正を提案します。これは手動であり、ユーザーがいくつかの調査を行って破損しているフォルダー/ファイルを特定する必要があるため、私はこれが好きではありません。

これを自動的に行うスクリプトまたはプログラムはどこかにありますか? icaclsには/verifyパラメータですが、ファイル/フォルダのACLが破損していることがわかります。何かを修正することはできません。

9
splattered bits

ついに、これに対する自動修正を理解することができました。 PowerShellのSet-Aclコマンドレットを呼び出すと、ACLが正しく並べ替えられます。

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

もちろん、それはめちゃくちゃになっているディレクトリの親である可能性があるので、原因を見つけるためにトラバースを行う必要があります。 icacls C:\Path\To\Item\With\Suspect\CL /verifyを使用して、修理が必要かどうかを判断します。

私たちの環境では、Cygwinが犯人である可能性があります。ファイルシステムのセキュリティを管理するためにWindowsに依存するのではなく、ディレクトリを作成するときに、CygwinはそれらにPOSIXスタイルのアクセス許可を与えることを好みます。

5
splattered bits

単純なPowerShellスクリプトを使用して、壊れたファイルのACLを別のファイルのACLで上書きしようとする可能性があります:get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file

6
mschneider

この問題は、Cygwinを使用しているときに発生します。 Windows ACL上でPOSIXファイルのアクセス許可をエミュレートしようとします。これにより、正規ではないACLが頻繁に発生します。これは 合法ですが、Explorer.exeでは適切に処理できません です。

この問題のあるエミュレーションをオフにするには、「noacl」オプションを使用してマウントします。 /etc/fstab

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
1
ManuelAtWork

私にとって二重の問題がありました:非正規ACL +誤ったルールがNULL SID(WTH?)に対して宣言されました。私はそれがgitのcygwinバージョンによって引き起こされたことを示唆しています。

とにかく、私の場合、同じ ACLを再適用しても意味がありませんでした。

> 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

@mschneiderで言及されているように、正しいACLを持つファイルからACLを明示的に適用する必要がありました。

1
oxfn

icaclsはそれを修正することもできます:

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

その他の便利なコマンド、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
1
mosh