web-dev-qa-db-ja.com

icaclsを使用して「すべてのサブフォルダーとファイル」にMODIFYを付与しますが、読み取りは最上位フォルダーにのみ付与します

いくつかのユーザーフォルダーが存在するWindowsサーバーの1つには、かなり台無しにされた権限があります。 SYSTEMと_Domain Admins_がすべてのフォルダを完全に制御できるようにしたいもの。ユーザーに最上位のフォルダー(ホームフォルダー)の読み取りのみを許可し、すべてのサブフォルダーとファイルの変更を許可します。これはGUIを使用して簡単に実行できますが、スクリプトを作成する方法がわかりません。

PowerShellスクリプトからicaclsを呼び出しています。これは、get-aclとset-aclが主要なPITAであるためです。それらを使用する必要がある場合、私はそれに反対していませんが、icaclsを呼び出す方が簡単になると思います。これは私がしなければならない関連コードです:

_icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)'
icacls.exe $folder /grant 'SYSTEM:(OI)(CI)(F)'
icacls.exe $folder /grant '$domain\domain admins:(OI)(CI)(F)'
_

ご覧のとおり、icacls.exe $folder /grant '$domain\$user:(OI)(CI)(M)'を使用してユーザーに変更を加えています。トップレベルのフォルダーに読み取り専用を付与しながら、その変更をサブフォルダーとファイルにのみ適用する方法を理解できません。

目的の権限構造は次のようになります(明確にするため)。

_-Users  
--M  
---Marra (read only to me)  
----Documents (Modify)  
----Scripts(Modify)  
----Etc (Modify)  
_

これに適したicacls構文は何ですか、またはset-aclを使用してPSでネイティブにどのように実行できますか?

4
MDMarra

スクリプトの最初の行を次のように変更して、サブフォルダーとファイルにのみ適用されるようにします。

icacls.exe $folder /grant "$domain\$user:(OI)(CI)(IO)(M)"

次に、これを最上位のフォルダーに適用します。

icacls.exe $folder /grant "$domain\$user:(R)"
5
pk.

継承可能な変更権限を付与し、継承できない拒否を設定してフォルダー自体を削除します。

icacls folder /deny  user:d
icacls folder /grant user:(oi)(ci)m

これにより、フォルダー内の完全な権限が付与されますが、フォルダー自体を変更することはできません。

0
Klaus Hartnegg
icacls $folder /c /grant $domain\$user:(OI)(CI)(X,RD,RA,REA,WD,AD,WA,WEA,DC,RC)

これにより、すべてのファイルとサブディレクトリへのMODIFYアクセスが許可されますが、$ folder自体への削除アクセスは許可されません。

0
Marcus