Команда iCACLS позволяет отображать или изменять списки управления доступом (Access Control Lists (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 уровня целостности ко всем соответствующим файлам. Уровень задается одним из следующих значений:
L[ow]: низкий
M[edium]: средний
H[igh]: высокий
Уровню могут предшествовать параметры наследования для 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 – уровень системы (Обязательный уровень системы).
/inheritance:e|d|r
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:
acpimof.dll
D:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;0x1200a9;;;BU)
addins
D:PAI(A;;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;CIIO;GA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;;0x1301bf;;;SY)(A;OICIIO;GA;;;SY)(A;;0x1301bf;;;BA)(A;OICIIO;GA;;;BA)(A;;0x1200a9;;;BU)(A;OICIIO;GXGR;;;BU)(A;OICIIO;GA;;;CO)
AppCompat
D:AI(A;ID;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;CIIOID;GA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)(A;OICIIOID;GA;;;CO)
. . .
В тех случаях, когда при выполнении команды 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 C:\Users\user1\tmp\Myfile.doc /grant boss:(D,WDAC) - предоставление пользователю boss разрешений на удаление и запись DAC для файла C:\Users\user1\tmp\Myfile.doc.
icacls C:\Users\user1\tmp\Myfile.doc /grant *S-1-1-0:(D,WDAC) - предоставление пользователю с ИД безопасности S-1-1-0 (группа ”Все”) разрешений на удаление и запись DAC для файла C:\Users\user1\tmp\Myfile.doc . icacls C:\Users\user1\tmp\Myfile.doc /grant boss:F - предоставление пользователю boss полного доступа к файлу C:\Users\user1\tmp\Myfile.doc.