Как заменить разрешения и все внутри с icacls на Windows Server 2012?

15

Использование Windows Server 2012 R2 И Windows Server 2008 R2.

У меня есть папка с именем, C:\temp\testи я хочу предоставить доступ SYSTEMи пользователю, и всем файлам и подкаталогам, и удалить все остальное. Я пробовал эту команду, но все существующие разрешения остаются:

Существующие разрешения:

Access : NT AUTHORITY\SYSTEM Allow  FullControl
         BUILTIN\Administrators Allow  FullControl
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         BUILTIN\Users Allow  AppendData
         BUILTIN\Users Allow  CreateFiles
         CREATOR OWNER Allow  268435456

Я хочу удалить все ACL кроме SYSTEM, и добавить<DOMAIN>\<USER>

Я попробовал эту команду:

icacls c:\temp\test /grant:r <DOMAIN>\<USER>:(OI)(CI)F /t

processed file: c:\temp\test
Successfully processed 1 files; Failed processing 0 files

Когда я смотрю на разрешения позже, у них <DOMAIN>\<USER>есть правильные разрешения, но все остальные остаются. Я думал, /grant:rзаменил все разрешения? Знаете ли вы, какую команду мне нужно выполнить, чтобы удалить все остальные разрешения?

Марк Эллисон
источник
Эта команда делает именно то, что я хочу, cacls c:\temp\test /t /g <DOMAIN>\<USER>:Fно я слышал, что icacls заменил ее. Может ли кто-нибудь показать мне эквивалентную версию icacls для того же поведения?
Марк Эллисон
3
/grant:rудаляет только существующие явные разрешения, а не унаследованные, из папки выше. Вы должны были бы включить /inheritance:rтакже.
TheCleaner
1
Если CACLS выполняет эту работу, то нет никаких причин, по которым вы не можете ее использовать, независимо от того, является она устаревшей или нет.
Joeqwerty
@joeqwerty правда, но это так грязно. Сам cacls даже возвращает сообщение об использовании icacls, поэтому должна быть очень веская причина. NOTE: Cacls is now deprecated, please use Icacls.
Марк Эллисон
2
@joeqwerty cacls.exeможет установить ACL в неправильном порядке, что может вызвать проблемы (я оставлю это в качестве упражнения для читателя).
Крейг

Ответы:

16

Как уже упоминалось, это комментарии, вы также должны использовать /inheritance:rпереключатель, чтобы удалить унаследованные разрешения.

/grant:r удаляет только явные разрешения.

icacls c:\temp\test /inheritance:r /grant:r <DOMAIN>\<USER>:(OI)(CI)F /T

Также предоставить SYSTEM:

icacls c:\temp\test /inheritance:r /grant:r <DOMAIN>\<USER>:(OI)(CI)F /grant:r SYSTEM:(OI)(CI)F /T
krisFR
источник
7

Параметр /grant:rне работал для меня. Мне пришлось использовать, /resetчтобы отменить разрешения только для наследования, а затем удалить унаследованные разрешения. Не забудьте поменять подкаталоги с /tфлагом.

Ян Захрадник
источник