web-dev-qa-db-ja.com

ICACLSオプション:(OI)(OC)で/ tが必要なのはなぜですか?

ICACLS.exeを使用して、次のようなコマンドでフォルダーにアクセス許可を設定した場合

icacls "C:\Some\Directory" /grant "somedomain\someUser:(OI)(CI)F" /t

/ tオプションが必要なのはなぜですか? (OI)(CI)によって、C:\Some\Directoryツリー内のすべてのオブジェクトにアクセス許可が継承されるのではないですか?

もう少し具体的に言うと、上記の例でディレクトリC:\Some\Directory\Treeがあるとします。このディレクトリにno明示的なアクセス許可が定義されているとします。明示的なアクセス許可「somedomain\someUser:(OI)(CI)F」をそのディレクトリに追加しても、既に継承されているため、何も実行されません。 icaclsはこれさえしますか? (編集:はい、十分長く待つと!)したがって、ディレクトリツリーに明示的なアクセス許可がないことがわかっている場合は、/ tオプションは本当に必要ありません(これは、数百の8TBディレクトリツリーで膨大な時間を浪費します何百万ものファイル...)

3

些細なディレクトリツリーで実験すると、次のことがわかります。

1)(OI)(CI)は実際に、すべてのサブオブジェクトに(明示的なACEではなくDACLで継承されたACEとして)アクセス許可を継承します(サブオブジェクトで継承が無効にされていない場合) 、予想通り。

2)/ tオプションを使用すると、icaclはツリーをトラバースし、各サブディレクトリ明示的権限とまったく同じ権限を追加します。

その結果、サブディレクトリのセキュリティアクセス許可を見ると、2つの同一エントリが表示されます。1つは継承されたアクセス許可で、もう1つはディレクトリの明示的なアクセス許可設定です(継承が無効にされていない場合)サブディレクトリまたはその他の介在ディレクトリ)。

これが必要かどうかは別の質問ですが、おそらくそうではありません。保護する必要のある将来の変更がない限り、権限を2回指定しても特に役に立ちません。

大規模なファイルシステムでは、これが完了するまでに非常に時間がかかる場合があります。

ドキュメントに「アクセス許可を継承するように設定されているかどうか」と記載されているという事実は、おそらく次のことを警告するためです。

1)権限に(OI)(CI)が含まれている場合は、すべてのサブディレクトリに明示的な権限としてコピーする必要がない場合があります。

だが

2)サブディレクトリがアクセス許可を継承しないように設定されている場合、これは実際に重要なことを実行します。そのようなディレクトリでは、アクセス許可は親から継承されません(つまり、(OI)(CI)継承は抑制されます)が、それでも明示的な許可として追加されているためです。

1

(OI)(CI)によって権限が継承されるのではないですか?

いいえ。これは、/tの説明で説明されています。

ファイル/ディレクトリに一致するようにすべてのサブフォルダをトラバースします。これにより、親からアクセス許可を継承するように設定されているかどうかに関係なく、すべてのサブフォルダーにアクセス許可の変更が適用されます

ソース icacls

2
DavidPostill