Что делать, если для файла требуется установить различные права доступа для различных пользователей. Например, у нас есть файл 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:права_доступа файл — изменение маски