Аннотация
Описание сценариев использования списков ACL; идентификация файлов с ACL; интерпретация действия списков ACL
Настройка и удаление ACL для файлов; определение списков ACL по умолчанию, автоматически устанавливаемых каталогом для создаваемых файлов
Интерпретация файловых ACL (и упражнение)
Защита файлов с помощью ACL (и упражнение)
Контроль доступа к файлам с помощью ACL
После завершения этого раздела вы сможете:
описать списки управления доступом (ACL) и опции монтирования файловых систем;
просмотреть и интерпретировать ACL с помощью команд ls и getfacl;
описать маску ACL и приоритет разрешений ACL;
описать стандартные сценарии применения ACL в Red Hat Enterprise Linux.
Стандартные файловые разрешения Linux приемлемы, когда файлы используются только одним владельцем и одной группой лиц. Но иногда необходимо, чтобы к файлам могли обращаться разные пользователи и группы с разными наборами разрешений. Реализовать эту возможность можно с помощью списков управления доступом (ACL).
С помощью ACL можно предоставлять разрешения пользователям и группам, идентифицированным по имени пользователя, имени группы, UID или GID, используя те же биты разрешений, которые используются с обычными файловым разрешениями: чтение, запись и выполнение. Эти дополнительные пользователи и группы, помимо владельца файла и его группы, называются именованными пользователями и именованными группами.
Пользователи могут назначать ACL для файлов и каталогов, которыми владеют. Привилегированные пользователи с возможностями CAP_FOWNER в Linux могут назначить ACL для любого файла и каталога. Новые файлы и подкаталоги автоматически наследуют списки ACL по умолчанию от родительского каталога (если они заданы). Как и в случае с обычными правилами доступа к файлам, иерархии родительского каталога должно быть назначено по крайней мере разрешение на поиск (выполнение) для остальных, чтобы обеспечить доступ именованным пользователям и группам.
CAP_FOWNER
Поддержка ACL в файловой системе
Файловые системы необходимо монтировать с включенной поддержкой ACL. Файловая система XFS имеет встроенную поддержку ACL. В других файловых системах, таких как ext3 или ext4, созданных в Red Hat Enterprise Linux 8, опция acl включена по умолчанию, хотя в более ранних версиях необходимо подтверждать включение поддержки ACL. Чтобы включить поддержку ACL в файловой системе, используйте опцию ACL с командой mount или в записи файловой системы в файле конфигурации /etc/fstab.
acl
/etc/fstab
Команда ls -l выводит минимальные сведения о разрешениях ACL:
[user@host content]$ ls -l reports.txt -rwxrw----+ 1 user operators 130 Mar 19 23:56 reports.txt
[user@host content]$
ls -l reports.txt
Знак плюс (+) в конце 10-символьной строки разрешений указывает, что для этого файла существует расширенная структура ACL с записями.
Показывает разрешения ACL для пользователя, которые совпадают со стандартными файловыми разрешениями пользователя, ― rwx.
rwx
Показывает текущие параметры маски ACL, а не разрешения группы-владельца ― rw.
rw
Показывает разрешения ACL для остальных пользователей, которые совпадают со стандартными файловыми разрешениями остальных пользователей, ― нет доступа.
Изменение разрешений группы-владельца для файла с ACL с помощью команды chmod изменяет не разрешения группы, а маску ACL. Используйте команду setfacl -m g::perms file для изменения разрешений группы-владельца файла.
perms
file
Просмотр ACL файла
Для отображения ACL файла используйте команду getfacl file.
[user@host content]$ getfacl reports.txt # file: reports.txt # owner: user # group: operators user::rwx user:consultant3:--- user:1005:rwx #effective:rw- group::rwx #effective:rw- group:consultant1:r-- group:2210:rwx #effective:rw- mask::rw- other::---
getfacl reports.txt
Просмотрите все разделы из предыдущего примера.
Записи комментариев:
# file: reports.txt # owner: user # group: operators
Первые три строки ― это комментарии, указывающие имя файла, пользователя-владельца (user) и группу-владельца (operators). Если у файла установлены дополнительные биты, например setuid или setgid, появится четвертая строка комментариев с указанием установленных битов.
user
operators
setuid
setgid
Записи user:
user::rwx user:consultant3:--- user:1005:rwx #effective:rw-
Разрешения владельца файла. user имеет разрешения rwx.
Разрешения именованного пользователя. Одна запись для каждого именованного пользователя, связанного с этим файлом. У consultant3 нет разрешений.
consultant3
Разрешения именованного пользователя. Пользователь с UID 1005 имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.
1005
Записи group:
group::rwx #effective:rw- group:consultant1:r-- group:2210:rwx #effective:rw-
Разрешения группы-владельца. Группа operators имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.
Разрешения именованной группы. Одна запись для каждой именованной группы, связанной с этим файлом. У группы consultant1 есть только разрешение r.
consultant1
r
Разрешения именованной группы. Группа с идентификатором GID 2210 имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.
2210
Запись mask:
mask::rw-
Маска показывает максимально возможные разрешения для всех именованных пользователей, группы-владельца и именованных групп. Пользователь с UID 1005, группа operators и группа с GID 2210 не могут выполнить этот файл, хотя у них всех есть разрешение на выполнение.
Запись other:
other::---
Разрешения для остальных. Все остальные пользователи и группы НЕ имеют разрешений.
Просмотр ACL каталога
Для отображения ACL каталога используйте команду getfacl directory.
directory
[user@host content]$ getfacl . # file: . # owner: user # group: operators # flags: -s- user::rwx user:consultant3:--- user:1005:rwx group::rwx group:consultant1:r-x group:2210:rwx mask::rwx other::--- default:user::rwx default:user:consultant3:--- default:group::rwx default:group:consultant1:r-x default:mask::rwx default:other::---
getfacl .
# file: . # owner: user # group: operators # flags: -s-
Первые три строки ― это комментарии, указывающие имя каталога, пользователя-владельца (user) и группу-владельца (operators). Если для каталога установлены дополнительные биты (setuid, setgid, sticky), в четвертой строке комментариев будет показано, какие биты установлены (в данном случае setgid).
sticky
Стандартные записи ACL:
user::rwx user:consultant3:--- user:1005:rwx group::rwx group:consultant1:r-x group:2210:rwx mask::rwx other::---
Разрешения ACL для этого каталога те же, что и в предыдущем примере для файла, но применяются к каталогу. Ключевое отличие состоит в добавлении в эти записи разрешений на выполнение (когда применимо), чтобы разрешить поиск в каталоге.
Записи default user:
default:user::rwx default:user:consultant3:---
Разрешения по умолчанию для владельца файла. Владелец файла получит разрешения rwx, право на чтение и запись для новых файлов, а также чтение, запись и выполнение для новых подкаталогов.
Разрешения по умолчанию для именованного пользователя. Одна запись для каждого именованного пользователя, для которого ACL по умолчанию автоматически применяется к новым файлам и подкаталогам. Пользователь consultant3 по умолчанию не получает разрешений.
Записи default group:
default:group::rwx default:group:consultant1:r-x
Разрешения по умолчанию для группы-владельца. Группа-владелец файла получит разрешения rwx, право на чтение и запись для новых файлов, а также чтение, запись и выполнение для новых подкаталогов.
Разрешения по умолчанию для именованной группы. Одна запись для каждой именованной группы, для которой ACL по умолчанию автоматически применяется к новым файлам и подкаталогам. Группа consultant1 получит разрешения rx, право на чтение для новых файлов, а также чтение и выполнение для новых подкаталогов.
rx
Запись default mask:
default:mask::rwx
Маска по умолчанию показывает максимально возможные разрешения на все новые файлы и каталоги для именованных пользователей, группы-владельца и именованных групп. В данном примере: чтение и запись для новых файлов, а также чтение, запись и выполнение для новых подкаталогов. Новые файлы никогда не получают разрешение на выполнение.
Запись default other:
default:other::---
Разрешения по умолчанию для остальных. Все остальные пользователи и группы не будут иметь разрешений для новых файлов и подкаталогов.
Записи по умолчанию в предыдущем примере не включают именованного пользователя (UID 1005) и именованную группу (GID 2210). Следовательно, они не получат автоматически начальные записи в ACL для новых файлов и подкаталогов. Это фактически ограничивает их доступ файлами и подкаталогами, у которых уже есть ACL, в которых они присутствуют. Также соответствующий владелец файла может позже добавить их в ACL с помощью команды setfacl. Тем не менее они могут создавать собственные файлы и подкаталоги.
по умолчанию
Вывод команды getfacl можно использовать в качестве входных данных команды setfacl для восстановления ACL, а также для копирования ACL из исходного файла или каталога и сохранения в новый файл. Например, для восстановления ACL из резервной копии используйте команду getfacl -R /dir1 > file1, чтобы создать файл дампа рекурсивного вывода ACL для каталога и его содержимого. Этот вывод затем можно использовать для восстановления исходных ACL, для чего необходимо передать сохраненный вывод в качестве входных данных команде setfacl. Например, чтобы выполнить массовое обновление того же каталога по текущему пути, используйте следующую команду: setfacl --set-file=file1
file1
Маска ACL
Маска ACL определяет максимальные разрешения, которые могут быть назначены именованным пользователям, группе-владельцу и именованным группам. Она не ограничивает разрешения владельца файла или остальных пользователей. Все файлы и каталоги, использующие ACL, получат маску ACL.
остальных
Эту маску можно отобразить с помощью getfacl и явно задать с помощью setfacl. Если она не задана явно, то будет вычислена и добавлена автоматически. Также может быть унаследовано значение маски по умолчанию от родительского каталога. По умолчанию маска пересчитывается при добавлении, изменении или удалении любой записи в ACL.
Приоритет разрешений ACL
При определении доступа процесса (запущенной программы) к файлу стандартные файловые разрешения и ACL применяются следующим образом.
Если процесс запущен от имени пользователя, владеющего файлом, применяются разрешения, указанные в ACL для этого пользователя.
Если процесс запущен от имени пользователя, указанного в ACL, применяются разрешения ACL этого пользователя (с учетом маски).
Если процесс запущен от имени группы-владельца файла или именованной группы, указанной в ACL, применяются соответствующие разрешения ACL (с учетом маски).
В остальных случаях применяются разрешения ACL для остальных пользователей.
В Red Hat Enterprise Linux есть примеры типового использования ACL для предоставления расширенных разрешений.
Списки ACL в файлах журнала systemd
systemd-journald использует записи ACL, чтобы предоставить разрешение на чтение файла /run/log/journal/cb44...8ae2/system.journal для групп adm и wheel. Этот ACL позволяет участникам групп adm и wheel просматривать log-файлы, которыми управляет journalctl, в режиме чтения без доступа к привилегированному содержимому внутри /var/log/ (например, к файлам messages, secure и audit).
systemd-journald
/run/log/journal/cb44...8ae2/system.journal
cb44...8ae2
adm
wheel
/var/log/
messages
secure
audit
Согласно конфигурации systemd-journald, родительская папка файла system.journal может измениться, но systemd-journald автоматически применяет ACL к новой папке и файлу.
system.journal
Системные администраторы должны задавать ACL для папки /var/log/journal/, когда для systemd-journald настроено использование постоянного хранилища.
/var/log/journal/
[user@host ]$ getfacl /run/log/journal/cb44...8ae2/system.journal getfacl: Removing leading '/' from absolute path names # file: run/log/journal/cb44...8ae2/system.journal # owner: root # group: systemd-journal user::rw- group::r-- group:adm:r-- group:wheel:r-- mask::r-- other::---
[user@host ]$
getfacl /run/log/journal/cb44...8ae2/system.journal
group:adm:r--
group:wheel:r--
ACL устройств, управляемых systemd
systemd-udev использует набор правил udev, которые применяют тег uaccess к некоторым устройствам, таким как проигрыватели или записывающие устройства CD/DVD, USB-накопители, звуковые карты и др. Правила udev задают ACL для этих устройств, чтобы пользователи могли войти в графический пользовательский интерфейс (например, gdm) и получить полный контроль над устройствами.
systemd-udev
udev
uaccess
gdm
Списки ACL будут активны, пока пользователь не выйдет из графического пользовательского интерфейса. Когда в графический интерфейс войдет следующий пользователь, к соответствующим устройствам будет применен новый ACL.
В следующем примере можно увидеть, что для user запись ACL с разрешениями rw применяется к устройству /dev/sr0, которое является CD/DVD-приводом.
/dev/sr0
[user@host ]$ getfacl /dev/sr0 getfacl: Removing leading '/' from absolute path names # file: dev/sr0 # owner: root # group: cdrom user::rw- user:group:rw- group::rw- mask::rw- other::---
getfacl /dev/sr0
user:group:rw-
Man-страницы acl(5), getfacl(1), journald.conf(5), ls(1), systemd-journald(8) и systemd-udevd(8)