В статье «Изменение разрешений с помощью Subinacl» (см. статью на нашем сайте http://www.osp.ru/win2000/worknt/advice/28adv09.htm — прим. ред.) я уже рассказывал о полезном инструменте обеспечения безопасности и выполнения миграции, который входит в состав Microsoft Windows 2000 Server Resource Kit и Microsoft Windows NT Server 4.0 Resource Kit. Однако эта программа настолько важна, что нелишним будет упомянуть о ней еще раз — она достойна дополнительного внимания.

Subinacl позволяет создавать и удалять разрешения примерно так, как это ранее делалось с помощью программы Xcacls, а также манипулировать идентификаторами безопасности SID, что очень облегчает выполнение миграции. С помощью Subinacl можно менять собственника, изменять элементы списка контроля доступа (ACE), тестировать предоставленные разрешения на доступ и, наконец, создавать резервные копии и восстанавливать списки контроля доступа (ACL).

Изменение собственника

На протяжении ряда лет в различных материалах, посвященных безопасности Windows NT, многие авторы (и я не исключение) утверждали, что хитрость работы с правом владения в NTFS (ownership) состоит в получении такого права, а не в его предоставлении. Знание этой тонкости позволяло пользователям защищать свои домашние каталоги от посторонних глаз. Пользователю достаточно было захватить право владения домашним каталогом, затем самому себе назначить разрешение Full Control на данный каталог со всем его содержимым, а для Everyone установить блокировку. После воплощения описанного сценария единственный способ, каким еще мог воспользоваться рассеянный администратор, если ему вдруг захотелось бы посмотреть файл пользователя, — самому применить ту же технику: захватить право владения файлом, предоставить самому себе нужные разрешения, и уж только потом он мог бы увидеть содержимое файла. Но в этом случае на файле остаются неизгладимые «отпечатки пальцев», поскольку администратор может только взять право владения, но никак не предоставить это право.

Я полагаю, что авторы упомянутых статей утверждают принцип «взять, но дать», имея в виду тот факт, что пользователи работают с разрешениями NTFS через графический интерфейс пользователя, а там поддерживается только «взять». Но в своих «недрах» NT, очевидно, позволяет как захватить право владения, так и предоставить его — ведь программа Subinacl может делать и то и другое. Используя команду Subinacl с параметром /setowner, можно изменить право владения для файла. Например, для того чтобы присвоить право владения файлом testfile.txt пользователю Mary в домене ACME, нужно применить следующий синтаксис:

subinacl /file c: estfile.txt /setowner=acmemary

Параметр /setowner «понимает» групповые символы и параметр /subdirectories, так что указания /setowner вполне достаточно для обработки домашнего каталога. Остается только создать каталог, скопировать туда файлы пользователя, и затем использовать Subinacl для предоставления пользователю прав владения.

Возможность с помощью команды Subinacl предоставить и захватить право владения еще не значит, что пользователю не удастся защитить свои файлы от администратора. Чтобы защитить каталог, следует включить для этого каталога аудит. Как ни странно, с помощью Subinacl нельзя установить аудит в ACE. Если воспользоваться параметром /audit, это приведет к сбросу всех установок аудита в ACE:

subinacl /file testit.txt /audit

В перечне параметров Subinacl параметр установки аудита в записи ACE отсутствует.

Изменение ACE

В кратком описании возможностей команды Subinacl говорится, что основное назначение этой команды — упростить процедуру миграции (т. е. процесса перевода пользователей из одного домена в другой). Хотя на рынке программного обеспечения можно отыскать более сложные и комплексные программы, утилита Subinacl не так уж плоха — для бесплатно предоставляемой услуги.

Предположим, что вы недавно были назначены администратором в многодоменной вычислительной среде в компании с числом сотрудников порядка 5000 и 40 доменами NT. Часть доменов — домены учетных записей, все остальные — ресурсные.

Можно убедить начальника реорганизовать сеть по схеме «один главный домен + несколько ресурсных». При этом следует проводить реорганизацию постепенно, шаг за шагом, чтобы всегда оставался путь к отступлению. Сначала был создан новый главный домен Windows 2000 под названием ALLOFUS. Задача — перенести учетные записи всех пользователей сети на новый сервер и установить доверительные отношения со старыми доменами NT 4.0, на которых размещены ресурсы. К примеру, в домене ENGINEERING находятся серверы и пользователи. Нужно продублировать учетные записи домена ENGINEERING в домен ALLOFUS, затем установить доверительные отношения таким образом, чтобы серверы ENGINEERING «пускали» к себе пользователей домена ALLOFUS.

Серверы ENGINEERING на всех совместно используемых ресурсах работают со списками ACL. Например, согласно списку ACL, только пользователь Gordon имеет разрешение записывать данные в свой каталог. Однако ACL ссылается на старую учетную запись Gordon в домене ENGINEERING, а не на новую — в домене ALLOFUS. Таким образом, чтобы предоставить пользователю Gordon разрешения на доступ в свой каталог, администратор должен изменить каждое разрешение NTFS на всех серверах ENGINEERING и заменить в списках ACL ссылку Gordon из ENGINEERING на ссылку Gordon из ALLOFUS. В домене ENGINEERING прописаны учетные записи сотен пользователей, и задача изменения ACL представляется необъятной — если бы не Subinacl с ее возможностями /changedomain и /migratetodomain.

Основная идея — запустить Subinacl в дереве каталога с любым из этих параметров. Утилита проверяет каждую запись NTFS ACE и заменяет все упоминания о SID старого домена на соответствующие SID из нового домена. Предположим, например, что для какого-то определенного каталога Mary имеет разрешения Full Control, William — Read, Amy — Modify. Хотя в домене ENGINEERING существуют идентификаторы Mary, William и Amy, для каждого из них в домене известны и имена для регистрации — соответственно, Mary, William и Amy. Когда в домене ENGINEERING используются эти ACE, возможно следующее развитие событий:

  • выясняется, что некто с данным идентификатором SID имеет разрешение Full Control;
  • Subinacl связывается с контроллером домена ENGINEERING и узнает имя пользователя (Username) для найденного SID;
  • контроллер домена отвечает — «Mary»;
  • Subinacl связывается с контроллером домена ALLOFUS и спрашивает, существует ли в базе данных пользователь с именем Mary?
  • если в новом домене присутствует аналогичное имя, Subinacl удаляет ACE со ссылкой на SID из старого домена, ENGINEERING, и создает ACE с разрешением Full Control для дескриптора SID, связанного с учетной записью Mary из нового домена, ALLOFUS;
  • для каждой записи ACE в структуре дерева каталогов утилита Subinacl выполняет аналогичные действия для всех одноименных пользователей.

Синтаксис команды с параметром /changedomain:

subinacl [object] /changedomain=olddomainname=newdomainname

где object — это тип и имя объекта, для которого изменяется ACE, olddomainname и newdomainname — имена старого и нового домена, соответственно. Объектом может быть файл (/file), подкаталог (/subdirectory), раздел реестра(/keyreg), общий ресурс (/share) и т. д. Пример: проверить каждый файл и каталог на диске С и заменить все SID старого домена ENGINEERING на новые из домена ALLOFUS для совпадающих имен пользователей. Вот как в этом случае будет выглядеть команда Subinacl:

subinacl /subdirectories c:* /changedomain=engineering=allofus

Параметр /migratedomain имеет тот же синтаксис, что и /changedomain, за одним исключением: вместо замены ACE со ссылкой на старый домен ссылками на новый, /migratedomain дополняет существующие ACE ссылками на новый домен. Другими словами, если старая учетная запись имела разрешения Full Control для какого-то каталога и запускается Subinacl с параметром /changedomain, то старая учетная запись уже не имеет доступа к данному каталогу. Только новая учетная запись (одноименный пользователь из нового домена, в нашем случае — ALLOFUS) будет иметь доступ к нему. Но если задействовать параметр /migratedomain, то обе учетные записи — из старого и нового доменов — смогут работать с каталогом с разрешениями Full Control.

Тестирование доступа

Утилита Subinacl может использоваться для проверки результата проведения миграции и возможности доступа пользователей нового домена к ресурсным серверам старого домена. Параметр /accesscheck дает возможность проверить доступ. С его помощью администратор получит ответ на вопрос: «Имеется ли у пользователя X доступ к объекту Y?»

Синтаксис команды с параметром /accesscheck:

subinacl [object] /accesscheck=domainnameusername

где object — тип и имя элемента, для которого проверяется доступ, domainname — имя домена, username — имя пользователя. Например, для того чтобы проверить, доступен ли пользователю Mary из домена ALLOFUS для работы файл C: estit.txt, запустите команду:

subinacl /file c: estit.txt /accesscheck=allofusmary

Subinacl запросит пароль пользователя. Как получить пароль Mary? Вспомним, что /accesscheck — это постмиграционный инструмент. Если для миграции пользователей применялась программа addusers.exe, назначается временный пароль, который пользователь после самой первой регистрации должен будет изменить. Следовательно, пока этого не произошло, пароль Mary известен администратору.

Резервирование и восстановление ACL

Напоследок рассмотрим одну из самых ценных возможностей Subinacl, связанную с управлением списками доступа, — создание резервных копий разрешений на доступ и их восстановление. Параметры Subinacl /noverbose и /output дают возможность сделать «снимок» ACL объекта или группы объектов, а параметр /playfile — восстановить ACL. Синтаксис команды с параметром /output:

subinacl /noverbose /output=filename subinacl command

где subinacl command — это набор типов объектов и действий утилиты Subinacl (можно сказать, что это любая команда Subinacl). Например, чтобы создать резервную копию NTFS ACL всех файлов корневого каталога диска С и сохранить полученные данные в С:aclbackups.txt, следует использовать команду:

subinacl /noverbose /output=c:aclbackups.txt /file c:*

Если запустить эту команду без параметра /output, то отчет о найденных ACL отобразится на экране, но сохранен не будет. Параметр /output обеспечивает сохранение полученных данных в файл.

Чтобы переназначить старые ACL и удалить все последние изменения, произошедшие со времени создания резервной копии, нужно воспользоваться режимом /playfile. Необходимо просто вызвать Subinacl с параметром /playfile, за которым следует имя файла-копии. Например:

subinacl /playfile c:aclbackups.txt

полностью восстановит NTFS ACL для всех файлов в корневом каталоге диска С.

В заключение хочу сказать, что чем больше я использую Subinacl, тем больше нахожу ей применений, и жалею, что не открыл ее для себя раньше. Учитесь на моих ошибках и начните работать с командой Subinacl прямо сейчас.

МаРК МИНАСИ — редактоp Windows NT Magazine MCSE и автор книги «Mastering Windows NT Server 4.0» (издательство Sybex). С ним можно связаться по адресу: mark@minasi.com.