Для управления NTFS разрешениями в Windows можно использовать встроенную утилиту iCACLS. Утилита командной строки icacls.exe позволяет получить или изменить списки управления доступом (ACL — Access Control Lists) на файлы и папки на файловой системе NTFS. В этой статье мы рассмотрим полезные команды управления ntfs разрешениями в Windows с помощью icacls.
Просмотр и изменения NTFS прав на папки и файлы с помощью icacls
Текущие права доступа к любому объекту на NTFS томе можно вывести так:
icacls 'C:\Share\Veteran\'
Команда вернет список пользователей и групп, которым назначены права доступа. Права указываются с помощью сокращений:
- F – полный доступ
- M – изменение
- RX – чтение и выполнение
- R – только чтение
- W – запись
- D – удаление
Перед правами доступа указаны права наследования (применяются только к каталогам):
- (OI)— наследование объектами
- (CI)— наследование контейнерами
- (IO)— только наследование
- (I)– разрешение унаследовано от родительского объекта
С помощью icacls вы можете изменить права доступа на папку.
Чтобы предоставить группе fs01_Auditors домена resource права чтения и выполнения (RX) на каталог, выполните:
icacls 'C:\Share\Veteran\' /grant resource\fs01_Auditors:RX
Чтобы удалить группу из ACL каталога:
icacls 'C:\Share\Veteran\' /remove resource\fs01_Auditors
С помощью icacls вы можете включить наследование NTFS прав с родительского каталога:
icacls 'C:\Share\Veteran\' /inheritance:e
Или отключить наследование с удалением всех наследованных ACEs:
icacls 'C:\Share\Veteran\' /inheritance:r
Также icacls можно использовать, чтобы изменить владельца файла или каталога:
icacls 'C:\Share\Veteran\' /setowner resource\a.ivanov /T /C /L /Q
Бэкап (экспорт) текущих NTFS разрешений каталога
Перед существенным изменением разрешений (переносе, обновлении ACL, миграции ресурсов) на NTFS папке (общей сетевой папке) желательно создать резервную копию старых разрешений. Данная копия позволит вам вернуться к исходным настройкам или хотя бы уточнить старые права доступа на конкретный файл/каталог.
Для экспорта/импорта текущих NTFS разрешений каталога вы также можете использовать утилиту icacls. Чтобы получить все ACL для конкретной папки (в том числе вложенных каталогов и файлов), и экспортировать их в текстовый файл, нужно выполнить команду
icacls 'C:\Share\Veteran' /save c:\ps\veteran_ntfs_perms.txt /t /c
В зависимости от количества файлов и папок, процесс экспорта разрешений может занять довольно продолжительное время. После окончания выполнения команды отобразится статистика о количестве обработанных и пропущенных файлов.
Successfully processed 3001 files; Failed processing 0 files
Откройте файл veteran_ntfs_perms.txt с помощью любого текстового редактора. Как вы видите, он содержит полный список папок и файлов в каталоге, и для каждого указаны текущие разрешения в формате SDDL (Security Descriptor Definition Language).
К примеру, текущие 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
Или командами:
Get-ADUser -Identity SID
или
Get-ADGroup -Identity SID
Таким образом, мы узнали, что пользователь corp\dvivan обладал полными правами (Full Control) на данный каталог.
Восстановление NTFS разрешений с помощью iCacls
С помощью ранее созданного файла veteran_ntfs_perms.txt вы можете восстановить NTFS разрешения на каталог. Чтобы задать NTFS права на объекты в каталоге в соответствии со значениями в файле с резервной копией ACL, выполните команду:
icacls C:\share /restore c:\PS\veteran_ntfs_perms.txt /t /c
По окончанию восстановления разрешений также отобразится статистика о количестве обработанных файлов:
Successfully processed 114 files; Failed processing 0 files
С учетом того, что в резервной копии ACL указываются относительные, а не абсолютные пути к файлам, вы можете восстановить разрешения в каталоге даже после его перемещения на другой диск/каталог.
Сброс NTFS разрешений в Windows
С помощью утилиты icacls вы можете сбросить текущие разрешения на указанный файл или каталог (и любые вложенные объекты):
icacls C:\share\veteran /reset /T /Q /C /RESET
Данная команда включит для указанного объекта наследование NTFS разрешений с родительского каталога, и удалит любые другие права.
Копирование NTFS прав между папками
Вы можете использовать текстовый файл с резервной копией ACL для копирования NTFS разрешений с одного каталога на другой/
Сначала создайте бэкап NTFS разрешений корня папки:
icacls 'C:\Share\Veteran' /save c:\ps\save_ntfs_perms.txt /c
А замет примените сохраненные ACL к целевой папке:
icacls e:\share /restore c:\ps\save_ntfs_perms.txt /c
Это сработает, если исходная и целевая папка называются одинаково. А что делать, если имя целевой папки отличается? Например, вам нужно скопировать NTFS разрешения на каталог E:\PublicDOCS
Проще всего открыть файл save_ntfs_perms.txt в блокноте и отредактировать имя каталога. С помощью функции Replace замените имя каталога Veteran на PublicDOCS.
Затем импортируйте NTFS разрешения из файла и примените их к целевому каталогу:
icacls e:\ /restore c:\ps\save_ntfs_perms.txt /c
Get-Acl -Path 'C:\Share\Veteran' | Set-Acl -Path 'E:\PublicDOCS'