Red Hat System Administration II 8.2

Глава 4. Контроль доступа к файлам с помощью ACL

Аннотация

Цель Интерпретация и настройка списков управления доступом (ACL) к файлам для ситуаций, требующих сложных разрешений на доступ для пользователей и групп
Задачи
  • Описание сценариев использования списков ACL; идентификация файлов с ACL; интерпретация действия списков ACL

  • Настройка и удаление ACL для файлов; определение списков ACL по умолчанию, автоматически устанавливаемых каталогом для создаваемых файлов

Разделы
  • Интерпретация файловых ACL (и упражнение)

  • Защита файлов с помощью ACL (и упражнение)

Лабораторная работа

Контроль доступа к файлам с помощью ACL

Интерпретация файловых ACL

Задачи

После завершения этого раздела вы сможете:

  • описать списки управления доступом (ACL) и опции монтирования файловых систем;

  • просмотреть и интерпретировать ACL с помощью команд ls и getfacl;

  • описать маску ACL и приоритет разрешений ACL;

  • описать стандартные сценарии применения ACL в Red Hat Enterprise Linux.

Концепции списков управления доступом (ACL)

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

С помощью ACL можно предоставлять разрешения пользователям и группам, идентифицированным по имени пользователя, имени группы, UID или GID, используя те же биты разрешений, которые используются с обычными файловым разрешениями: чтение, запись и выполнение. Эти дополнительные пользователи и группы, помимо владельца файла и его группы, называются именованными пользователями и именованными группами.

Пользователи могут назначать ACL для файлов и каталогов, которыми владеют. Привилегированные пользователи с возможностями CAP_FOWNER в Linux могут назначить ACL для любого файла и каталога. Новые файлы и подкаталоги автоматически наследуют списки ACL по умолчанию от родительского каталога (если они заданы). Как и в случае с обычными правилами доступа к файлам, иерархии родительского каталога должно быть назначено по крайней мере разрешение на поиск (выполнение) для остальных, чтобы обеспечить доступ именованным пользователям и группам.

Поддержка ACL в файловой системе

Файловые системы необходимо монтировать с включенной поддержкой ACL. Файловая система XFS имеет встроенную поддержку ACL. В других файловых системах, таких как ext3 или ext4, созданных в Red Hat Enterprise Linux 8, опция acl включена по умолчанию, хотя в более ранних версиях необходимо подтверждать включение поддержки ACL. Чтобы включить поддержку ACL в файловой системе, используйте опцию ACL с командой mount или в записи файловой системы в файле конфигурации /etc/fstab.

Просмотр и интерпретация разрешений ACL

Команда ls -l выводит минимальные сведения о разрешениях ACL:

[user@host content]$ ls -l reports.txt
-rwxrw----+ 1 user operators 130 Mar 19 23:56 reports.txt

Знак плюс (+) в конце 10-символьной строки разрешений указывает, что для этого файла существует расширенная структура ACL с записями.

user:

Показывает разрешения ACL для пользователя, которые совпадают со стандартными файловыми разрешениями пользователя, ― rwx.

Группа :

Показывает текущие параметры маски ACL, а не разрешения группы-владельца ― rw.

Другой:

Показывает разрешения ACL для остальных пользователей, которые совпадают со стандартными файловыми разрешениями остальных пользователей, ― нет доступа.

Важно

Изменение разрешений группы-владельца для файла с ACL с помощью команды chmod изменяет не разрешения группы, а маску ACL. Используйте команду setfacl -m g::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::---

Просмотрите все разделы из предыдущего примера.

Записи комментариев:

# file: reports.txt
# owner: user
# group: operators

Первые три строки ― это комментарии, указывающие имя файла, пользователя-владельца (user) и группу-владельца (operators). Если у файла установлены дополнительные биты, например setuid или setgid, появится четвертая строка комментариев с указанием установленных битов.

Записи user:

user::rwx                           1
user:consultant3:---                      2
user:1005:rwx       #effective:rw-  3

1

Разрешения владельца файла. user имеет разрешения rwx.

2

Разрешения именованного пользователя. Одна запись для каждого именованного пользователя, связанного с этим файлом. У consultant3 нет разрешений.

3

Разрешения именованного пользователя. Пользователь с UID 1005 имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.

Записи group:

group::rwx          #effective:rw-  1
group:consultant1:r--                     2
group:2210:rwx      #effective:rw-  3

1

Разрешения группы-владельца. Группа operators имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.

2

Разрешения именованной группы. Одна запись для каждой именованной группы, связанной с этим файлом. У группы consultant1 есть только разрешение r.

3

Разрешения именованной группы. Группа с идентификатором GID 2210 имеет разрешения rwx, но маска ограничивает эффективные разрешения до rw.

Запись mask:

mask::rw-

Маска показывает максимально возможные разрешения для всех именованных пользователей, группы-владельца и именованных групп. Пользователь с UID 1005, группа operators и группа с GID 2210 не могут выполнить этот файл, хотя у них всех есть разрешение на выполнение.

Запись other:

other::---

Разрешения для остальных. Все остальные пользователи и группы НЕ имеют разрешений.

Просмотр ACL каталога

Для отображения ACL каталога используйте команду getfacl 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::---

Просмотрите все разделы из предыдущего примера.

Записи комментариев:

# file: .
# owner: user
# group: operators
# flags: -s-

Первые три строки ― это комментарии, указывающие имя каталога, пользователя-владельца (user) и группу-владельца (operators). Если для каталога установлены дополнительные биты (setuid, setgid, sticky), в четвертой строке комментариев будет показано, какие биты установлены (в данном случае setgid).

Стандартные записи 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                   1
default:user:consultant3:---              2

1

Разрешения по умолчанию для владельца файла. Владелец файла получит разрешения rwx, право на чтение и запись для новых файлов, а также чтение, запись и выполнение для новых подкаталогов.

2

Разрешения по умолчанию для именованного пользователя. Одна запись для каждого именованного пользователя, для которого ACL по умолчанию автоматически применяется к новым файлам и подкаталогам. Пользователь consultant3 по умолчанию не получает разрешений.

Записи default group:

default:group::rwx                  1
default:group:consultant1:r-x             2

1

Разрешения по умолчанию для группы-владельца. Группа-владелец файла получит разрешения rwx, право на чтение и запись для новых файлов, а также чтение, запись и выполнение для новых подкаталогов.

2

Разрешения по умолчанию для именованной группы. Одна запись для каждой именованной группы, для которой ACL по умолчанию автоматически применяется к новым файлам и подкаталогам. Группа consultant1 получит разрешения 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

Маска ACL

Маска ACL определяет максимальные разрешения, которые могут быть назначены именованным пользователям, группе-владельцу и именованным группам. Она не ограничивает разрешения владельца файла или остальных пользователей. Все файлы и каталоги, использующие ACL, получат маску ACL.

Эту маску можно отобразить с помощью getfacl и явно задать с помощью setfacl. Если она не задана явно, то будет вычислена и добавлена автоматически. Также может быть унаследовано значение маски по умолчанию от родительского каталога. По умолчанию маска пересчитывается при добавлении, изменении или удалении любой записи в ACL.

Приоритет разрешений 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, родительская папка файла system.journal может измениться, но systemd-journald автоматически применяет ACL к новой папке и файлу.

Примечание

Системные администраторы должны задавать ACL для папки /var/log/journal/, когда для systemd-journald настроено использование постоянного хранилища.

[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::---

ACL устройств, управляемых systemd

systemd-udev использует набор правил udev, которые применяют тег uaccess к некоторым устройствам, таким как проигрыватели или записывающие устройства CD/DVD, USB-накопители, звуковые карты и др. Правила udev задают ACL для этих устройств, чтобы пользователи могли войти в графический пользовательский интерфейс (например, gdm) и получить полный контроль над устройствами.

Списки ACL будут активны, пока пользователь не выйдет из графического пользовательского интерфейса. Когда в графический интерфейс войдет следующий пользователь, к соответствующим устройствам будет применен новый ACL.

В следующем примере можно увидеть, что для user запись ACL с разрешениями rw применяется к устройству /dev/sr0, которое является CD/DVD-приводом.

[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::---

Ссылки

Man-страницы acl(5), getfacl(1), journald.conf(5), ls(1), systemd-journald(8) и systemd-udevd(8)