Любой системный администратор сталкивался или столкнется с ситуацией, когда стандартных возможностей распределения прав в Linux недостаточно для выполнения задачи. Но не всегда лучшим решением станет подключение ACL.
Эта статья поможет определиться действительно ли проекту требуется гибкость на уровне пакета ACL и какие проблемы могут возникнуть при его использовании.
Итак, знакомьтесь ближе с теоретической и практической составляющими утилиты.
Стандартный режим контроля прав Linux закрывает большинство потребностей администрирования доступа к файловой системе. Разрешение на чтение, изменение или выполнение файла/директории определяется для трех категорий пользователей: владельца файла, его группы и всех остальных.
ACL (Access control lists) — более сложный, но гибкий инструмент управления правами доступа. Он позволяет сегментировать категорию «other» и разрешить работу с файлом/директорией нескольким конкретным пользователям и группам. Подключение ACL не ограничивается корневым каталогом и даже не рекомендуется. В зависимости от целей администрирования прав опцию можно применить для отдельной файловой системы или данных серверов SMB и NFS.
ACL передается не в командной строке, а в inode файле, который содержит правила предоставления доступа к конкретному файлу или директории.
Главный проблема ACL состоит в снижении производительности файловой системы.
Но она не единственная:
ACL может некорректно взаимодействовать с программами, не поддерживающими их. Распространенный пример — утилита tar, которая не архивирует списки доступов. На практике же конфликты могут возникнуть не только с программами архивирования и резервного копирования, но иногда даже с текстовыми редакторами. Например, если изменение данных по правилам редактора сохраняется в новый файл, а не исходный, то ACL файла могут быть потеряны.
ACL становятся сложно управляемыми по мере увеличения количества записей. Приведение их в порядок рискованно и требует времени. Некоторые специалисты предпочитают ввести новое правило доступа, чтобы быстро исправить ситуацию, тем самым замедляя работу файловой системы.
В системах Fedora и Red Hat Enterprise Linux ACL включается автоматически в файловую систему во время ее создания. В остальных случаях следует добавить параметр списков контроля доступов, монтируя файловую систему, одним из следующих способов:
добавить acl в файл /etc/fstab;
добавить acl в команду mount.
Чтобы убедиться, что параметр acl был добавлен в файловую систему, используется команда:
#tune2fs -l /dev/xyzz | grep "Default mount options:"
Default mount options: user_xattr acl
где /dev/xyzz дисковой раздел необходимой файловой системы.
POSIX ACL поддерживается почти всеми файловыми системами Linux, включая ZFS. Утилита расширяет стандартную модель предоставления прав, хотя управляет теми же тремя типами разрешений: Read, Write, eXecute (rwx). Но доступ к файлам и директориям может быть открыт для любой комбинации пользователей и групп. Кроме того, Posix ACL обладает функцией наследования прав для директорий, которая значительно упрощает решение ряда корпоративных задач.
NFSv4 ACL разработаны как часть сетевой файловой системы NFSv4 с целью обеспечить разумную совместимость между Linux и Windows. NFSv4 ACL чаще используется для данных серверов. Утилита по своей структуре приближена к ACL Windows и более детализирована в категориях прав доступа, чем Posix ACL. NFSv4 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 можно добавить следующие опций:
-b |
удалить все записи ACL |
-x |
удалить указанные параметры ACL |
--set и –set file |
заменить действующие права ACL на новые, указанные в файле |
-n |
не изменять действующую маску ACL |
-mask |
пересчитать маску ACL |
-k |
удалить записи ACL по умолчанию (для директорий) |
-d |
внести записи ACL по умолчанию (для директорий) |
-r |
рекурсивно применить записи ACL ко всем файлам и директориям |
-restore=file |
восстановить ACL из файла с резервной копией* |
*Такой файл можно создать вручную или командой getfacl-r ACL>ACL_new. ACL – это файл/директория, настройки которого нужно сохранить, а ACL_new – название файла с резервной копией
Если с первыми тремя опциями все прозрачно, то последующие относятся к категориям, которые следует рассмотреть подробнее.
В сложных структурах списков контроля доступа к файловой системе маска выполняет функцию фильтра и определяет максимальные границы разрешения доступа для пользователей и групп. Она переписывается автоматически при внесении изменений в ACL, или может быть установлена вручную.
Допустим, что в файлы счетов нельзя вносить изменения никому, кроме владельца. Вместо того, чтобы менять настройки доступа для каждого пользователя и группы, можно ограничить их параметрами маски.
$ setfacl -m m:rx invoices
$ getfacl invoices
# file: invoices
# owner: accountant
# group: accounting
user::rwx
user:ceo:rwx #effective:r-x
user:manager:rwx #effective:r-x
group::rwx #effective:r-x
group:sales:rwx #effective:r-x
mask::r-x
other::---
Настройки доступа ACL могут распространяться вниз по нескольким уровням иерархии директории с помощью опции -d. Тогда все новые файлы и папки, созданные в директории с ACL будут перенимать те же правила доступа.
$ setfacl -d -m u::rwx, g::rwx, o::-, u:ceo:rwx, u:manager:rwx, group:sales:rwx invoices
$ getfacl invoices
# file: invoices
# owner: accountant
# group: accounting
user::rwx
user:ceo:rwx
user:manager:rwx
group::rwx
group:sales:rwx
mask::rwx
other::---
default: user::rwx
default: user:ceo:rwx
default: user:manager:rwx
default: group::rwx
default: group:sales:rwx
default: mask::rwx
default: other::---
Если в категориях прав доступа не требуются изменения, а только их настройка по умолчанию, то существует и более простая команда. Копирование ACL директории в ACL по умолчанию для той же директории:
$ getfacl --access invoices | setfacl -d -m- invoices
Отметим, что гибкость и дополнительные возможности ACL помогают выстроить интеллектуальную модель контроля прав доступа к файловой системе, если умело с ними работать и не забывать «о подводных камнях».
Курс «Aдминистрирование Linux Mega» системного инженера Платона Платонова поможет разобраться не только во всех «фишках» контроля прав, но повысить владение Linux до уровня «бог» за 5 недель. Это самая хардовая и самая «прикладная» программа в духе Слерм + Southbridge: 12 часов теории, 48 часов практики на стендах, 9 масштабных тем и несчитанное количество реальных кейсов.
Документ о прохождении курса получит каждый участник. А те, кто выполнит финальный итоговый проект на стенде, добавят к своему портфолио специальный номерной сертификат. Цель нашего хардового финального тестирования — проверить полученные знания выпускников совокупно, поэтому мы включим каждую изученную тему, ограничим время и потребуем видеоподтверждение.
Старт потока: 28 июля 2022.
Нужно всего лишь добавить опцию
--acls
(ну и попутно--xattrs
ещё можно)Интересный нюанс, в далёкие годы в одном банке настраивал на сайте acl под разрабов и упёрся в лимит, новые правила не влезали. Выбор был переходить на группы или увеличивать место под acl правила, xfs позволяла и было проще, соответственно так и поступили. Тот ещё говнокод)
на опыте проверил что создать 100500 групп и добавить в них нужных пользователей и раздать права на группы лучше чем навешать 100500 acl
и работает шустрее (очень заметно шустрее) и не ссорится ни с каким софтом (ну из того что пробовал по крайней мере)
правда было это довольно давно и возможно с тех пор чегось и поменялось
а что делать, если одной группе нужно дать доступ только на чтение, а другой на запись?
Честно говоря не помню был ли у меня тогда такой кейс и как я его решил если он был..
с учётом того, что в unix группы не могут быть вложенными, управлять этим — то ещё удовольствие.