Powershell ICACLS для изменения разрешений на файл - PullRequest
0 голосов
/ 30 августа 2018

По сути, я пытаюсь выдвинуть txt-файл в список удаленных ПК, а затем изменить разрешения для этого файла, чтобы локальная группа пользователей могла только читать и выполнять. (Я прекратил попытки вытолкнуть файл, сохранив разрешения). Имена компьютеров указаны в отдельных строках в файле ComputerNames.txt.

Вот что у меня есть:

$computers = Get-Content "C:\ComputerNames.txt"
$fileToCopy = "C:\newFile.txt"
foreach ($computer in $Computers) {
    # Copy file to remote PC
    Copy-Item -Path $fileToCopy -Destination "\\$computer\C`$\HOMEWARE\"
    # Reset current permissions on file
    icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
    # Grant Read / Execute
    icacls \\$computer\C$\HOMEWARE\newFile.txt /grant:r "USERS:(OI)(CI)RX"
}
pause

Кажется, что он копирует файл, и разрешения сбрасываются, но это ничего не убирает, у пользователей все еще есть права на запись и специальные разрешения. Что я тут не так делаю?

1 Ответ

0 голосов
/ 31 августа 2018

/grant:r заменит только существующие явные разрешения для данного пользователя или группы. Это не касается унаследованных разрешений. Наследование объектов (OI) и наследование контейнеров (CI) имеют смысл только при работе с папками. Ничто не собирается наследовать разрешения от файла. Кроме того, простого отключения наследования (/inheritance:d) недостаточно, вам также необходимо удалить существующие разрешения (/inheritance:r).

Это должно делать то, что вы хотите:

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:r /grant "Users:rx"

Обратите внимание, что это приведет к удалению всех унаследованных разрешений из файла, что может препятствовать резервному копированию и другим операциям управления системой. Как отметил в комментариях eryksun, лучше отключить наследование (превратив унаследованные разрешения в явные разрешения), а затем заменить пользовательский ACE.

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:d /grant:r "Users:rx"

Если вы все еще хотите, чтобы унаследованные разрешения были удалены, а не преобразованы в явные разрешения, я настоятельно рекомендую дополнительно предоставить доступ администраторам и SYSTEM.

icacls \\$computer\C$\HOMEWARE\newFile.txt /reset
icacls \\$computer\C$\HOMEWARE\newFile.txt /inheritance:r /grant "Users:rx" "Administrators:f" "system:f"
...