Збереження і відновлення NTFS дозволів за допомогою ICACLS

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

Для експорту / імпорту поточних NTFS дозволів каталогу можна скористатися утилітою icacls, яка включена до складу Windows. Утиліта використовується для отримання і зміни списків управління доступами (ACL) на об'єкти файлової системи.

Щоб отримати все ACL для конкретної папки і вкладених каталогів і файлів і зберегти їх в текстовий файл, потрібно виконати команду

icacls g: \ veteran / save veteran_ntfs_perms.txt / t / c
Файл з правами доступу по-умоланію зберігається в поточну папку користувача.

Примітка. Ключ / t вказує, що потрібно отримати ACL для всіх дочірніх підкаталогів і файлів, ключ / c - дозволяє ігнорувати помилки доступу. Додавши ключ / q можна відключити висновок на екран інформації про успішні дії при доступі до об'єктів файлової системи.

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

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

Примітка. Зверніть увагу, що при імпорті дозволів з файлу вказується шлях до батьківської папки, але не ім'я самого каталогу.

По закінченню відновлення дозволів також відобразиться статистика про кількість оброблених файлів.