Access Control Lists (Русский)
Списки управления доступом (Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для файловых систем, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.
Установка
Пакет acl уже установлен, так как является зависимостью systemd.
Включение ACL
Для использования ACL файловая система должна быть смонтирована с опцией acl
. Файл fstab позволяет настроить постоянное монтирование с данной опцией.
В некоторых файловых системах параметр монтирования acl
включён по умолчанию. К таким файловым системам относятся Btrfs и Ext2/3/4. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра acl
:
# tune2fs -l /dev/sdXY | grep "Default mount options:"
Default mount options: user_xattr acl
Убедитесь, что используемая по умолчанию опция не была переопределена. Об этом будет свидетельствовать параметр noacl
в соответствующей строке файла /proc/mounts
.
Задать параметры монтирования файловой системы по умолчанию можно командой tune2fs -o параметр раздел
, например:
# tune2fs -o acl /dev/sdXY
Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией acl
и на других Linux-машинах. В противном случае придётся редактировать файл /etc/fstab
на каждой системе.
-
acl
используется как опция монтирования по умолчанию при создании файловой системы ext2/3/4. Это настраивается в файле/etc/mke2fs.conf
. - Параметры монтирования по умолчанию в
/proc/mounts
не указаны.
Использование
Изменение ACL
Для изменения прав ACL используется команда setfacl.
- Флаг
--test
позволяет вывести изменения прав доступа к файлу/каталогу без их реального применения (т.н. dry-run). - Флаг
-R
/--recursive
позволяет применять действия рекурсивно.
Задать права пользователя (в качестве пользователь
можно использовать имя пользователя или его ID):
# setfacl -m "u:пользователь:права" <file/dir>
Задать права группы (в качестве группа
можно использовать имя группы или её ID):
# setfacl -m "g:группа:права" <file/dir>
Задать права для остальных:
# setfacl -m "other:права" <file/dir>
Настроить наследование новыми файлами и каталогами записей ACL родительского каталога (не относится к файлам/каталогам, которые копируются в каталог):
# setfacl -dm "запись_ACL" <dir>
Удалить определённую запись ACL:
# setfacl -x "запись_ACL" <file/dir>
Удалить записи по умолчанию:
# setfacl -k <file/dir>
Удалить все записи ACL:
# setfacl -b <file/dir>
--mask
. С помощью маски задаются максимальные права, которые могут быть даны пользователю (не владельцу) или группе. Если маска не задаётся явно, то ей присваивается значение прав "группы по умолчанию". Например, предположим, что группа определённого каталога имеет права r-x
. Если добавить ACL-пользователя или группу с правами rwx
, то эффективными правами этого пользователя/группы применительно к данному каталогу будут r-x
. Причина подобного поведения заключается в предотвращении "сюрпризов" при перемещении файлов из системы, не поддерживающей ACL, в систему с ACL.Просмотр ACL
Вывести права доступа ACL:
# getfacl <file/dir>
Примеры
Установить все права доступа к файлу abc
для пользователя johnny
:
# setfacl -m "u:johny:rwx" abc
Проверка:
# getfacl abc
# file: abc # owner: someone # group: someone user::rw- user:johny:rwx group::r-- mask::rwx other::r--
Измененить права для пользователя johnny
:
# setfacl -m "u:johny:r-x" abc
Проверка:
# getfacl abc
# file: abc # owner: someone # group: someone user::rw- user:johny:r-x group::r-- mask::r-x other::r--
Удалить все записи ACL:
# setfacl -b abc
Проверка:
# getfacl abc
# file: abc # owner: someone # group: someone user::rw- group::r-- other::r--
Вывод команды ls
Символ +
(плюс) после прав доступа Unix в выводе команды ls -l
указывает на использование ACL:
$ ls -l /dev/audio
crw-rw----+ 1 root audio 14, 4 nov. 9 12:49 /dev/audio
$ getfacl /dev/audio
getfacl: Removing leading '/' from absolute path names # file: dev/audio # owner: root # group: audio user::rw- user:solstice:rw- group::rw- mask::rw- other::---
Права на выполнение личных файлов
Ниже описано, как процесс вроде веб-сервера может получить доступ к файлам в домашнем каталоге пользователя без ущерба для безопасности.
Будем считать что веб-сервер работает от пользователя http
и получает доступ к домашнему каталогу /home/geoffrey
пользователя geoffrey
.
Санчала предоставим права на выполнение для пользователя http
:
# setfacl -m "u:http:--x" /home/geoffrey
Поскольку пользователь http
теперь имеет доступ к файлам в /home/geoffrey
то безопаснее будет удалить доступ для остальных пользователей:
# chmod o-rx /home/geoffrey
Проверим изменения с помощью getfacl
:
$ getfacl /home/geoffrey
getfacl: Removing leading '/' from absolute path names # file: home/geoffrey # owner: geoffrey # group: geoffrey user::rwx user:http:--x group::r-x mask::r-x other::---
Как видно из вывода, other
больше не имеют никаких прав, но пользователь http
всё ещё может обращаться к файлам.
Если необходимо будет выдать пользователю http
права доступа на запись в определённые файлы/каталоги, выполните:
# setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache