Что делать, если для файла требуется установить различные права доступа для различных пользователей. Например, файл 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/
Проверим что получилось:
Добавились новые поля default. Именно они определяют права по умолчанию для всех вложенных файлов. Чтобы убедиться в этом проверим ACL файлов Homework/:
Но ведь ничего не изменилось!
Все верно, права по умолчанию применяются только к вновь созданным и скопированным файлам. Создадим файл 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:права_доступа файл - изменение маски