Subinacl. Предисловие к русской справке.

Года 4 назад мне пришлось хорошенько попотеть с переносом обьектов AD со старого престарого контроллера домена. Тогда я познакомился с замечательной утилитой SubInACL. Первоначально я планировал выложить статью и перевод на oszone.net. В редактировании перевода мне помогал мой друг, и вообще очень хороший человек Вадим Стеркин. Он довольно известная персона в рунете, но если вы вдруг его не знаете, то обязательно посетите его блог. Готов съесть свою шляпу Уверен, что вы найдете много интересного для себя.

SUBINACL —

незаменимый помощник системного администратора

© 2010 Азаров Денис

cmd

Введение

Эта статья — только небольшое вступление к русскому переводу справки утилиты SubInACL, более подробную информацию об использовании и применении можно найти в самой Справке (там очень неплохой раздел примеров, занимающий большую часть справки), а также по ссылкам в конце статьи.

SubInACL — это утилита командной строки, которая позволяет администраторам получать и непосредственно редактировать практически любую информацию, относящуюся к сфере безопасности: разрешения, аудит, владельца. Более того,  SubInACL  умеет переносить эту информацию используя идентификаторы безопасности SID :

  • от одного пользователя к другому
  •  из одной группы (локальной или глобальной) в другую
  • из домена в домен

Все идентификаторы SID, с которыми работает утилита, как локальные, так и сетевые, кэшируются для снижения нагрузки на сеть.

Все, что делается с помощью таких инструментов как Xcalcs, Calcs и Icacls, и даже больше, можно сделать, используя SubInACL.

Название утилиты происходит от англ. «SUBstitute SIDs in ACL» т.е. подмена идентификаторов безопасности напрямую, а не через разрешения. Отсюда вытекают некоторые ограничения в работе с наследованием и разрешениями.

Основное предназначение утилиты  – упростить процедуру различных сценариев  миграции. Например миграция пользователей  в новый домен из рабочей группы и из домена в домен. Или миграция файлов с сервера на сервер, от пользователя к пользователю. Утилита существует со времен Windows NT 3.51, но работает и на всех последующих версиях ОС ветки NT. По словам разработчика SubInACL стала предшествинницей такого известного инструмента для миграций как ADMT.

Список объектов, с которыми работает утилита, очень широк:

  • Файлы;
  • Папки;
  • Ключи реестра;
  • Службы;
  • Принтеры;
  • Метабазы IIS;
  • Общие папки;
  • Кластерные общие папки;
  • Исполняемые процессы;
  • Объекты ядра;
  • Объекты именованного канала (\\.\pipe\);
  • Объекты почтовых слотов  (\\.\mailslots\);
  • Объекты безопасности SAM;

Дескрипторы безопасности и  SubInACL

Для уверенной работы с утилитой необходимо понимать назначение и устройство Дескрипторов безопасности, разбираться в терминах SID, ACL, SACL, DACL, ACE, PACE, AACE (подробнее см. раздел Ссылки).

Дескриптор безопасности — это специальная структура, которая хранит:

  • информацию о безопасности объекта, включающую идентификатор безопасности (SID) владельца объекта
  • два вида списков ACL – системный список контроля доступа SACL и список управления доступом DACL
  • прочую информацию

SubInACL получает информацию о разрешениях, аудите, владельце объекта в дескрипторах безопасности объектов из списков контроля доступа ACL (Access Control List), которые состоят из отдельных записей ACE (Access Control Entries). Каждая такая отдельная запись содержит информацию о разрешениях (аудите) для отдельного пользователя (или группы пользователей).

Эту систему можно сравнить с бюро пропусков на предприятии с разделяемым доступом. В каждом здании предприятия есть проходная, где для входа вы предъявляете свой документ (SID), в журнале посещений делается отметка о вашей попытке войти (SACL) и по списку посетителей проверяется ваше право на вход (DACL). В данном случае SubInACL можно сравнить с сотрудником службы безопасности этого предприятия, который может разрешить или запретить при необходимости доступ посетителей на любой объект.

Синтаксис

Синтаксис утилиты немногим отличается от других консольных продуктов Microsoft – команды и опции выделяются наклонной чертой – ‘/’. Разделителем команды и ее опций, обычно, служит символ равно ‘=’. Однако, есть исключение параметр – имя объекта (путь к нему), например, отделяется  пробелом.

Пример:

Subinacl /noverbose=0 /file C:\Example.file /display=sdsize

отобразит дескриптор безопасности файла C:\Example.file. Как видно, между опцией тип_объекта и именем_обьекта стоит пробел, а не символ разделителя «равно», как в прочих параметрах.

Более того, команды /file и /subdirectories тоже могут использовать символ разделитель, но только для задания параметров  =directoriesonly или =filesonly, путь к объекту все равно отделен пробелом. Обратите на это внимание.

Вы можете изменить символ разделитель на любой другой с помощью параметра /separator=символ, если символ ‘=’ нужен для других целей.

Дополнительные возможности утилиты направлены в основном на повышение производительности и удобства работы. Например, любую команду можно не указывать целиком, а напечатать первые три буквы. Например, вместо

Subinacl /noverbose /file c:\some.txt /display

можно напечатать

Subinacl /nov /fil c:\some.txt /dis

Не забывайте при наличии пробелов заключать пути к объектам или их имена в кавычки! Иначе вместо запрета доступа к ветке HKLM\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server, Вы запретите доступ к ветке HKLM\Software\Microsoft\Windows !

SubInACL по умолчанию (если не указанно иное) запускается со следующими опциями:

/verbose /statistic /expandenvironmentsymbols /notestmode

Условно можно сгруппировать команды и опции по выполняемым задачам:

  1. Управляющие: setowner, owner, perm, audit, testmode, notestmode, accesscheck, setprimarygroup, grant, deny, sgrant, sdeny, revoke, playfile;
  2. Обслуживание SID: cleandeletedsidsfrom, suppresssid, compactsecuritydescriptor, dumpcachedsids, findsid;
  3. Обслуживание миграции: accountmigration, replace, changedomain, migratetodomain, alternatesamserver, offlinesam;
  4. Управление выводом:  display, confirm, ifchangecontinue, pathexclude, objectexclude, outputlog, errorlog, stringreplaceonoutput, expandenvironmentsymbols, noexpandenvironmentsymbols, statistic, nostatistic, separator, noverbose, verbose;

Важные особенности

Следует отметить ограничение утилиты — нельзя использовать комбинацию из разрешающей ACE и запрещающей ACE одновременно. Также SubInACL может задавать только общие разрешения (Read, Write). Несмотря на это выводится информация в «низкоуровневом» формате с отображением особых разрешений, и можно «схитрить» используя язык SDDL (/display=sddl) и команды /outputlog, /playfile.

Имеется в виду выгрузка дескриптора безопасности в файл в формате SDDL (а можно выгрузить и  просто в режиме /noverbose , но редактировать шестнадцатеричную маску доступа конечно не так удобно :-) ручное изменение и последующее применение этого файла:

Subinacl  /noverbose /outputlog=sddl_format.txt /file C:\test.exe /display=sddl

Также утилита не умеет управлять наследованием разрешений, что несколько огорчает.  Интересно, что ни один автор статей прочитанных мной, почему- то не додумался до «хитрости» с  командами /display=sddl и команды /outputlog, /playfile. Сразу скажу – полноценно такой способ работать будет не всегда, поэтому лучше  им не пользоваться. Не забывайте об этом ограничении – если вы хотите задать разрешение на папку с файлами, Вам придется задать разрешение и на все файлы в папке.

Опция /offlinesam позволяет работать с SID в случае недоступности домена или локальной базы SAM. Предварительно надо создать файл с идентификаторами SID. Такой файл можно создать, используя опцию /dumpcachedsids. Обратите внимание – это опция, и она работает только в связке с другими командами, либо в командном файле. Чтобы быстро выгрузить буферизированные SID в файл, выполните на компьютере источнике базы SAM команду

Subinacl /dumpcachedsids=filename.txt /subdirectories D:\*

где диск D: — диск с которым работают пользователи, над чьими учетными записями будут производиться в дальнейшем действия, а filename.txt – файл, куда будет выгружен локальный буфер идентификаторов безопасности. В случае, если база SAM на локальном компьютере или домене не содержит нужных записей, но все-таки  где-то в сети есть компьютер с нужной информацией – используйте команду /alternatesamserver.

В справке не совсем верно отражена равнозначность опций /verbose=1 и /verbose=2 опции /verbose. На самом деле только опция /verbose=2 аналогична /verbose,  а опция /verbose=1 выдает сокращенный вывод, аналогичный /noverbose , отличаясь от него только наличием информации о наследовании. Разработчик рекомендовал мне не использовать /verbose=1. Недокументированный же ключ /verbose=0 вообще полностью аналогичен /noverbose. Все это легко проверить самостоятельно.

Используя команды /file /subdirectories, не забывайте про их параметры [=directoriesonly | =filesonly].

Команда /display также имеет необязательные параметры [=dacl | =sacl | =owner | =primarygroup | =sdsize | =sddl], из них поясню последних два. Sdsizeпокажет размер дескриптора безопасности объекта, а sddl покажет дескриптор безопасности в традиционной строковой «буквенно- точеченой» записи. Если применить этот параметр с опцией /outputlog, то можно получить такие записи в файле отдельно от другой информации.

Пример использования

Приведу небольшой пример использования утилиты.

Крупная организация мигрирует из рабочей группы в домен. Задача — не прерывая работы пользователей перевести все компьютеры из рабочей группы в домен, при этом перенести старые профили пользователей в новые (не затрагивая старый профиль).

Очевидно, основная трудность в этой ситуации – отсутствие прав доступа  у новой доменной учетной записи пользователя к старому профилю пользователя (папке пользователя и файлу реестра NTUSER.DAT).

Подразумевается, что оба профиля уже существуют, т.е. был осуществлен вход под именем нового пользователя хотя бы один раз.

Решение задачи – войти под учетной записью Администратора Домена и скопировать все папки и файлы из старого профиля в новый, включая кусты реестра NTUSER.DAT и UsrClass.DAT, заменив, таким образом, новый профиль настройками из старого профиля. Проблема доступа к кусту реестра решается заменой разрешений для старой учетной записи на разрешения для новой.

В масштабах 1-2 компьютера это можно сделать вручную. Но в рамках предприятия эта процедура будет довольно утомительной. Поэтому оптимальным решением будет написать скрипт.

@Echo off

 

Set OLD_USER=%1

Set NEW_USER=%2

Set USER_DISK=%3

Set USRCLASS=”Local Settings\Application Data\Microsoft\Windows”

 

Rem Извлекаем из реестра полный путь к папке, содержащей профили пользователей

SET profiles=%AllUsersProfile%

SET profiles=%profiles:~0,-10%

 

Rem Копируем профиль и заменяем его владельца

xcopy «%profiles%\%OLD_USER%\*.*» «%profiles%\%NEW_USER%» /E /Q /H /R /K /Y

Subinacl /noverbose /subdirec «%profiles%\%NEW_USER%» /setowner=»%NEW_USER%»

Subinacl /noverbose /subdirec «%profiles%\%NEW_USER%\*» /setowner=»%NEW_USER%»

 

Rem Загрузка скопированного куста старого пользователя и  замена разрешений

Reg Load HKEY_USERS\Temph «%profiles%»\%NEW_USER%\NTUSER.DAT

Reg Load HKEY_USERS\Temph2 «%profiles%»\%NEW_USER%\%USRCLASS%\USRCLASS.DAT

Subinacl /noverbose /subkeyreg HKEY_USERS\Temph  /replace=%OLD_USER%=%NEW_USER%

Subinacl /noverbose /subkeyreg HKEY_USERS\Temph\*  /replace=%OLD_USER%=%NEW_USER%

Subinacl /noverbose /subkeyreg HKEY_USERS\Temph2  /replace=%OLD_USER%=%NEW_USER%

Subinacl /noverbose /subkeyreg HKEY_USERS\Temph2\*  /replace=%OLD_USER%=%NEW_USER%

 

Reg Unload HKEY_USERS\Temph

Reg Unload HKEY_USERS\Temph2

 

Pause

Exit

Запуск скрипта осуществляется с указанием старого и нового имени профиля пользователя, например

mig2dom.cmd IvanPetrov VasiliyZaytsev

Из примера хорошо виден недостаток SubInACL – из-за неумения работать с наследованием приходится менять разрешения отдельно на папку и отдельно на вложенные в нее объекты. Однако с другой стороны утилита умеет работать с большим количеством объектов, чем другие утилиты не могут похвастаться.

Ссылки

1. Изменение разрешений с помощью SubinACL

2. Управление списком контроля доступа

3. Контроль доступа. Знакомство с правами доступа к файлам и реестру Windows

4. Путеводитель по разрешениям файловой системы

5. Простейший пример применения — возврат прав пользователя для множества файлов и подпапок.

6. Аудит владельцев файлов

Один комментарий

  1. Аватар mcpclubminsk

    Reblogged this on Mcp Club Minsk's Blog and commented:

    Если надо разобраться в утилите, сначала, лучше прочесть предисловие

Оставьте комментарий

Создайте подобный сайт на WordPress.com
Начало работы