Access Control Lists (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Access Control Lists
. Дата последней синхронизации: 10 июля 2021. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Списки управления доступом
(Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для
файловых систем
, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.
Установка
Пакет
acl
уже установлен, так как является зависимостью
systemd
.
Включение ACL
Для использования ACL файловая система должна быть смонтирована с опцией
acl
. Файл
fstab
позволяет настроить постоянное монтирование с данной опцией.
В некоторых файловых системах параметр монтирования
acl
включён по умолчанию. К таким файловым системам относятся
Btrfs
и Ext2/
3
/
4
. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра
acl
:
# tune2fs -l /dev/sd
XY
| grep "Default mount options:"
Default mount options:    user_xattr acl
Убедитесь, что используемая по умолчанию опция не была переопределена. Об этом будет свидетельствовать параметр
noacl
в соответствующей строке файла
/proc/mounts
.
Задать параметры монтирования файловой системы по умолчанию можно командой
tune2fs -o
параметр
раздел
, например:
# tune2fs -o acl /dev/sd
XY
Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией
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>
The factual accuracy of this article or section is disputed.
Reason:
Оригинальное замечание об опции
--mask
(взятое из
setfacl(1)
) было признано неточным, но новый вариант также, судя по всему, неверен. Подробности см. по ссылке на обсуждение. (Discuss in
Talk:Access Control Lists#ACL mask entry
)
Примечание
По умолчанию
setfacl
вычисляет значение маски ACL, если она не была задана явно флагом
--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
Смотрите также
getfacl(1)
setfacl(1)
POSIX Access Control Lists on Linux
How to set default file permissions for all folders/files in a directory?