Как задать, скопировать и восстановить NTFS разрешения с помощью ICACLS?

Как задать, скопировать и восстановить NTFS разрешения с помощью ICACLS?

Для управления NTFS разрешениями в Windows можно использовать встроенную утилиту iCACLS. Утилита командной строки icacls.exe позволяет получить или изменить списки управления доступом (ACL — Access Control Lists) на файлы и папки на файловой системе NTFS. В этой статье мы рассмотрим полезные команды управления ntfs разрешениями в Windows с помощью icacls.

Просмотр и изменения NTFS прав на папки и файлы с помощью icacls

Текущие права доступа к любому объекту на NTFS томе можно вывести так:

icacls 'C:ShareVeteran'

icacls вывести ntfs разрешения каталога

Команда вернет список пользователей и групп, которым назначены права доступа. Права указываются с помощью сокращений:

  • F – полный доступ
  • M – изменение
  • RX – чтение и выполнение
  • R – только чтение
  • W – запись
  • D – удаление

Перед правами доступа указаны права наследования (применяются только к каталогам):

  • (OI)— наследование объектами
  • (CI)— наследование контейнерами
  • (IO)— только наследование
  • (I)– разрешение унаследовано от родительского объекта

С помощью icacls вы можете изменить права доступа на папку.

Чтобы предоставить группе fs01_Auditors домена resource права чтения и выполнения (RX) на каталог, выполните:

icacls 'C:ShareVeteran' /grant resourcefs01_Auditors:RX

icacls предоставить права на каталог

Чтобы удалить группу из ACL каталога:

icacls 'C:ShareVeteran' /remove resourcefs01_Auditors

С помощью icacls вы можете включить наследование NTFS прав с родительского каталога:

icacls 'C:ShareVeteran' /inheritance:e

icacls управление наследованием

Или отключить наследование с удалением всех наследованных ACEs:

icacls 'C:ShareVeteran' /inheritance:r

Также icacls можно использовать, чтобы изменить владельца файла или каталога:

icacls 'C:ShareVeteran' /setowner resourcea.ivanov /T /C /L /Q

icacls setowner изменить владельца

Бэкап (экспорт) текущих NTFS разрешений каталога

Перед существенным изменением разрешений (переносе, обновлении ACL, миграции ресурсов) на NTFS папке (общей сетевой папке) желательно создать резервную копию старых разрешений. Данная копия позволит вам вернуться к исходным настройкам или хотя бы уточнить старые права доступа на конкретный файл/каталог.

Для экспорта/импорта текущих NTFS разрешений каталога вы также можете использовать утилиту icacls. Чтобы получить все ACL для конкретной папки (в том числе вложенных каталогов и файлов), и экспортировать их в текстовый файл, нужно выполнить команду

icacls 'C:ShareVeteran' /save c:psveteran_ntfs_perms.txt /t /c

Примечание. Ключ /t указывает, что нужно получить ACL для всех дочерних подкаталогов и файлов, ключ /c – позволяет игнорировать ошибки доступа. Добавив ключ /q можно отключить вывод на экран информации об успешных действиях при доступе к объектам файловой системы.

icacls экспорт ntfs разрешений

В зависимости от количества файлов и папок, процесс экспорта разрешений может занять довольно продолжительное время. После окончания выполнения команды отобразится статистика о количестве обработанных и пропущенных файлов.

Successfully processed 3001 files; Failed processing 0 files

Successfully processed 3001 files; Failed processing 0 filesОткройте файл veteran_ntfs_perms.txt с помощью любого текстового редактора. Как вы видите, он содержит полный список папок и файлов в каталоге, и для каждого указаны текущие разрешения в формате SDDL (Security Descriptor Definition Language).

разрешения на файлы и каталоге в формате sddl

К примеру, текущие NTFS разрешения на корень папки такие:

D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;S-1-5-21-2340243621-32346796122-2349433313-23777994)(A;OICI;0x1301bf;;;S-1-5-21-2340243621-32346796122-2349433313-23777993)(A;OICI;FA;;;SY)(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)S:AI

Данная строка описывает доступ для нескольких групп или пользователей. Мы не будем подробно углубляться в SDDL синтаксис (при желании справку по нему можно найти на MSDN, или вкратце формат рассматривался в статье об управлении правами на службы Windows). Мы для примера разберем небольшой кусок SDDL, выбрав только одного субъекта:

(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)

A – тип доступа (Allow)

OICI – флаг наследования (OBJECT INHERIT+ CONTAINER INHERIT)

FA – тип разрешения (SDDL_FILE_ALL – все разрешено)

S-1-5-21-2340243621-32346796122-2349433313-24109193 – SID учетной записи или группы в домене, для которой заданы разрешения. Чтобы преобразовать SID в имя учетной записи или группы, воспользуйтесь командой:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2340243621-32346796122-2349433313-24109193")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

AD sid to user

Или командами:

Get-ADUser -Identity SID

или

Get-ADGroup -Identity SID

Таким образом, мы узнали, что пользователь corpdvivan обладал полными правами (Full Control) на данный каталог.

Восстановление NTFS разрешений с помощью iCacls

С помощью ранее созданного файла veteran_ntfs_perms.txt вы можете восстановить NTFS разрешения на каталог. Чтобы задать NTFS права на объекты в каталоге в соответствии со значениями в файле с резервной копией ACL, выполните команду:

icacls C:share /restore c:PSveteran_ntfs_perms.txt /t /c

Примечание. Обратите внимание, что при импорте разрешений из файла указывается путь к родительской папке, но не имя самого каталога.

По окончанию восстановления разрешений также отобразится статистика о количестве обработанных файлов:

Successfully processed 114 files; Failed processing 0 files

восстановление ntfs разрешений каталога icacls.exe

С учетом того, что в резервной копии ACL указываются относительные, а не абсолютные пути к файлам, вы можете восстановить разрешения в каталоге даже после его перемещения на другой диск/каталог.

Сброс NTFS разрешений в Windows

С помощью утилиты icacls вы можете сбросить текущие разрешения на указанный файл или каталог (и любые вложенные объекты):

icacls C:shareveteran /reset /T /Q /C /RESET

Данная команда включит для указанного объекта наследование NTFS разрешений с родительского каталога, и удалит любые другие права.

icacls RESET сбросить ntfs разрешения

Копирование NTFS прав между папками

Вы можете использовать текстовый файл с резервной копией ACL для копирования NTFS разрешений с одного каталога на другой/

Сначала создайте бэкап NTFS разрешений корня папки:

icacls 'C:ShareVeteran' /save c:pssave_ntfs_perms.txt /c

А замет примените сохраненные ACL к целевой папке:

icacls e:share /restore c:pssave_ntfs_perms.txt /c

Это сработает, если исходная и целевая папка называются одинаково. А что делать, если имя целевой папки отличается? Например, вам нужно скопировать NTFS разрешения на каталог E:PublicDOCS

Проще всего открыть файл save_ntfs_perms.txt в блокноте и отредактировать имя каталога. С помощью функции Replace замените имя каталога Veteran на PublicDOCS.

вручную заменить целевой каталог при копировании NTFS разрешений папки

Затем импортируйте NTFS разрешения из файла и примените их к целевому каталогу:

icacls e: /restore c:pssave_ntfs_perms.txt /c

Windows Server 2016
Как задать, скопировать и восстановить NTFS разрешения с помощью ICACLS?