icacls заменяет права доступа к корневому диску

Я работаю в Windows 2012 R2, пытаясь использовать командный файл для управления пермами NTFS с помощью icacls. Пакетный файл почти завершен, затем я передам его кому-то с гораздо меньшим опытом в управлении, поэтому я пытаюсь максимально упростить для него задачу.

Я хочу автоматически ЗАМЕНИТЬ все разрешения в корневом каталоге диска (E:), если они были изменены. Весь диск будет восстановлен до известной конфигурации. Затем я установлю несколько разрешений в корне (администратор, резервное копирование и т. д.), которые будут распространяться через наследование на все подкаталоги. (вероятно, эти 2 операции являются одним и тем же вызовом icacls) Существует много подкаталогов, и к каждому из них будут применяться разные разрешения. У меня есть часть подкаталога пакетного файла, завершенная и успешная.

Мне не удалось использовать icacls для ЗАМЕНЫ всех разрешений в корневом каталоге диска. Я пытался:

ICACLS.EXE "E:" /inheritance:r /grant:r "Administrators":(OI)(CI)F /T /Q

и

ICACLS.EXE "E:" /grant:r "Administrators":(OI)(CI)F /T /Q

оба безуспешно. Для проверки я добавил еще одну группу с доступом к E:. После успешного завершения пакетного файла эта другая группа по-прежнему имела доступ; он не был удален из ACL E:.

Любые идеи?


person Derek    schedule 13.01.2017    source источник
comment
Кто является владельцем корневого каталога? dir /q не покажет владельца root напрямую, но dir C:\Program Files /q /ad покажет его для .. -- корневой папки. Для меня это доверенный установщик, и я нашел другие папки с этим владельцем, где даже как администратор я не могу использовать icacls. Однако я могу использовать takeown, чтобы изменить владельца на buildin\administrators   -  person joeking    schedule 18.01.2017
comment
Я взял (или передал?) право собственности на группу администраторов в нашем домене, в основном, как вы указали. Любопытно, что когда я это делаю, если вы просматриваете свойства››Безопасность››Дополнительно, это показывает, что СИСТЕМА является владельцем. Я предполагаю, что это эквивалентно. В любом случае, я могу стать владельцем любой удобной учетной записи. Моя проблема в том, что я не знаю, к чему призывает ICACLS для достижения моей цели.   -  person Derek    schedule 19.01.2017
comment
Какая проблема осталась? Обычно корень диска будет принадлежать TrustedInstaller. Это виртуальный пользователь, созданный в Vista для UAC — специально для того, чтобы даже администратор не мог изменять системные файлы. В строке CMD команда takeown /f C:\ /A должна изменить владельца на Builtin\Administrators. После того, как вы станете администратором, вы можете использовать ICACLS для изменения разрешений. После успешного выполнения TAKEOWN ICACLS по-прежнему терпит неудачу?   -  person joeking    schedule 19.01.2017
comment
Я могу получить право собственности на корень, это не проблема. Я хочу удалить все существующие ACE и установить свои собственные ACE в корень диска. Синтаксис /grant:r заменит любые существующие разрешения только для ЭТОГО ПОЛЬЗОВАТЕЛЯ. Все остальные разрешения (для других пользователей) остаются. Я не вижу способа вернуть корень диска в известное состояние с помощью ICACLS.   -  person Derek    schedule 20.01.2017


Ответы (1)


Ха, интересно... Похоже, ICACLS затрудняет простую замену всех разрешений.

Итак, первый шаг — использовать TAKEOWN для смены владельца с TrustedInstaller (и аннулирования гарантии UAC).

Затем CACLS C:\ /g встроенный\администраторы:f

Вы также можете сделать это с помощью ICACLS /restore, но для этого необходимо подготовить файл ACL. В файле ACL есть имена файлов, что делает его создание более раздражающим.

Простой BAT-файл для этого.

ПРИМЕЧАНИЕ. ICACLS очень суетлив:

  • ACLFile, кажется, должен быть UTF-16
  • В файле ACLFile есть именованные файлы, и имена относительны пути, указанному в командной строке icacls.
  • Имя папки в командной строке icacls также не может иметь завершающий «\».

@echo off
setlocal

:: Change the ACL to "BUILTIN\Administrators:(OI)(CI)(F)"    
if exist aclfile.txt del aclfile.txt

if "%1"=="" echo Requires a filename && exit /b 1

:: The ACL file is required to be UTF-16 encoded.
:: Use "icacls FILE /save ACLFILE.txt on a sample
:: file to get the exact SDDL you want to use
cmd /u /c echo %~n1 > aclfile.txt
cmd /u /c echo D:P(A;OICI;FA;;;BA)>>aclfile.txt

:: Ick, trim the trailing \
:: ICACLS is really dumb.
set pathname=%~dp1
set pathname=%pathname:~,-1%
icacls "%pathname%" /restore aclfile.txt
person joeking    schedule 20.01.2017
comment
У меня проблема в том, что флаг /C отличается для CACLS и ICACLS. В CACLS он будет игнорировать только ошибки отказа в доступе к NTFS. (ICACLS игнорирует все ошибки) Все другие ошибки (включая слишком длинный путь к файлу, который у меня есть во многих местах) убивают команду CACLS на месте. Итак, теперь CACLS оставил мой диск в неизвестном состоянии, только некоторые из разрешений были установлены. Я не могу не чувствовать, что я должен что-то упустить, не должно быть так сложно использовать ICACLS для установки разрешений в корне диска. - person Derek; 21.01.2017
comment
Я не могу знать состояние вашего диска, но если вы пытаетесь заменить все разрешения на диске, то вам нужно сначала все забрать, забрать /f C:\ /a /r /skipsl /d y, а затем заменить права root и, наконец, icacls /reset /t для каждой вещи под root . Я не думаю, что вы что-то упускаете, ACL в Windows — настоящая проблема. См. исправления в bat-файле выше. - person joeking; 21.01.2017
comment
Я полагаю, вы могли бы быть более избирательны в этом... не берите на себя ответственность за все, а вместо этого сначала используйте ICACLS/reset/t, записывая ошибки. Затем забрать только те элементы, которые не удались. Это имеет значение только в том случае, если вы хотите сохранить первоначальное право собственности на файлы. - person joeking; 21.01.2017