Наследование прав на файлы и папки в Linux

Здравия всем! В очередной раз настраивая свеже установленную систему 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х человек.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.