icacls заменяет корневой диск разрешений

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

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

I have been unable to use icacl to REPLACE all permissions on The drive root. Я пробовал:

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:.

Есть идеи?

1 ответ

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

    Итак, первый шаг-использовать TAKEAUN, чтобы изменить владельца из TrustedInstaller (и аннулировать вашу гарантию UAC).

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

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

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

    Примечание: ICACLS очень суетливый:

    • ACLFile, кажется, neeed, чтобы быть 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