Access Control Lists (Русский)
Списки управления доступом (Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для файловых систем, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.
Включение 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/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>
Просмотр ACL
Вывести права доступа ACL:
# getfacl <file/dir>
Примеры
Установить все права доступа к файлу для пользователя 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
Проверка:
Удалить все записи ACL:
# setfacl -b abc
Проверка:
Вывод команды ls
Символ (плюс) после прав доступа Unix в выводе команды указывает на использование ACL:
Права на выполнение личных файлов
Ниже описано, как процесс вроде веб-сервера может получить доступ к файлам в домашнем каталоге пользователя без ущерба для безопасности.
Будем считать что веб-сервер работает от пользователя и получает доступ к домашнему каталогу пользователя geoffrey
.
Санчала предоставим права на выполнение для пользователя :
# setfacl -m "u:http:--x" /home/geoffrey
Поскольку пользователь теперь имеет доступ к файлам в то безопаснее будет удалить доступ для остальных пользователей:
# chmod o-rx /home/geoffrey
Проверим изменения с помощью :
Как видно из вывода, other
больше не имеют никаких прав, но пользователь всё ещё может обращаться к файлам.
Если необходимо будет выдать пользователю права доступа на запись в определённые файлы/каталоги, выполните:
# setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache
Смотрите также
- POSIX Access Control Lists on Linux
- How to set default file permissions for all folders/files in a directory?