Содержащаяся в наборах Microsoft Windows 2000 Server Resource Kit и Microsoft Widows NT Server 4.0 Resource Kit утилита Subinacl – это один из самых мощных и полезных инструментов командной строки, который позволяет непосредственно редактировать практически любую информацию, относящуюся к сфере безопасности – разрешения, принадлежность, аудит – для всех типов объектов. С помощью Subinacl можно изменять эту информацию не только для файлов, папок и сетевых принтеров, но и управлять разрешениями в разделах реестра, системных службах и метабазе IIS.

Просмотр списков ACL

Основное достоинство Subinacl - возможность просматривать разрешения и настройки безопасности объекта в целом. Список управления доступом ACL позволяет управлять полномочиями; каждая запись в ACL называется записью управления доступом (ACE). Если, например, разрешения на файл в домене дают полный контроль администраторам и Мэри, а Джону доступ полностью запрещен, то список ACL этого файла содержит три ACE, описывающих права доступа администраторов, Мэри и Джона. Чтобы увидеть ACL файла, используйте команду

Subinacl /verbose=1 /file c:\testfile.txt 
 /display

где testfile.txt - имя файла. На Экране 1 показан результат выполнения этой команды. За именем файла следует имя владельца файла. Информация о первичной группе обычно требуется только для POSIX-приложений. Далее выводится число записей аудита и число записей разрешений, а затем предоставляется информация из этих ACE. Windows 2000 и NT позволяют точно указывать, что подлежит аудиту – например, каждый случай, когда Мэри не удается записать данные в файл или когда Джону не удается открыть его. Subinacl узнает о наличии заданных условий из ACE аудита. ACE разрешений описывают разрешения, которые дают пользователям возможность просматривать или изменять файл или папку.

В примере показано три записи о разрешениях: одна запись ACE для администраторов, одна для Мэри и одна - для Джона. Значение параметра Type указывает, является ли запись ACE разрешающей или запрещающей: значение . 0x1 указывает на запрещающую запись (Deny ACE), а 0x0 - на разрешающую (Allow ACE). Значение параметра AccessMask определяет разрешения, накладываемые данной ACE. Чтобы преобразовать значение параметра AccessMask в конкретные разрешения, можно либо исследовать это значение поразрядно, либо выполнить команду Subinacl с ключом /verbose=2. Эти значения соответствуют разрешениям самого низкого уровня для файлов. Администраторы оперируют в основном составными разрешениями; такие разрешения покрывают одно или несколько разрешений низкого уровня. Например, разрешение на чтение (Read) состоит из нескольких разрешений низкого уровня – чтение данных (Read Data), чтение атрибутов (Read Attributes), чтение расширенных атрибутов (Read Extended Attributes), чтение разрешений (Read Permissions). Для просмотра разрешений низкого уровня списка ACL с помощью графического интерфейса откройте Windows Explorer, затем диалоговое окно Properties любого файла или папки NTFS и перейдите на вкладку Security. Нажмите Advanced для перехода к диалоговому окну Advanced Control Settings, щелкните любую запись ACE, затем View/Edit.

Добавление записей ACE

Subinacl может использоваться для изменения разрешений, наложенных на файлы и папки. Все, что делается с помощью таких инструментов как Xcalcs и Calcs, можно сделать и используя Subinacl. Утилита может изменять существующие записи ACE, а также создавать новые разрешающие или запрещающие ACE. Следующая команда добавляет запись ACE, предоставляющую право на чтение новому пользователю Ларри из компании Example.

Subinacl /file c:\testfile.txt 
 /grant=example\larry=R

Ключ /file в этой команде сообщает утилите Subinacl, что команда будет работать с ACE файла. Также могут использоваться следующие ключи: системной службы (/service), раздела реестра (/keyreg или /subkeyreg), группы папок и всех подпапок в них (/subdirectories), папки совместного доступа (/share), файла общего доступа на кластере (/clustershare), объекта ядра (/kernelobject) или метабазы IIS (/metabase). Параметр c:\testfile.txt указывает файл, с которым будет работать команда. В имени файла могут использоваться шаблоны.

Параметр /grant означает, что создается новая разрешающая запись, а не создается запрещающая запись (/deny) или редактируется существующая (/replace). Следующий параметр указывает имя учетной записи, и последний символ определяет назначаемое разрешение. Subinacl воспринимает R (чтение), F (полный доступ), C (изменение), P (изменение полномочий), O (стать владельцем), X (запуск на выполнение), E (чтение и запуск программы), W (запись), D (удаление). Замечу, что хотя Subinacl позволяет просматривать только разрешения низкого уровня, она дает возможность назначать разрешения только высокого уровня. В приведенном примере параметр /grant=example\larry=R означает, что Subinacl создает запись ACE, которая дает учетной записи example\larry разрешение на чтение.

Для создания запретов используется команда /deny. Например, следующая команда запрещает Ларри производить запись в файл:

Subinacl /file c:\testfile.txt 
 /deny=example\larry=W

Возможно создание сразу нескольких разрешающих или запрещающих ACE. Например, для присвоения Ларри полномочий на чтение и запись достаточно просто перечислить подряд параметры, соответствующие разрешениям: example\larry=RW. С другой стороны, Subinacl не может оперировать одновременно с ACE обоих типов для одного и того же человека. Возможно, и хотелось бы дать Ларри разрешение на чтение и тут же запретить запись, но нельзя использовать комбинацию из разрешающей ACE и запрещающей ACE. Это ограничение присутствует и в Xcalcs, и в Calcs, возможно, потому, что все три инструмента сначала появились в NT 4.0, где разрешающая и запрещающая ACE обрабатывались по разному. Не исключено, что следующий урожай утилит восполнит этот пробел.

Изменение разрешений для нескольких файлов выполняется с использованием шаблонов в именах файлов. Но что если требуется внести изменения для целого диска или для дерева каталогов в пределах диска? В таком случае следует использовать параметр /subdirectories. Например, если необходимо предоставить Мэри полный доступ ко всем папками и файлами в C:\testfolder, то нужно ввести следующую команду:

Subinacl /subdirectories C:\testfolder\* 
 /grant=example\mare=F

Обратите внимание, что использование слэша и шаблона после C:\testfolder обязательно, иначе Subinacl назначит разрешения указанной папке, а вовсе не всем файлам и подпапкам в этой папке.

Замена, удаление и очистка содержимого SID

Предположим, что есть набор файлов, к которым имеет доступ только один сотрудник – Лаура. Лаура покидает компанию, а ее место занимает Джанет. Джанет нужен доступ ко всем этим файлам. Для решения этой проблемы (не упадите со стула) обычно необходимо редактировать ACL каждого файла по отдельности через графический интерфейс. Хорошо еще если вы являетесь владельцем файлов. Если же нет, то предстоит сначала стать владельцем, а уж потом стирать до основания мышь, переписывая ACL. В качестве альтернативы можно использовать Subinacl и выполнить задачу, введя одну строку:

Subinacl /file * /replace=example\laurie= 
example\janet

Эта команда проверяет каждую запись ACE каждого файла в текущем каталоге и делает замену – вместо SID Лауры записываются SID Джанет в каждой ACE, имеющей отношение к Лауре. Заменяющий SID может быть даже из другого домена, при условии, конечно, что между доменами установлены доверительные отношения.

Допустим, вместо того, чтобы менять SID Лауры на SID Джанет, нужно удалить все ACE Лауры. Для этого используется Subinacl с параметром /revoke. К примеру, для удаления всех следов Лауры с диска C:\ сервера, следует ввести:

Subinacl /subdirectories C:\* 
 /revoke=example\laurie

Subinacl также поддерживает почти идентичный параметр /suppresssid, обладающий одним дополнительным свойством. Использование Subinacl с этим ключом, когда пользователь, учетная запись которого удаляется, владеет файлом, позволяет назначить владельцем файла группу Everyone.

Иногда, открывая список разрешений файла, приходится видеть вместо обычной учетной записи пользователя запись Account Unknown (неизвестная учетная запись). Появление этой записи означает, что учетная запись, обладавшая разрешениями, удалена. Предположим, например, что вместо блокирования пользовательской учетной записи Лауры ее удалили. При вызове ACL файла, содержащего ACE Лауры, Windows Explorer видит запись ACE с определенным SID – c тем, который соответствует старой учетной записи Лауры – и запрашивает у контроллера домена (DC) имя пользователя для этой учетной записи. Данный процесс можно заметить на загруженном домене: при открытии диалогового окна Properties некоторого файла и переходе на вкладку Security сначала видны только SID, а затем, через несколько секунд, появляются имена учетных записей. Задержка объясняется тем, что запрос сервера к DC на поиск имен учетных записей и ответ контроллера домена требуют некоторого времени. Поскольку учетная запись Лауры удалена, никакое имя не может прийти в ответ на указанный SID – так появляется Account Unknown. Со временем списки ACL компании могут переполниться этими обрывками. Subinacl поможет очистить их, нужно только выполнить команду с параметром /cleandeletedsidsfrom (обязательно указывается домен):

Subinacl /subdirectories c:\* 
 /cleandeletedsidsfrom=example

Кое-что в запасе

Subinacl - исключительно полезная команда, и с ее помощью можно сделать больше, чем было описано в данной статье. В следующих статьях я расскажу о других возможностях этого инструмента. Но нет необходимости ждать – используя команду с параметром /help, можно исследовать возможности Subinacl самостоятельно. Кроме того, ключ /testmode позволяет запускать команду в тестовом режиме:

Subinacl /testmode /subdirectories 
 c:\testfolder\* /grant=example\mary=F

В этом режиме на экран выводятся те же результаты, что и в обычном режиме, но Subinacl не вносит каких-либо изменений на диск.

Марк Минаси - редактор Windows NT Magazine, имеет сертификат MCSE; является автором книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.