5. Настройка прав доступа ACL

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

Стандартные команды работы с ACL - setfacl и getfacl - подробно описаны в руководстве, поэтому здесь мы ограничимся примерами.

После настройки Samba сервера, создаётся путь для общей точки монтирования /var/calculate/server-data/samba/share.

Внимание. Убедитесь, что файловая система диска, содержащего указанную директорию, поддерживает ACL. Не забудьте в опции монтирования файловой системы указать параметр "acl" (для xfs не требуется).

Новый ресурс

Для примера допустим у вас в системе есть две группы manager и logist, а также два пользователя iivanov и apetrov.

Создадим директорию Менеджер для доступа на чтение и запись пользователям, входящим в группу manager.

mkdir -m 700 Менеджер
setfacl -m d:g:manager:rwx,g:manager:rwx Менеджер

Первая команда создаст директорию с правами чтения выполнения и изменения содержимого для пользователя root. Второй командой мы установим те же права для пользователей группы manager.

Файлы и директории, создаваемые пользователями этой группы, либо root-ом, будут наследовать атрибуты доступа.

Просмотр прав доступа

Права на доступ к директории, вы можете посмотреть из консоли, либо через файловый менеджер dolphin, с Calculate Linux Desktop (KDE версия).

Увидеть права доступа из консоли можно выполнив команду:

getfacl Менеджер

Программа выведет следующий текст:

# file: \320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200/
# owner: root
# group: root
user::rwx
group::---
group:manager:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:manager:rwx
default:mask::rwx
default:other::---

Для просмотра прав из dolphin, нажмите на файле или директории правой кнопкой мыши, выберите вкладку Права, далее нажмите на кнопку Дополнительные права. Растяните открывшееся окно, чтобы увидеть все атрибуты.

Управление доступом

Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.

-m user:[пользователь]:права[,user:пользователь:права]
-m group:[группа]:права[,group:группа:права]

Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.

Пример

Добавить право на чтение/запись файла secretinfo пользователям iivanov и apetrov:

setfacl -m user:iivanov:rw,u:apetrov:rw secretinfo

Добавить право на чтение/выполнение файла runit группе <<manager>:

setfacl -m group:manager:rx runit

Права можно комбинировать в одной строке.

Пример

Добавить для файла qwerty право чтения для пользователя iivanov, право чтение/запись для apetrov, чтение выполнение для группы logist, запретить группе workers выполнять какие либо действия.

setfacl --modify u:iivanov:r,u:apetrov:rw,g:workers:-,g:logist:rx qwerty

Права по умолчанию

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

Пример

Для файлов и директорий, создаваемых в директории managerdata, добавить право чтение/записи для пользователя iivanov.

setfacl -m default:user:iivanov:rw managerdata

Рекурсивная установка прав

Для установки прав для всех файлов и директорий внутри директории используется параметр -R. Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X. Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение. Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.

Пример

Разрешить пользователю apetrov читать все файлы и просматривать директории в folder.

setfacl -R -m d:u:apetrov:rwx,u:apetrov:rwX folder

или

setfacl -R -m d:u:apetrov:rw,u:apetrov:rwX folder

Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий. Разница в том, что в первом случае пользователь apetrov получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях, а во втором случае пользователь не сможет просматривать новые директории.

Удаление прав

Для удаления правила для пользователя или группы используется параметр -x.

Пример

Удалить права доступа к файлу secretfile для пользователя iivanov.

setfacl -x u:iivanov secretfile

Удалить права доступа ко всем файлам и директориям внутри folder для пользователя apetrov.

setfacl -R -x u:apetrov folder

Очистка правил

Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.

Пример

Удалить все ACL правила и разрешить пользователю iivanov читать secretfile.

setfacl -b -m u:iivanov:r secretfile

Копирование ACL

Для того, чтобы установить ACL на файл аналогичный какому-либо другому файлу используется команда:

getfacl basefile | setfacl -b -M - targetfile

В этом случае файл targetfile будет иметь такие же права как и basefile. Это достигается за счет параметра M, при помощи которого можно задавать права из файла (или стандартного потока ввода ).

Эффективная маска

Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.

Пример

setfacl -m m::rx filename

Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.

Порядок определения доступа к файлу.

Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.

  1. Используются права владельца, если пользователь им является.
  2. Используются права, указанные конкретно для этого пользователя.
  3. Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
  4. Если пользователь не входит ни в одну группу описанную в ACL, то используются права для other.
Спасибо!