web-dev-qa-db-ja.com

ICACLSを使用してユーザーディレクトリにアクセス許可を設定する

ユーザーディレクトリのアクセス許可をリセットしようとしていますが、スクリプトの最後のステップで少し問題があります。私のスクリプトは基本的にユーザーディレクトリ全体の所有権を取得し、ディレクトリのすべてのファイルとフォルダーのアクセス許可をリセットし、必要なアクセス許可を明示的に付与し、親フォルダーからのアクセス許可のすべての継承を停止し、すべてのファイルの正当な所有者(指定されたユーザー)を設定しますフォルダーを作成し、自分に与えたアクセス許可を削除して、ファイルを操作できるようにします。すべてのファイルとサブフォルダーから自分自身を削除するには、この最後の手順が必要ですが、現時点では、%userDir%から自分を削除し、継承されたすべての権限を以下に残します。これは、ICACLSの明らかな欠点です。誰かがこれを達成する他の方法を知っていますか?

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /inheritance:r
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%"
16
pk.

最初の観察:継承をブロックするたびに、将来の柔軟性から自分を切り離しています。継承をブロックすることは絶対に避けます。

たとえば、最上位の "E:\ Home Directories"フォルダの内容を一覧表示できるようにする必要がある場合は、次のアクセス許可を検討してください。

  • システム-フルコントロール-このフォルダー、サブフォルダー、およびファイルに適用されます
  • BUILTIN\Administrators-フルコントロール-このフォルダー、サブフォルダー、およびファイルに適用されます
  • BUILTIN\Authenticated Users-読み取りと実行-このフォルダーにのみ適用

最後のアクセス許可はサブフォルダーに継承されません。各サブフォルダーでは、継承が有効なままであり、「変更」または「フルコントロール」権限を持つユーザーを指定するだけです(ユーザーがホームディレクトリ内でアクセス許可を設定できるかどうかによって異なります)。 (通常、最後の権限を設定するには、「高度な」セキュリティプロパティシート以外に「認証済みユーザー」を追加し、「読み取り」および「読み取りと実行」チェックボックスをオフにします。次に、「詳細」ダイアログに進み、そのACEの[適用先]設定を[このフォルダのみ]に設定します。これは、クリック数の観点から、最も簡単な方法です。)

その後、スクリプトは次のようになります。

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%" /setowner "MYDOMAIN\%userDir%" /T

継承を「このフォルダーのみ」に設定して、上記で説明した「認証済みユーザー」権限を追加すると、機能で探しているものが得られ、判明した場合は将来の柔軟性が得られると確信しています将来、すべてのユーザーのホームディレクトリに継承する必要がある権限を設定する必要があることに注意してください。

これはmy SOPは、ユーザーのホームディレクトリ、リダイレクトされた「マイドキュメント」、「デスクトップ」などのフォルダー、およびローミングユーザープロファイルディレクトリの場合です。これはうまく機能します。

編集する

re:BUILTIN\Administratorsアクセスに関するコメント

私は何年にもわたってBUILTIN\Administratorsにアクセスを許可することについての私の見解について人々とさまざまな議論をしてきました、そして私の見解はこれです:

  • ユーザーのファイルにアクセスできれば、特定の種類のユーザーの問題を解決する方が簡単です。 「所有権を取得する」のは面倒であり、多数のファイルが存在する場合も非常に遅くなる可能性があります。

  • ICACLSで見たように、BUILTIN\Administratorsは所有権を(「取得」する以外に)「割り当てる」ことができるため、最初にBUILTIN\Administratorsがファイルにアクセスできないようにすることで、「セキュリティ」が追加されることはありません。

  • 監査を使用している(および潜在的に膨大な数の偽陽性エントリをふるいにかけている)場合を除き、BUILTIN\Administratorsユーザーがアクセスしてはならないファイルの所有権を取得し、それらをコピーしてから、監査証跡はありません。ファイルを「適切な」所有者と権限に戻します。

  • マイクロソフトの世界では、暗号化ファイルシステム(EFS)は、無許可のBUILTIN\Administratorsアクセスが発生しないようにする問題を解決することを目的としています。 NTFS ACLはその問題を解決しません。 (明らかに、EFSだけが街でのショーではありません。暗号化は、「ネットワーク管理者のアクセスを制限する」問題をどのように切り分けても解決する本当の答えです。)

私の考えでは、ユーザーのホームディレクトリ(および実際には任意のフォルダー)へのアクセス権を持つBUILTIN\Administratorsを指定しないことは、実際のセキュリティに欠けている(「なしよりも少ない」)一方で、問題の解決に必要な複雑さと時間を増加させる「それは何もないところに誤った安心感を与えるからです。).

私は論理的に人々との議論に勝つことをやめました。一部の人にとっては感情的な問題のようです。これは、特定の特権グループがユーザーのメールボックスを開くのを防ぐためにExchange組織のルートに配置される、ばかげた "拒否/受信者" ACEのようなものです。実際のセキュリティ(監査を行わないため、必要に応じてACEを削除/再適用できるため)は提供されず、誤った安心感があり、実際の問題を解決するときに邪魔になります。

BUILTIN\Administratorsがあなたにアクセスすることについての私の議論が気に入らない場合でもwant必要に応じて「このフォルダーのみ」の継承を使用して継承階層をそのまま維持します。権限階層の継承をブロックすることは、設計に関する何かが「壊れている」(反転しているなど)ことを示しています。

18
Evan Anderson

まず、スクリプトの抜粋をありがとう。私は同じことに取り組んできましたが、別の場所で行き詰まりました。私のSBS 2008ボックスでは、以下のコードが機能します(もちろん、管理者特権で実行されている場合)。私はOSによって作成された真新しい(デフォルト)ユーザーフォルダーのicacls%userdir%/ tを実行し、このスクリプトを実行した後、それをフォルダーのicacls%userdir%/ tと比較しました。私は正しい」です。うまくいけば、それもあなたのために働くでしょう。

set /p userDir=Enter the login of the user's directory you're modifying permissions for. (i.e. jDoe)
TAKEOWN /f "E:\Home Directories\%userDir%" /r /d y
ICACLS "E:\Home Directories\%userDir%" /reset /T
ICACLS "E:\Home Directories\%userDir%" /grant:r "MYDOMAIN\%userDir%":(oi)(ci)f
ICACLS "E:\Home Directories\%userDir%\*.*" /grant:r "SYSTEM":(OI)(CI)F /grant:r "MYDOMAIN\%userDir%":(OI)(CI)F /grant:r "MYDOMAIN\%username%":(OI)(CI)F
ICACLS "E:\Home Directories\%userDir%\*.*" /inheritance:r
ICACLS "E:\Home Directories\%userDir%\*.*" /setowner "MYDOMAIN\%userDir%" /T
ICACLS "E:\Home Directories\%userDir%" /remove "MYDOMAIN\%username%" /t

宜しくお願いします、

 -d
1
user16680