Здравия всем! В очередной раз настраивая свеже установленную систему Ubuntu 22.04 я не мог понять, почему не работает система ACL (Access Control List) или наследование прав на созданные папки и файлы от родительской папки. В статье я расскажу как включить наследование.
В системах Windows наследование прав на файлы и папки включено по умолчанию на разделы NTFS. По этому многие ожидают, что в Linux системах, тоже включено наследование. Но по умолчанию в популярных дистрибутивах, он отключен. Разберемся, как включить наследование на примере Ubuntu 22.04 или Debian 11.
Включение ACL в настройках
По умолчанию в Ubuntu 22.04 ACL(Access Control List) отключен. Его надо включить. Для этого перейдем в терминал
sudo bash
apt install acl
Отредактируем файл /etc/fstab
mcedit /etc/fstab
Находим строчку, где у нас указана наша файловая система /, у меня это:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=d55e9a35-d0c7-4987-8d16-793998f623f8 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=DAB8-DEA5 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
И добавляем сразу после errors=remount-ro,acl, чтобы выглядело это вот так:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda5 during installation
UUID=d55e9a35-d0c7-4987-8d16-793998f623f8 / ext4 errors=remount-ro,acl 0 1
# /boot/efi was on /dev/sda1 during installation
UUID=DAB8-DEA5 /boot/efi vfat umask=0077 0 1
/swapfile none swap sw 0 0
Сохраняем наше изменение. Теперь нам нужно, чтобы система перечитала этот файл
mount -oremount /
Или перезагрузить наш компьютер.
Команды управления
Теперь когда мы поставили ACL и подключили его к нашему разделу, давайте посмотрим права. Для этого есть команда getfacl
root@home:~# getfacl /home/yuri/
getfacl: Removing leading '/' from absolute path names
# file: home/yuri/
# owner: yuri
# group: yuri
user::rwx
group::r-x
other::r-x
В Linux механизм наследования работает также как в Windows, только называется «правами по умолчанию». Несмотря на своё название, права по умолчанию вовсе не задаются автоматически. Их нужно прописать отдельно. Для примера используем каталог пользователя Yuri:
setfacl -d -m u::rwx,g::rwx,o::r-x /home/yuri/
-d указывает, что команда задаёт права по умолчанию, -m на редактирование прав.
Давайте посмотрим, что поменялось:
root@home:~# getfacl /home/yuri/
getfacl: Removing leading '/' from absolute path names
# file: home/yuri/
# owner: yuri
# group: yuri
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Как видим, в свойствах папки появились строчки, начинающиеся с default. Именно они и говорят нам о правах по умолчанию для владельца, ассоциированной группы и всех остальных.
ACL позволяет установку прав доступа для отдельных пользователей и групп:
setfacl -d -m u:test:rwx /home/yuri
Этой командой мы дали пользователю test те же права по умолчанию, что и у владельца каталога.
root@home:~# getfacl /home/yuri/
getfacl: Removing leading '/' from absolute path names
# file: home/yuri/
# owner: yuri
# group: yuri
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:test:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
Если нужно удалить права по умолчанию, то нужно использовать ключ -k
setfacl -k /home/yuri/
root@home:~# getfacl /home/yuri/
getfacl: Removing leading '/' from absolute path names
# file: home/yuri/
# owner: yuri
# group: yuri
user::rwx
group::r-x
other::r-x
Заключение
Как мы увидели из статьи, ничего сложного во включении списков доступа ACL. Наследование очень хорошо работает, если заранее прописать для папки права. Иначе можно получить проблемы, если с папкой будут работать больше 2х человек.