Что делать, если для файла требуется установить различные права доступа для различных пользователей. Например, у нас есть файл Report.pdf.

Допустим пользователю admin необходимо предоставить доступ rw-, а пользователю technician — только r—.

Что делать в этом случае?

Понятное дело, что стандартные механизмы распределения прав доступа здесь не помогут — они не настолько гибкие. И тут на помощь приходит технология списков доступа (Access List Control, ACL — списки контроля доступа). Во многих современных дистрибутивах она уже установлена и активна.

ACL бывает 2-х типов: 

  • ACL прав доступа — определяет доступ к файлу или каталогу на основе установленных прав
  • ACL по умолчанию — назначается только каталогу. Если в данном каталоге файлы не имеют собственный ACL, то они они наследуют ACL родительского каталога.

Вернемся к нашему файлу Report.pdf и проверим расширенные права доступа. Для проверки ACL выполним следующую команду — getfacl Report.pdf.

После выполнения команды, можно заметить, что ACL пока не настроен для данного файла. Настроем его исходя из вышеуказанных требований. Для установки расширенных прав используется следующая команда:

setfacl -m u:пользователь:права_доступа  файл

-m (—modify=acl) используется, когда необходимо модифицировать ACL.

u (user) означает пользователя.

Теперь установим права доступа setfacl -m u:admin:rw-,u:technician:r— Report.pdf. Новые права доступа должны установится.

Можно ли установить расширенные права для группы и остальных пользователей?

Да, можно. Для этого используются следующие ключи:

  • g (group) — группа
  • o (other) — остальные

setfacl -m g:Class:r Report.pdf  — добавление группы с правами чтения

setfacl -m o:r Report.pdf — установка прав чтения для всех остальных

Права для группы можно устанавливать и обычным способом с помощью команды chmod.

А как узнать, что у файла установлены расширенные права доступа?

В выводе команды ls -l мы увидим знак “+” в конце списка прав доступа.

А как удалить пользователя или группу из ACL?

Для этого воспользуемся опцией -x (—remove=acl). Например, удалим пользователя technician — setfacl -x u:technician Report.pdf

А если необходимо удалить полностью весь ACL с данного файла, то воспользуемся опцией -b (—remove-all) — setfacl -b Report.pdf

После удаления ACL исчезает и символ “+”.

Мы рассмотрели ACL прав доступа. Теперь рассмотрим ACL  по умолчанию. При создании списков доступа по умолчанию добавляется опция -d (—default), кроме того необходимо также указать и стандартные права доступа. Для примера создадим

каталог Homework/ и добавим файл fileBeforeACL и каталог folderBeforeACL. Затем назначим каталогу Homework/ ACL по умолчанию. Каталог Homework/ имеет стандартные права доступа.

Теперь добавим пользователя teacher с правами r-x и назначим каталогу ACL по умолчанию — setfacl -d -m u::rwx,g::r—,o::r—,u:andrey:r-x,u:admin:r-x,u:teacher:r-x Homework/

Что получилось: ACL по умолчанию установлен

Добавились новые поля default. Именно они определяют права по умолчанию для всех вложенных файлов. Чтобы убедиться в этом проверим ACL файлов Homework/ и увидим, что ACL установлен.

Но ведь ничего не изменилось! 

Все верно, права по умолчанию применяются только к вновь созданным  и скопированным файлам. Создадим файл fileAfterACLи каталог folderAfterACL и посмотрим на их права.

Мы увидим, что теперь ACL по умолчанию работает так, как надо.

А для чего используется маска во всех ACL?

Маска говорит о максимально назначенных правах для пользователей. Она вычисляется автоматически при добавлении пользователя.

Например, ACL имеет 2-х пользователей:

student::r—

teacher::rwx

Маска будет равна rwx.

Значит у пользователя student тоже будут права rwx?

Нет, у него будут права r— и не более. Однако, если мы вручную изменим маску на r—, то у пользователя teacher понизятся права до r—, хотя по факту установлены rwx.

То есть маска — это своего рода механизм регулирования прав всех пользователей?

Совершенно верно.

А как можно вручную изменить маску?

Командой setfacl -m m:права_доступа файл

 

Список используемых команд:

getfacl файл — проверка ACL

setfacl -m u:пользователь:права_доступа  файл — установка прав доступа для определенного пользователя (владельца)

setfacl -m g:группа:права_доступа файл — установка прав доступа для группы владельцев

setfacl -x u:пользователь файл — исключение пользователя из ACL

setfacl -x g:группа файл — исключение группы из ACL

setfacl -b файл — удаление ACL

setfacl -m m:права_доступа файл — изменение маски