Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Любой системный администратор сталкивался или столкнется с ситуацией, когда стандартных возможностей распределения прав в Linux недостаточно для выполнения задачи. Но не всегда лучшим решением станет подключение ACL.
Эта статья поможет определиться действительно ли проекту требуется гибкость на уровне пакета ACL и какие проблемы могут возникнуть при его использовании.
Итак, знакомьтесь ближе с теоретической и практической составляющими утилиты.
Что такое ACL
Стандартный режим контроля прав Linux закрывает большинство потребностей администрирования доступа к файловой системе. Разрешение на чтение, изменение или выполнение файла/директории определяется для трех категорий пользователей: владельца файла, его группы и всех остальных.
ACL (Access control lists) — более сложный, но гибкий инструмент управления правами доступа. Он позволяет сегментировать категорию «other» и разрешить работу с файлом/директорией нескольким конкретным пользователям и группам. Подключение ACL не ограничивается корневым каталогом и даже не рекомендуется. В зависимости от целей администрирования прав опцию можно применить для отдельной файловой системы или данных серверов SMB и NFS.
ACL передается не в командной строке, а в inode файле, который содержит правила предоставления доступа к конкретному файлу или директории.
ACL: что может пойти не так
Главный проблема ACL состоит в снижении производительности файловой системы.
Но она не единственная:
ACL может некорректно взаимодействовать с программами, не поддерживающими их. Распространенный пример — утилита tar, которая не архивирует списки доступов. На практике же конфликты могут возникнуть не только с программами архивирования и резервного копирования, но иногда даже с текстовыми редакторами. Например, если изменение данных по правилам редактора сохраняется в новый файл, а не исходный, то ACL файла могут быть потеряны.
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 дисковой раздел необходимой файловой системы.
Два типа 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 можно добавить следующие опций:
-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
В сложных структурах списков контроля доступа к файловой системе маска выполняет функцию фильтра и определяет максимальные границы разрешения доступа для пользователей и групп. Она переписывается автоматически при внесении изменений в 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 по умолчанию
Настройки доступа 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.
Принять вызов