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


9

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

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

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

回答:


6

簡単なPowerShellスクリプトを使用して、破損したファイルのaclを別のファイルのaclで上書きすることができます。 get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file


他の答えは、あなただけ行うことができますことを示唆していますget-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file
binki

5

ついに、これに対する自動修正を理解することができました。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スタイルのアクセス許可を与えることを好みます。


1
トリックをありがとう。私は今日問題があり、修正を自動化するための小さなpowershellを書きました:gist.github.com/vbfox/8fbec5c60b0c16289023
Julien Roncaglia 14年

1

私にとっては二重の問題がありました:非正規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

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

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

"noacl"オプションでマウントすることで、この問題のあるエミュレーションをオフにすることができます。例/etc/fstab

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

-1
  1. IISで、問題のあるフォルダーを右クリックします
  2. 権限を編集...
  3. [セキュリティ]タブを選択します
  4. [編集]ボタンをクリックして保存します(これはACLを並べ替えるようです)
  5. すべてのポップアップを確認

この解決策はすでに質問で述べられています。しかし、著者は自動解決策を求めています。
scai

また、これらはNTFSアクセス許可であるため、IISは関与しません。
飛び散ったビット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.