- Системное администрирование Linux
- Новый ресурс
- Просмотр прав доступа
- Управление доступом
- Права по умолчанию
- Рекурсивная установка прав
- Удаление прав
- Очистка правил
- Эффективная маска
- Sysadminium
- О системе прав ACL в Linux
- Подготовка системы к практике
- Работа с ACL в Linux
- Наследование ACL
- Маска ACL
- Рекурсивное назначение прав
Системное администрирование Linux
Для создания прав доступа к файлам Samba ресурса сервера используйте ACL (Access Control List — список контроля доступа). При помощи ACL вы можете установить доступ к файлам определенным группам, либо конечным пользователям.
Новый ресурс
Для примера допустим у вас в системе есть две группы admins и managers, а также два пользователя alexei и petr.
Создадим директорию Managers для доступа на чтение и запись пользователям, входящим в группу managers.
setfacl -m d:g:managers:rwx,g:managers:rwx Managers
Первая команда создаст директорию с правами чтения выполнения и изменения содержимого для пользователя root.
Второй командой мы установим те же права для пользователей группы managers.
Файлы и директории, создаваемые пользователями этой группы, либо root-ом, будут наследовать атрибуты доступа.
Просмотр прав доступа
Увидеть права доступа из консоли можно выполнив команду:
Программа выведет следующий текст:
# owner: root # group: root user::rwx group::--- group:managers:rwx mask::rwx other::--- default:user::rwx default:group::--- default:group:managers:rwx default:mask::rwx default:other::---
Управление доступом
Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.
Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.
Добавить право на чтение/запись файла secretinfo пользователям alexei и petr:
setfacl -m user:alexei:rw,u:petr:rw secretinfo
Права по умолчанию
Для директорий можно указать ACL права, которые будут автоматически добавляться для файлов и директорий, создаваемых в ней.
Для этого используется идентификатор default или параметр -d. На саму директорию права указанные в default не распространяются.
Для файлов и директорий, создаваемых в директории managerdata, добавить право чтение/записи для пользователя petr.
setfacl -m default:user:iivanov:rw managerdata
Рекурсивная установка прав
Для установки прав для всех файлов и директорий внутри директории используется параметр -R.
Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X.
Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение.
Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.
Разрешить пользователю alexei читать все файлы и просматривать директории в folder.
setfacl -R -m d:u:alexei:rwx,u:apetrov:rwX folder
setfacl -R -m d:u:alexei:rw,u:apetrov:rwX folder
Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий.
Разница в том, что в первом случае пользователь alexei получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях,
а во втором случае пользователь не сможет просматривать новые директории.
Удаление прав
Удалить права доступа к файлу secretfile для пользователя petr.
setfacl -x u:petr secretfile
Удалить права доступа ко всем файлам и директориям внутри folder для пользователя alexei.
setfacl -R -x u:alexei folder
Очистка правил
Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.
Удалить все ACL правила и разрешить пользователю petr читать secretfile.
setfacl -b -m u:petr:r secretfile
Эффективная маска
Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.
Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.
Порядок определения доступа к файлу
Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.
- Используются права владельца, если пользователь им является.
- Используются права, указанные конкретно для этого пользователя.
- Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
- Если пользователь не входит ни в одну группу описанную в ACL, то используются права для other.
Sysadminium
В этой статье разберём расширенные права доступа к файлам в Linux, которые называются Access Control List / списки контроля доступа (ACL).
О системе прав ACL в Linux
В этой статье мы познакомились со стандартной системой прав в Linux. Но может возникнуть ситуация, что к файлу с правами: rw-r—r— user1 user1 , нужно дать доступ пользователю admin с правами rw- , и пользователю user2 c правами r— .
Стандартная система прав здесь не поможет. Для решения подобной задачи применяют ACL (Access Control List / списки контроля доступа).
- права доступа к файлу — определяет доступ к файлу или каталогу;
- ACL default — назначается только каталогу, при этом создаваемые файлы в этом каталоге будут наследовать такие права.
Подготовка системы к практике
Давайте для начала создадим трёх новых пользователей в системе. Так как это административное действие то в Ubuntu я использую sudo, а в Debian переключусь на пользователя root:
alex@ubu:~$ sudo useradd -m -s /bin/bash admin alex@ubu:~$ sudo useradd -m -s /bin/bash user1 alex@ubu:~$ sudo useradd -m -s /bin/bash user2 alex@deb:~$ su - Пароль: root@deb:~# useradd -m -s /bin/bash admin root@deb:~# useradd -m -s /bin/bash user1 root@deb:~# useradd -m -s /bin/bash user2
Про создание пользователей я писал в этой статье.
Установим пользователям пароли:
alex@ubu:~$ sudo passwd admin New password: Retype new password: passwd: password updated successfully alex@ubu:~$ sudo passwd user1 New password: Retype new password: passwd: password updated successfully alex@ubu:~$ sudo passwd user2 New password: Retype new password: passwd: password updated successfully root@deb:~# passwd admin Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён root@deb:~# passwd user1 Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён root@deb:~# passwd user2 Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён
Дальше все примеры для Ubuntu я показывать не буду, там всё аналогично. Единственное не забывайте при административных действиях использовать sudo перед командами.
Под пользователем user1 создадим каталог test и в нем файл file1.txt:
root@deb:~# su - user1 user1@deb:~$ mkdir test user1@deb:~$ touch test/file1.txt user1@deb:~$ exit выход root@deb:~#
На этом подготовка системы закончена, мы сделали трёх пользователей: admin, user1 и user2. И в домашнем каталоге пользователя user1 создали каталог test в котором создали файл file1.txt.
Работа с ACL в Linux
Для начала установим систему acl, про установку дополнительных пакетов в систему поговорим позже, просто выполните:
Чтобы посмотреть acl права на файл или каталог используют команду getfacl (её может выполнить любой пользователь без административных прав):
root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- group::r-- other::r--
Для данного файла acl пока не настроен. Поэтому мы видим стандартные права, где владелец имеет права на чтение и запись, а группа и все остальные только на чтение.
Для установки acl прав используем команду setfacl (выполнять эту команду может только root пользователь, или пользователь с sudo правами):
- опция -m используется когда нужно модифицировать права;
- дальше, если мы устанавливаем права для пользователя, то ставим символ u, для группы будем использовать символ g;
- затем, после двоеточия, имя пользователя;
- дальше, после двоеточия, права доступа для этого пользователя;
- и наконец указываем имя файла.
Вот примерное использование setfacl:
# setfacl -m u:пользователь:права_доступа файл # setfacl -m g:группа:права_доступа файл
Вот как решается описанная в самом начале задача, используя acl:
root@deb:~# setfacl -m u:admin:rw-,u:user2:r-- /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- user:admin:rw- user:user2:r-- group::r-- mask::rw- other::r--
При этом если мы посмотрим командой ls -l права, то заметим знак «+«, который и указывает что файл имеет дополнительные acl права:
root@deb:~# ls -l /home/user1/test/file1.txt -rw-rw-r--+ 1 user1 user1 0 янв 20 14:38 /home/user1/test/file1.txt
Для группы владельцев и всех остальных также можно устанавливать acl права таким образом:
setfacl -m g:groupname:rwx setfacl -m o:rwx
Для того чтобы удалить пользователя или группу из acl нужно использовать команду setfacl с опцией -x, например вот так:
root@deb:~# setfacl -x u:user2 /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- user:admin:rw- group::r-- mask::rw- other::r--
Как видим у пользователя user2 не осталось acl прав к этому файлу. Таким же образом можем удалить группу:
Для того чтобы удалить все acl права с файла используем команду setfacl с опцией -b:
root@deb:~# setfacl -b /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- group::r-- other::r--
Наследование ACL
Теперь разберемся с acl default. Устанавливаются такие права только на каталог. Для установки таких прав используется команда setfacl с опцией -d:
root@deb:~# setfacl -d -m u::rwx,g::rw-,o::r,u:admin:rw /home/user1/test/ root@deb:~# getfacl /home/user1/test/ getfacl: Removing leading '/' from absolute path names # file: home/user1/test/ # owner: user1 # group: user1 user::rwx group::r-x other::r-x default:user::rwx default:user:admin:rw- default:group::rw- default:mask::rw- default:other::r--
Добавились новые поля default, которые определяют права по умолчанию для всех новых файлов в этом каталоге.
Теперь, для проверки, создадим новый файл и посмотрим на его права:
root@deb:~# touch /home/user1/test/file2.txt root@deb:~# getfacl /home/user1/test/file2.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file2.txt # owner: root # group: root user::rw- user:admin:rw- group::rw- mask::rw- other::r--
Выше я создал файл из под пользователя root, но пользователь admin получил к нему доступ, так как он указан в правах default этого каталога.
Маска ACL
Кроме прав доступа и прав по умолчанию в acl присутствуем маска. Маска говорит о максимально возможных назначенных правах для пользователей. Она вычисляется автоматически при добавлении пользователя. Т.е. мы можем одному пользователю дать права rw- , второму r— , маска при этом станет rw- .
Маску можно изменить командой setfacl -m m:права_доступа файл например:
root@deb:~# touch /home/user1/test/file2.txt root@deb:~# setfacl -m m:r /home/user1/test/file2.txt root@deb:~# getfacl /home/user1/test/file2.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file2.txt # owner: root # group: root user::rw- user:admin:rw- #effective:r-- group::rw- #effective:r-- mask::r-- other::r--
По значению effective:r— мы видим что права изменились.
Использовать это можно, если мы дали различные права на файл разным пользователям, а затем всех решили ограничить.
Рекурсивное назначение прав
Для установки рекурсивно прав на все файлы в каталоге и подкаталогах используется опция -R, её же можно использовать при удалении прав:
setfacl -R -m u:пользователь:права_доступа каталог setfacl -R -b каталог