Linux user access control

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, про установку дополнительных пакетов в систему поговорим позже, просто выполните:

Читайте также:  Linux mint mate загрузочную флешку

Чтобы посмотреть 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 этого каталога.

Читайте также:  Аналоги vnc для linux

Маска 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 каталог

Источник

Быть или не быть ACL в администрировании Linux

Любой системный администратор сталкивался или столкнется с ситуацией, когда стандартных возможностей распределения прав в Linux недостаточно для выполнения задачи. Но не всегда лучшим решением станет подключение ACL.

Эта статья поможет определиться действительно ли проекту требуется гибкость на уровне пакета ACL и какие проблемы могут возникнуть при его использовании.

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

Что такое ACL

Стандартный режим контроля прав Linux закрывает большинство потребностей администрирования доступа к файловой системе. Разрешение на чтение, изменение или выполнение файла/директории определяется для трех категорий пользователей: владельца файла, его группы и всех остальных.

ACL (Access control lists) — более сложный, но гибкий инструмент управления правами доступа. Он позволяет сегментировать категорию «other» и разрешить работу с файлом/директорией нескольким конкретным пользователям и группам. Подключение ACL не ограничивается корневым каталогом и даже не рекомендуется. В зависимости от целей администрирования прав опцию можно применить для отдельной файловой системы или данных серверов SMB и NFS.

ACL передается не в командной строке, а в inode файле, который содержит правила предоставления доступа к конкретному файлу или директории.

ACL: что может пойти не так

Главный проблема ACL состоит в снижении производительности файловой системы.

  • ACL может некорректно взаимодействовать с программами, не поддерживающими их. Распространенный пример — утилита tar, которая не архивирует списки доступов. На практике же конфликты могут возникнуть не только с программами архивирования и резервного копирования, но иногда даже с текстовыми редакторами. Например, если изменение данных по правилам редактора сохраняется в новый файл, а не исходный, то ACL файла могут быть потеряны.
  • ACL становятся сложно управляемыми по мере увеличения количества записей. Приведение их в порядок рискованно и требует времени. Некоторые специалисты предпочитают ввести новое правило доступа, чтобы быстро исправить ситуацию, тем самым замедляя работу файловой системы.
Читайте также:  Steam on linux opensuse

Как подключить ACL

В системах Fedora и Red Hat Enterprise Linux ACL включается автоматически в файловую систему во время ее создания. В остальных случаях следует добавить параметр списков контроля доступов, монтируя файловую систему, одним из следующих способов:

Чтобы убедиться, что параметр acl был добавлен в файловую систему, используется команда:

#tune2fs -l /dev/xyzz | grep "Default mount options:" Default mount options: user_xattr acl

где /dev/xyzz дисковой раздел необходимой файловой системы.

Два типа ACL на Linux

POSIX ACL поддерживается почти всеми файловыми системами Linux, включая ZFS. Утилита расширяет стандартную модель предоставления прав, хотя управляет теми же тремя типами разрешений: Read, Write, eXecute (rwx). Но доступ к файлам и директориям может быть открыт для любой комбинации пользователей и групп. Кроме того, Posix ACL обладает функцией наследования прав для директорий, которая значительно упрощает решение ряда корпоративных задач.

NFSv4 ACL разработаны как часть сетевой файловой системы NFSv4 с целью обеспечить разумную совместимость между Linux и Windows. NFSv4 ACL чаще используется для данных серверов. Утилита по своей структуре приближена к ACL Windows и более детализирована в категориях прав доступа, чем Posix ACL. NFSv4 ACL может содержать отрицательные права (отказ в доступе), имеет больше типов разрешений и менее строгую структуру наследования прав.

Утилиты Getfacl и Setfacl в POSIX ACL

Рассмотрим, как работает ACL. В системе существует группа Sales и Accounting, в которые входят все сотрудники отдела продаж и финансового отдела соответственно. Пользователи обеих групп и только они должны иметь доступ к выставленным счетам, которые хранятся в директории Invoices. Тогда ACL директории Invoices должна выглядеть следующим образом:

# file: invoices # owner: accountant # group: accounting user::rwx group::rwx group:sales:rwx mask::rwx other::---

Чтобы вывести список ACL представленный выше, используется команда getfacl : $ getfacl invoices. А утилита Setfacl меняет настройки доступа для файла или папки. Например, если к папке Invoices должны получить полный доступ руководители компании (пользователь ceo) и отдела маркетинга (пользователь manager), то его следует открыть одновременно перечислив новые вводные через запятую:

$ setfacl -m u::ceo:rwx,u:manager:rwx invoices

Опция -m помогает внести изменения прав доступа для категорий: u (конкретного пользователя), g (группы пользователей), m (групповой маски) и o (всех остальных пользователей) для файла или директории. Помимо самой распространенной команды -m, к утилите getfacl можно добавить следующие опций:

удалить указанные параметры ACL

Источник

Оцените статью
Adblock
detector