いくつかのユーザーフォルダーが存在する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でネイティブにどのように実行できますか?
スクリプトの最初の行を次のように変更して、サブフォルダーとファイルにのみ適用されるようにします。
icacls.exe $folder /grant "$domain\$user:(OI)(CI)(IO)(M)"
次に、これを最上位のフォルダーに適用します。
icacls.exe $folder /grant "$domain\$user:(R)"
継承可能な変更権限を付与し、継承できない拒否を設定してフォルダー自体を削除します。
icacls folder /deny user:d
icacls folder /grant user:(oi)(ci)m
これにより、フォルダー内の完全な権限が付与されますが、フォルダー自体を変更することはできません。
icacls $folder /c /grant $domain\$user:(OI)(CI)(X,RD,RA,REA,WD,AD,WA,WEA,DC,RC)
これにより、すべてのファイルとサブディレクトリへのMODIFYアクセスが許可されますが、$ folder自体への削除アクセスは許可されません。