Powershell. Назначение ACL

Давайте разберемся в том, как назначать ACL, то есть права доступа к файловым ресурсам, средствами Powershell

Немного теории

В ходе статьи будут использоваться такие понятия как ACL и ACE, поэтому для начала давайте разберемся что они из себя представляют и чем отличаются друг от друга.

ACL(Access Control List) — представляет собой таблицу, которая определяет права доступа к объектам файловой системы. Включает в себя записи ACE.

ACE(Access Control Entries) — представляет собой запись, входящую в таблицу ACL, которая сопоставляет пользователя и его права доступа к объекту, включая параметры наследования доступа.

Разница между ними в том, что в то время как ACE определяет только параметры доступа к объекту, ACL представляет из себя более емкую сущность, и хранит у себя в таблице, помимо самих ACE, записи о владельце файла, настройках аудита и других параметрах.

Назначение прав

Подробней про ACE

Посмотрим на примере записи ACE имеющийся по умолчанию у всех объектов ФС

Какими бывают параметры ACE и принимаемые ими значения:

FileSystemRights — Уровень доступа
Принимает большое количество параметров. Можете ознакомиться тут.
Чаще всего встречаются «FullControl» либо «ReadAndExecute, Synchronize»

AccessControlType — Назначаемый тип доступа:

  • Принимает значения Allow либо Deny

IdentityReference — определяет для какого пользователя или группы применяется ACE.

IsInherited — Указывает на то, была ли получена данная ACE запись от родительского объекта.
Соответствует графе в GUI «Унаследовано от\Inherited from»

  • Принимает значения True либо False
В скобках укажу краткое название параметров. Их вы можете встретить как при работе с ACL в PoSH, так и при работе к icacls в CMD

PropagationFlags — Имеется только у папок. Доступны следующие значения:

  • InheritOnly (IO) — указывает что ACE распространяется только на дочерние объекты(исключая текущую папку), к которым могут относится как файлы так и папки.
    В GUI соответствует всем пунктам выпадающего меню которые не включают текущую папку( для параметра «Применяется к:»)
  • NoPropagateInherit (NP) — обозначает что наследование не распространяется на дочерние объекты. В документации заявлено что данный флаг «Указывает, что ACE не распространяется на дочерние объекты»
    На самом деле полное отключение наследования дает только использование области применения «Только эта папка».
    А флаг NoPropagateInherit в свою очередь ограничивает глубину наследования только одним уровнем — то есть наследование ACE распространяется только на дочерние объекты, исключая более низкие уровни(grandchild objects)
    Соответствует чекбоксу GUI «Применять эти разрешения к объектам и контейнерам только внутри этого контейнера«
  • Недоступен в GUI, если значение параметра InheritOnly установлен как This folder only\Только для этой папки

InheritanceFlags — Так же имеется только у папок.
Определяет  для каких типов объектов будут наследоваться разрешения от текущего объекта к дочерним.
Соответствует значению GUI «Применяется к\Applies to»

Принимает значения:

  • ContainerInherit (CI) — наследование только для папок
  • ObjectInherit (OI) — наследование только для файлов

Так же приведу таблицу с комбинациями всех флагов

Не перевожу название областей применения наследования, потому что не знаю как адекватно перевести Grandchild Object.
Но по смыслу понятно что это любые объекты с глубиной наследования больше чем 1 уровень
В итоге

Вот и все!
На первый взгляд немного заумно, но в реальности ничего сложного:

  • получили исходные ACL
  • указали ACE которые нужно заменить
  • назначили обновленный ACL на исходный объект

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *