Назад | Перейти на главную страницу

Предоставьте ИЗМЕНИТЬ «Все подпапки и файлы» с помощью icacls, но разрешите чтение только папке верхнего уровня

У одного из наших серверов Windows, на котором есть несколько пользовательских папок, есть довольно запутанные разрешения. Для чего я хочу это SYSTEM и Domain Admins чтобы иметь полный контроль над всеми папками. Я хочу, чтобы пользователи могли читать только папку верхнего уровня (которая является их домашней папкой) и изменять все подпапки и файлы. Это легко сделать через графический интерфейс, но я не могу понять, как это написать.

Я вызываю icacls из своего сценария PowerShell, потому что 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 для этого или как я могу сделать это изначально в PS с помощью set-acl?

Измените первую строку вашего скрипта на следующую, чтобы она применялась только к подпапкам и файлам.

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

Затем примените это к верхней папке.

icacls.exe $folder /grant "$domain\$user:(R)"
icacls $folder /c /grant $domain\$user:(OI)(CI)(X,RD,RA,REA,WD,AD,WA,WEA,DC,RC)

Это дает доступ ИЗМЕНИТЬ ко всем файлам и подкаталогам, но не удаляет доступ к самой папке $.

Предоставьте наследуемое разрешение на изменение и установите нежелательный отказ для удаления самой папки:

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

Это дает им полные права внутри папки, но они не могут изменять саму папку.