Управління 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 дозволу на корінь папки у нас такі:
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). Ми для прикладу розберемо невеликий шматок 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
По закінченню відновлення дозволів також відобразиться статистика про кількість оброблених файлів.