Курс по сетевым технологиям
A A A

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

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

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

Пользователь удален из ACL

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

Пользователь удален из ACL

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

Признак 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 установлен

ACL установлен

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

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

ACL установились для нового файла

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

 

 

Комментарии для сайта Cackle