Как известно любому администратору Windows, в NTFS управление разрешениями относится к числу наиболее эффективных средств обеспечения безопасности систем. В ряде случаев некоторую настройку разрешений позволяет выполнить закладка Security в свойствах папки. Однако для повторяющихся или сложных заданий используются более мощные инструменты командной строки, среди которых самая полезная утилита — Cacls, название которой, change access control list, означает «изменить список контроля доступа». Однако у Cacls есть недостатки — например, сложно установить права доступа к папке так, чтобы они наследовались. Из-за этого утилита, возможно, не будет включена в последующие версии Windows (хотя в Windows Vista она пока есть).

Тем не менее Microsoft не лишает пользователей своей заботы: в Vista есть другой инструмент управления разрешениями доступа, работающий в режиме командной строки — Icacls. Подобно Cacls, Icacls позволяет добавлять и удалять разрешения и на первый взгляд кажется полной заменой Cacls. Однако это не так, поскольку у Icacls есть некоторые новые возможности, а также отсутствует одна очень полезная функция Cacls: Icacls нельзя использовать для ручного кодирования строки SDDL (Security Descriptor Definition Language). Но в целом очевидно, что Icacls — усовершенствованный вариант утилиты Cacls.

Как работает утилита

Icacls показывает явные и унаследованные разрешения на файл или папку, хотя и в закодированном формате. Например, если я создаю файл под названием test.txt, затем через графический интерфейс добавляю для себя явные разрешения Full Control и набираю команду

icacls test.txt

то получаю результат, показанный на экране.

Первое разрешение, vbus32Mark:(F), указывает на то, что локальная учетная запись Mark имеет уровень доступа Full Control к системе vbus32. F — используемое в Icacls, как и в Cacls, условное обозначение для Full Control. Следующее разрешение касается учетной записи System. Заметим, что это разрешение содержит не только F, но и I. Буква «I» указывает на то, что System наследует право доступа Full Control. Интересно, что кодировка предусмотрена только для унаследованных разрешений, для явных разрешений —нет. Icacls имеет много других кодовых символов, но здесь мы рассмотрим еще два из тех, что фигурируют в примере на экране 1: M (Modify) — разрешение на изменения, RX (Read and Execute) — разрешение чтения и исполнения.

Результаты работы Icacls
Для предоставления разрешений доступа к файлу или папке можно использовать ключ /grant. В самом простом виде это выглядит так:

icacls /grant :

Таким образом, для предоставления учетной записи Joe разрешений на удаление файла test.txt можно использовать команду:

icacls test.txt /grant joe:d

Заметим, что регистр значения не имеет. С одинаковым результатом можно набрать JOE:D, Joe:D или joe:D.

Следует отметить, что использование утилиты Cacls для предоставления разрешений предполагает (по умолчанию) удаление всех ранее назначенных разрешений, включая унаследованные! Зафиксировать разрешения можно путем добавления /E к Cacls, но я так часто забываю про /E, что мне очень нравится новый синтаксис Icacls. Первоначально Icacls не предполагает удаления всех существующих разрешений перед назначением новых. Однако, если желательно, чтобы все разрешения, которые имеет данный пользователь, удалялись перед назначением новых разрешений, можно заменить /grant на /grant:r. Например, если пользователю Joe предоставить разрешения Modify с использованием команды

icacls test.txt /grant joe:m

а затем — разрешения Read and Execute:

icacls test.txt /grant joe:rx

то команда Icacls Test.txt для Joe покажет разрешения Modify, поскольку Modify включает в себя Read and Execute. Но если вместо этого набрать команду

icacls test.txt /grant:r joe:rx

то Joe будет иметь только разрешения Read and Execute.

Для удаления любых явных разрешений можно использовать опцию /remove. Видимо, Icacls не предусматривает возможности удаления унаследованных разрешений. Удалить все разрешения пользователя Joe можно с помощью команды

icacls test.txt /remove joe

Что означает I?

Что означает I в названии Icacls, я точно не знаю. Возможно, здесь подразумевается inheritable (наследуемый), поскольку инструмент устраняет упомянутый выше недостаток Cacls. Может быть, имеется в виду integrity (целостность), так как инструмент предусматривает управление уровнями целостности Vista. Возможно, Icacls — просто Apple-версия Cacls! В любом случае Icacls — достойный преемник Cacls, и в отношении этого инструмента остается еще много тем для обсуждения.