Управление NTFS разрешениями на папках файлового сервера иногда может быть довольно утомительной задачей. Неосторожное внесение изменений на верхнем (корневом) уровне каталога может привести к неожиданным результатам, когда будут принудительно изменены индивидуальные разрешения на файлах и каталогов более низкого уровня. Перед существенным изменением разрешений (переносе, обновлении ACL, миграции ресурсов) на NTFS папке (общей сетевой папке) желательно иметь под рукой резервную копию старых разрешений, которая позволит вернуться к исходным настройкам или хотя бы уточнить старые права доступа на конкретный файл или каталог.
Для экспорта/ импорта текущих NTFS разрешений каталога можно воспользоваться утилитой icacls, которая включена в состав Windows. Утилита используется для получения и изменения списков управления доступами (ACL) на объекты файловой системы.
Чтобы получить все ACL для конкретной папки и вложенных каталогов и файлов и сохранить их в текстовый файл, нужно выполнить команду
icacls g:\veteran /save veteran_ntfs_perms.txt /t /c
Файл с правами доступа по-умоланию сохраняется в текущую папку пользователя.
В зависимости от количества файлов и папок, процесс экспорта разрешений может занять довольно продолжительное время. После окончания выполнения команды отобразится статистика о количестве обработанных и пропущенных файлов.
Successfully processed 3001 files; Failed processing 0 files
Откроем файл veteran_ntfs_perms.txt с помощью любого текстового редактора. Как вы видите, он содержит полный список папок и файлов в каталоге, и для каждого указаны текущие разрешения в формате SDDL (Security Descriptor Definition Language).
К примеру, текущие NTFS разрешения на корень папки у нас такие:
Данная строка описывает доступ для нескольких групп или пользователей. Мы не будем подробно углубляться в SDDL синтаксис (при желании справку по нему можно найти на MSDN). Мы для примера разберем небольшой кусок 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 g:\ /restore veteran_ntfs_perms.txt /t /c
По окончанию восстановления разрешений также отобразится статистика о количестве обработанных файлов.