Команда iCACLS – управление доступом к файлам и папкам.
Команда iCACLS позволяет отображать или изменять списки управления доступом ( A ccess C ontrol L ists (ACLs) ) к файлам и папкам файловой системы. Утилита iCACLS.EXE является дальнейшим усовершенствованием утилиты управления доступом CACLS.EXE.
Управление доступом к объектам файловой системы NTFS реализуется с использованием специальных записей в таблице MFT (Master File Table). Каждому файлу или папке файловой системы NTFS соответствует запись в таблице MFT, содержащая специальный дескриптор безопасности SD (Security Descriptor). Каждый дескриптор безопасности содержит два списка контроля доступа:
System Access-Control List (SACL) — системный список управления доступом .
Discretionary Access-Control List (DACL) — список управления избирательным доступом.
SACL управляется системой и используется для обеспечения аудита попыток доступа к объектам файловой системы, определяя условия при которых генерируется события безопасности. В операционных системах Windows Vista и более поздних, SACL используется еще и для реализации механизма защиты системы с использованием уровней целостности ( Integrity Level, IL).
DACL — это собственно и есть список управления доступом ACL в обычном понимании. Именно DACL формирует правила, определяющие, кому разрешить доступ к объекту, а кому — запретить.
Каждый список контроля доступа (ACL) представляет собой набор элементов (записей) контроля доступа — Access Control Entries , или ACE ) . Записи ACE бывают двух типов (разрешающий и запрещающий доступ), и содержит три поля:
SID пользователя или группы, к которому применяется данное правило
Вид доступа , на которое распространяется данное правило
Тип ACE — разрешающий или запрещающий.
SID — Security ID – уникальный идентификатор, который присваивается каждому пользователю или группе пользователей в момент их создания. Посмотреть примеры SID можно , например с помощью команды WHOAMI /ALL . Как видим, система управления доступом к объектам NTFS оперирует не именами, а идентификаторами SID. Поэтому, например нельзя восстановить доступ к файлам и папкам, существовавший для удаленного из системы пользователя, создав его заново с тем же самым именем – он получит новый SID и правила записей ACE, применяемые к старому идентификатору SID, выполняться не будут.
При определении результатов запросов на доступ к объектам файловой системы NTFS применимы следующие правила:
Если в дескрипторе безопасности отсутствует DACL , то объект считается незащищенным, т.е. все имеют к нему неограниченный доступ.
Если DACL существует, но не содержит ни одного элемента ACE, то доступ к объекту закрыт для всех.
Для того чтобы изменить DACL объекта, пользователь (процесс) должен обладать правом записи в DACL (WRITE_DAC — WDAC). Право записи может быть разрешено или запрещено, с помощью утилиты icalc.exe , но даже если установлен запрет, все равно разрешение на запись имеется хотя бы у одного пользователя владельца файла или папки (поле Owner в дескрипторе безопасности), так как владелец всегда имеет право изменять DAC.
Варианты применения команды iCACLS:
ICACLS имя /save ACL_файл [/T] [/C] [/L] [/Q] — сохранение DACL для файлов и папок, соответствующих имени, в ACL-файл для последующего использования с командой /restore . Обратите внимание, что метки SACL, владельца и целостности не сохраняются.
ICACLS каталог [/substitute SidOld SidNew [. ]] /restore ACL_файл [/C] [/L] [/Q] — применение ранее сохраненных DACL к файлам в каталоге.
ICACLS имя /setowner пользователь [/T] [/C] [/L] [/Q] — смена владельца всех соответствующих имен. Этот параметр не предназначен для принудительной смены владельца; используйте для этой цели программу takeown.exe .
ICACLS имя /findsid Sid [/T] [/C] [/L] [/Q] — поиск всех соответствующих имен, содержащих ACL с явным упоминанием ИД безопасности.
ICACLS имя /verify [/T] [/C] [/L] [/Q] — поиск всех файлов с неканоническими ACL или длинами, не соответствующими количеству ACE.
ICACLS имя /reset [/T] [/C] [/L] [/Q] — замена ACL на унаследованные по умолчанию для всех соответствующих файлов.
ICACLS имя [/grant[:r] Sid:perm[. ]] [/deny Sid:perm [. ]] [/remove[:g|:d]] Sid[. ]] [/T] [/C] [/L] [/Q] [/setintegritylevel Level:policy[. ]]
/grant[:r] Sid:perm — предоставление указанных прав доступа пользователя. С параметром :r эти разрешения заменяют любые ранее предоставленные явные разрешения. Без параметра :r разрешения добавляются к любым ранее предоставленным явным разрешениям.
/deny Sid:perm — явный отзыв указанных прав доступа пользователя. Добавляется ACE явного отзыва для заявленных разрешений с удалением этих же разрешений в любом явном предоставлении.
/remove[:[g|:d]] Sid — удаление всех вхождений ИД безопасности в ACL. С параметром :g удаляются все вхождения предоставленных прав в этом ИД безопасности. С параметром :d удаляются все вхождения отозванных прав в этом ИД безопасности.
/setintegritylevel [(CI)(OI)]уровень — явное добавление ACE уровня целостности ко всем соответствующим файлам. Уровень задается одним из следующих значений:
Уровню могут предшествовать параметры наследования для ACE целостности, применяемые только к каталогам.
Механизм целостности Windows Vista и более поздних версий ОС, расширяет архитектуру безопасности путём определения нового типа элемента списка доступа ACE для представления уровня целостности в дескрипторе безопасности объекта (файла, папки). Новый ACE представляет уровень целостности объекта. Он содержится в системном ACL (SACL), который ранее используемом только для аудита. Уровень целостности также назначается токену безопасности в момент его инициализации. Уровень целостности в токене безопасности представляет уровень целостности (Integrity Level, IL) пользователя (процесса). Уровень целостности в токене сравнивается с уровнем целостности в дескрипторе объекта когда монитор безопасности выполняет проверку доступа. Система ограничивает права доступа в зависимости от того выше или ниже уровень целостности субъекта по отношению к объекту, а также в зависимости от флагов политики целостности в соответствующей ACE объекта. Уровни целостности (IL) представлены идентификаторами безопасности (SID), которые представляют также пользователей и группы, уровень которых закодирован в относительном идентификаторе (RID) идентификатора SID. Наиболее распространенные уровни целостности:
SID = S-1-16-4096 RID=0x1000 — уровень Low (Низкий обязательный уровень)
SID= S-1-16-8192 RID=0x2000 – уровень Medium (Средний обязательный уровень)
SID= S-1-16-12288 RID=0x3000 – уровень High (Высокий обязательный уровень)
SID= S-1-16-16384 RID=0x4000 – уровень системы (Обязательный уровень системы).
e — включение наследования
d — отключение наследования и копирование ACE
r — удаление всех унаследованных ACE
ИД безопасности могут быть в числовой форме (SID), либо в форме понятного имени (username). Если задана числовая форма, добавьте * в начало ИД безопасности, например — *S-1-1-0 . Параметры командной строки iCACLS:
/T — операция выполняется для всех соответствующих файлов и каталогов, расположенных в заданном каталоге.
/C — выполнение операции продолжается при любых файловых ошибках. Сообщения об ошибках по-прежнему выводятся на экран.
/L — операция выполняется над самой символьной ссылкой, а не над ее целевым объектом.
/Q — утилита ICACLS подавляет сообщения об успешном выполнении.
Утилита ICACLS сохраняет канонический порядок записей ACE:
разрешение — это маска разрешения, которая может задаваться в одной из двух форм:
последовательность простых прав:
N — доступ отсутствует
F — полный доступ
M — доступ на изменение
RX — доступ на чтение и выполнение
R — доступ только на чтение
W — доступ только на запись
D — доступ на удаление
список отдельных прав через запятую в скобках:
DE — удаление
RC — чтение
WDAC — запись DAC
WO — смена владельца
S — синхронизация
AS — доступ к безопасности системы
MA — максимально возможный
GR — общее чтение
GW — общая запись
GE — общее выполнение
GA — все общие
RD — чтение данных, перечисление содержимого папки
WD — запись данных, добавление файлов
AD — добавление данных и вложенных каталогов
REA — чтение дополнительных атрибутов
WEA — запись дополнительных атрибутов
X — выполнение файлов и обзор папок
DC — удаление вложенных объектов
RA — чтение атрибутов
WA — запись атрибутов
Права наследования могут предшествовать любой форме и применяются только к каталогам:
(OI) — наследование объектами
(CI) — наследование контейнерами
(IO) — только наследование
(NP) — запрет на распространение наследования
(I) — наследование разрешений от родительского контейнера
Примеры использования iCACLS:
icacls — запуск без ключей используется для получения краткой справки по использованию команды.
icacls C:\Users — отобразить список управления доступом для папки C:\Users. Пример отображаемой информации:
C:\Users NT AUTHORITY\система:(OI)(CI)(F)
BUILTIN\Администраторы:(OI)(CI)(F)
BUILTIN\Пользователи:(RX)
BUILTIN\Пользователи:(OI)(CI)(IO)(GR,GE)
Все:(RX)
Все:(OI)(CI)(IO)(GR,GE)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
icacls c:\windows\* /save D:\win7.acl /T — сохранение ACL для всех файлов в каталоге c:\windows и его подкаталогах в ACL-файл D:\win7.acl . Сохраненные списки ACL позволят восстановить управление доступом к файлам и каталогам в исходное состояние, поэтому, прежде чем выполнять какие-либо изменения, желательно иметь файл сохраненных списков ACL.
Пример данных сохраненных списков доступа ACL:
В тех случаях, когда при выполнении команды iCACLS возникает ошибка, вызванная отказом в доступе к обрабатываемому объекту, можно продолжить выполнение команды, если задан параметр /C :
icacls «C:\System Volume Information\*» /save D:\SVI-C.acl /T /C — сохранение списков управления доступом ACL для всех файлов и подкаталогов каталога C:\System Volume Information с продолжением обработки в случае возникновения ошибки. По результатам обработки отображается сообщение о количестве успешно, и не успешно, обработанных файлов.
Для восстановления доступа к файлам и папкам используется параметр /restore :
icacls c:\windows\ /restore D:\win7.acl — восстановление списков контроля доступа к файлам и папкам каталога c:\windows из ранее сохраненного ACL-файла D:\win7.acl .
Утилита iCACLS для управления NTFS доступом к файлам и папкам
Одной из типовых задач администратора Windows при настройке доступа пользователей – управление NTFS разрешениями на папки и файлы файловой системы. Для управления NTFS разрешениями можно использовать графический интерфейс системы (вкладка Безопасность/Security в свойствах папки или файла), или встроенную утилиту командной строки iCACLS. В этой статье мы рассмотрим примеру использовании команды iCACLS для просмотра и управления разрешениями на папки и файлы.
Утилита iCACLS позволяет отображать или изменять списки управления доступом (Access Control Lists (ACLs) к файлам и папкам файловой системы. Предшественником у утилиты iCACLS.EXE является команда CACLS.EXE (доступна в Windows XP).
Чтобы просмотреть действующие разрешения на конкретную папку (например, C:\PS), откройте командную строку и выполните команду:
Данная команда вернет список всех пользователей и групп пользователей, которым назначены разрешения на данную папку. Попробуем разобраться в синтаксисе разрешений, которые вернула команда iCACLS.
c:\PS BUILTIN\Администраторы:(I)(OI)(CI)(F)
NT AUTHORITY\СИСТЕМА:(I)(OI)(CI)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
Напротив каждой группы и пользователя указан уровень доступа. Права доступа указываются с помощью сокращений. Рассмотрим разрешения для группы BUILTIN\Администраторы.
(OI) — Object inherit – права наследуются на нижестоящие объекты
(CI) — Container inherit – наследование каталога
(F) – Full control– полный доступ к папке
(I) — Inherit права наследованы с вышестоящего каталога
Это означает, что у данной группы есть права на запись, изменение данных в данном каталоге и на изменения NTFS разрешений. Данные права наследуются на все дочерние объекты в этом каталоге.
Ниже представлен полный список разрешений, которые можно устанавливать с помощью утилиты icacls.
Права наследования:
(OI) — object inherit
(CI) — container inherit
(IO) — inherit only
(NP) — don’t propagate inherit
(I) — Permission inherited from parent container
Список основных прав доступа:
D — право удаления
F — полный доступ
N — нет доступа
M — доступ на изменение
RX — доступ на чтение и запуск
R — доступ только на чтение
W — доступ только на запись
Детальные разрешения:
DE — Delete
RC — read control
WDAC — write DAC
WO — write owner
S — synchronize
AS — access system security
MA — maximum allowed
GR — generic read
GW — generic write
GE — generic execute
GA — generic all
RD — read data/list directory
WD — write data/add file
AD — append data/add subdirectory
REA — read extended attributes
WEA — write extended attributes
X — execute/traverse
DC — delete child
RA — read attributes
WA — write attributes
С помощью утилиты icacls вы можете сохранить текущие списки доступа к объекту в файл, а затем применить сохраненный список к этому же или другим объектам (своеобразный способ создания резервной копии текущего списка доступа — ACL).
Чтобы выгрузить текущие ACL папки C:\PS и сохранить их в текстовый файл export_ps_acl.txt, выполните команду:
icacls C:\PS\* /save c:\backup\export_ps_acl.txt /t
Данная команда сохраняет ACLs не только на сам каталог, но и на все вложенные папки и файлы. Полученный текстовый файл можно открыть с помощью блокнота или любого текстового редактора.
Чтобы применить сохраненные списки доступа (восстановить разрешения на каталог и все вложенные объекты), выполните команду:
icacls C:\PS /restore :\backup\export_ps_acl.txt
Таким образом процесс переноса прав доступа с одной папки на другую становится намного легче.
С помощью команды icacls вы можете изменить списки доступа к папке. Например, вы хотите предоставить пользователю aivanov право на редактирование содержимого папки. Выполните команду:
icacls C:\PS /grant aivanov:M
Удалить все назначенные разрешения для учетной записи пользователя aivanov можно с помощью команды:
icacls C:\PS /remove aivanov
Вы можете запретить пользователю или группе пользователей доступ к файлу или папке так:
icacls c:\ps /deny «MSKManagers:(CI)(M)»
Имейте в виду, что запрещающие правил имеют больший приоритете, чем разрешающие.
С помощью команды icacls вы можете изменить владельца каталог или папки, например:
icacls c:\ps\secret.docx /setowner aivanov /T /C /L /Q
Теперь разберемся, что это за параметры используются в каждой команде.
- /Q – сообщение об успешном выполнении команды не выводится;
- /L – команда выполняется непосредственно над символической ссылкой, а не конкретным объектом;
- /C – выполнение команды будет продолжаться несмотря на файловые ошибки; при этом сообщения об ошибках все равно будут отображаться;
- /T – команда используется для всех файлов и каталогов, которые расположены в указанном каталоге;
Вы можете изменить владельца всех файлов в каталоге:
icacls c:\ps\* /setowner aivanov /T /C /L /Q
Также при помощи icacls можно сбросить текущие разрешения на объекты,
icacls C:\ps /T /Q /C /RESET
После выполнения команды все текущие разрешения на папку будут сброшены и заменены на разрешения, наследуемые с вышестоящего объекта (каталога).