Перейти к основному содержанию

Linux — работа с ACL

Linux

Иногда нескольким пользователям или группам нужно назначить разные права на файл или папку. Стандартной системы прав Linux здесь уже недостаточно, на помощь приходит ACL (Access Control List). Права ACL могут быть обычными: применяются к файлу или папке. А могут быть наследуемыми (ACL default): применяются только к папке. При этом все создаваемые файлы и папки в таком каталоге будут наследовать эти права.

Работать будем под пользователем root, поскольку настройка прав доступа требует привилегий.

Установка пакета ACL в Ubuntu:

apt install acl

ACL

Давайте рассмотрим пример, создадим тестовый файл.

cd /home/zabbix
touch test.txt
ll | grep test

Получим:

-rw-r--r-- 1 root  root     0 апр 12 19:16 test.txt

По указанным правам доступа "-rw-r--r--" уже видно, что на файле нет ACL, владелец (root) может читать и писать в файл, пользователи и группы могут только читать. Для просмотра ACL прав используем команду getfacl, которая доступна всем пользователям.

getfacl /home/zabbix/test.txt
getfacl: Удаление начальных '/' из абсолютных путей
# file: home/zabbix/test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--

Настроек ACL у файла нет, отображаются стандартные права. Установим ACL, пусть пользователь zabbix будет иметь доступ на чтение и запись. Для установки ACL прав используем команду setfacl, которая доступна только пользователю root.

  • -m для модификации прав
  • u (user) для пользователя или g (group) для группы или o (other) для остальных
  • двоеточие, имя пользователя или группы
  • двоеточие, права
  • имя файла

Как-то так:

setfacl -m u:пользователь:rwx имя_файла
setfacl -m g:группа:rw- имя_файла
setfacl -m o:r-- имя_файла

Установим ACL на наш файл.

setfacl -m user:zabbix:rw- /home/zabbix/test.txt
# или
setfacl -m u:zabbix:rw- /home/zabbix/test.txt

Посмотрим что получилось.

cd /home/zabbix
ll | grep test
-rw-rw-r--+  1 root   root      0 апр 12 19:16 test.txt

Смотрим на права "-rw-rw-r--+" и видим плюсик в конце. Это как раз и означает, что на файле есть ACL. И права группы теперь отображаются с максимальной маской -rw. Маска ACL показывает максимально возможные права файла или директории и отображается вместо обычных прав.

getfacl /home/zabbix/test.txt
getfacl: Удаление начальных '/' из абсолютных путей
# file: home/zabbix/test.txt
# owner: root
# group: root
user::rw-
user:zabbix:rw-
group::r--
mask::rw-
other::r--

Удаление пользователя или группы из ACL осуществляется опцией -x:

setfacl -x u:zabbix /home/zabbix/test.txt

Удаление ACL осуществляется опцией -b:

setfacl -b /home/zabbix/test.txt

Рекурсия

Назначать и удалять ACL можно рекурсивно опцией -R.

setfacl -R -m u:пользователь:права файл
setfacl -R -b каталог

ACL default

Разберёмся с наследованием, такие ACL можно установить только на директорию. Создадим директорию для примера.

cd /home/zabbix
mkdir testdir
ll | grep testdir
drwxr-xr-x  2 root   root   4096 апр 12 19:43 testdir/

Применим Default ACL. Делается это с помощью опции -d.

setfacl -d -m u:zabbix:rwx /home/zabbix/testdir/
cd /home/zabbix
ll | grep testdir
drwxr-xr-x+  2 root   root   4096 апр 12 19:43 testdir/

Видим плюсик в конце.

getfacl /home/zabbix/testdir/
getfacl: Удаление начальных '/' из абсолютных путей
# file: home/zabbix/testdir/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Появились опции default. Создадим в директории тестовый файл.

cd /home/zabbix/testdir
touch test2.txt
ll | grep test
-rw-rw-r--+ 1 root   root      0 апр 12 19:49 test2.txt

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

Маска ACL

Маска показывает максимально возможные права файла или директории и отображается вместо обычных прав. Если у одного пользователя права r--, а у второго rw-, то маска будет rw-. Маску можно изменить.

setfacl -m user:zabbix:rw- /home/zabbix/test.txt
setfacl -m m:r-- /home/zabbix/test.txt
getfacl /home/zabbix/test.txt
getfacl: Удаление начальных '/' из абсолютных путей
# file: home/zabbix/test.txt
# owner: root
# group: root
user::rw-
user:zabbix:rw-                 #effective:r--
group::r--
mask::r--
other::r--

Права при этом изменятся (#effective:r--).

Теги

 

Похожие материалы

Уязвимость в ядре Linux — Dirty Pipe CVE-2022-0847

В ядре Linux найдена серьёзная уязвимость CVE-2022-0847, названная Dirty Pipe. Уязвимость позволяет перезаписать содержимое любого файла от имени непривилегированного пользователя.

Теги