Урок 18. Управление правами доступа. Access List Control. Часть 2

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

Например, файл Report.pdf имеет следующие права доступа: Отображение прав доступа файла Report.pdf

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

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

Понятное дело, что стандартные механизмы распределения прав доступа здесь не помогут - они не настолько гибкие.

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

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

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

 Вернемся к нашему файлу Report.pdf и проверим расширенные права доступа. Для проверки ACL выполним следующую команду: getfacl Report.pdf Отображение ACL для файла 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/ имеет следующие стандартные права доступа:

Отображение прав доступа для каталога 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/ 

Проверим что получилось:

Каталогу Homework назначены новые расширенные права доступа

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

Отображение прав доступа каталогов внутри Homework

Отображение прав доступа файла внутри 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:права_доступа файл - изменение маски