Команда iCACLS – управление доступом к файлам и папкам.



Команда 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.











    Весь список команд CMD Windows