У одного из наших серверов 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
Это дает им полные права внутри папки, но они не могут изменять саму папку.