Access Control Lists (Русский)
Введение
ACL (Access Control List - Список Контроля Доступа) предоставляет расширенный и более гибкий механизм распределения прав файловых систем. Он предназначен для расширения прав доступа к файлам UNIX
. ACL позволяет устанавливать разрешения любым пользователям или группам для различных файловых ресурсов.
Установка
Пакет acl уже установлен так как является зависимостью для systemd.
Настройка
Включение ACL
Чтобы включить ACL, файловая система должна быть смонтирована с опцией acl
. Используйте fstab для постоянного монтирование с данной опцией.
Вероятно параметр acl
уже активен как параметр установки файловой системы по умолчанию. Это справедливо для Btrfs и ext{2,3,4} файловых систем.
Команда для проверки разделов ext* на предмет включенного параметра acl
:
# tune2fs -l /dev/sdXY | grep "Default mount options:"
Default mount options: user_xattr acl
Также убедитесь, что опция монтирования по умолчанию не переопределена, об этом будет свидетельствовать присутствие параметра noacl
в выводе /proc/mounts
для соответствующего раздела.
Вы также можете установить параметры монтирования по умолчанию для файловой системы, используя команду tune2fs -o option partition
, например:
# tune2fs -o acl /dev/sdXY
Это очень удобно, так как избавляет от необходимости править /etc/fstab
, а также установки опции acl
при монтировании внешних дисков.
acl
указывается как опция установки по умолчанию при создании файловой системы ext{2,3,4}. Это настроено в файле/etc/mke2fs.conf
.- Параметры монтирования по умолчанию не указаны в
/proc/mounts
. - При архивации с помощью
tar
используйте ключ --acls чтобы включить поддержку атрибутовacl
.
Изменение прав ACL
Для изменения прав ACL используйте команду setfacl.
Добавить разрешения для пользователя (user
здесь имя пользователя или его ID):
# setfacl -m "u:user:permissions" <file/dir>
Добавить разрешения для группы (group
здесь имя группы или её ID):
# setfacl -m "g:group:permissions" <file/dir>
Все файлы и каталоги при создании будут наследовать записи ACL родительского каталога:
# setfacl -dm "entry" <dir>
Удалить определённую ACL запись:
# setfacl -x "entry" <file/dir>
Удалить все ACL записи:
# setfacl -b <file/dir>
Просмотр прав ACL
Посмотреть права ACL:
# getfacl <file/dir>
Примеры
Установить все разрешения на файл "abc" для пользователя johny:
# 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--
Изменение разрешений для пользователя johny:
# 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
Знак +
(плюс) в выводе команды ls -l
который следует за правами Unix, указывает на использование 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::---
Поиск файлов с правами ACL
getfacl -R -s -p <dir> | sed -n 's/^# file: //p'
данная команда ищет в указанном каталоге и его подкаталогах все файлы и директории которые имеют права ACL
Предоставление разрешений на выполнение личных файлов веб-сервером
Следующий метод описывает то, как процесс веб-сервера может получить доступ к файлам находящихся в домашней папке пользователя, без ущерба для безопасности.
Будем считать что веб-сервер работает от пользователя webserver
и предоставляет доступ к домашнему каталогу /home/geoffrey
пользователя geoffrey
.
Для начала разрешим webserver
доступ к домашней папке пользователя geoffrey
:
# setfacl -m "u:webserver:--x" /home/geoffrey
Поскольку webserver
теперь имеет доступ к файлам в /home/geoffrey
то безопаснее будет удалить доступ other
пользователей:
# 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:webserver:--x group::r-x mask::r-x other::---
Как видно из вывода, other
больше не имеют никаких разрешений, но webserver
все еще может обращаться к файлам.