Содержание
По умолчанию работа с правами доступа в Linux довольно примитивна. Можно использовать только три категории для управления правами доступа: отдельно права для владельца файла, группы владельца и всех остальных пользователей. Этого вполне достаточно при работе с обычным домашним компьютером, где нет большого количества учетных записей пользователей и они не обмениваются между собой файлами. Но если нужно настроить систему большой организации с огромным количеством пользователей и потребностью обмена файлами по Samba и NFS понадобиться более сложная конфигурация.
Linux и другие Unix подобные системы поддерживают работу с ACL списками, которые позволяют назначать права доступа вне зависимости от прав указанных для владельца и группы. Здесь можно настроить разрешения для других пользователей не в форме одного пункта другие пользователи, а для каждого пользователя или группы отдельно. Например вы можете дать пользователям A B и С право на запись в определенный файл, не включая их непосредственно в свою группу.
Списки ACL поддерживаются различными файловыми системами Linux, в том числе ext2, ext3, ext4, xfs, Btrfs и т д.
Сначала нужно установить инструменты для работы с ACL. В большинстве дистрибутивов пакет так и называется - acl. Например в Ubuntu для установки выполните команду:
sudo apt-get install acl
В этой статье мы рассмотрим как работать с ACL в Ubuntu но в других дистрибутивах все будет выглядеть аналогично.
После установки инструментов, необходимо включить поддержку ACL для дисковых разделов. Сначала проверим не включен ли еще ACL на нашем диске:
mount
rootfs on / type rootfs (rw)
/dev/sda2 on / type ext4 (rw,noatime,acl)
devtmpfs on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=482245,mode=755)
Если поддержка ACL включена, среди опций монтирования будет указан флаг acl. Если же нет, нужно открыть файл /etc/fstab и добавить опцию acl к списку опций нужного диска.
Затем нужно перемонтировать этот раздел или просто полностью перезагрузить компьютер. Если ACL был включен для корневого раздела команда перемонтирования будет выглядеть вот так:
sudo mount / -o remount
Теперь ACL включен в вашей системе. Рассмотрим несколько примеров работы с ним.
Списки контроля доступа в Linux управляются двумя утилитами setfacl, и getfacl. Перавая используется непосредственно для настройки прав, а вторая показывает уже настроенные права. А теперь немного практики.
Создадим каталог foo:
mkdir /foo
ls / -lh
drwxr-xr-x 2 root root 4,0K окт 13 17:05 foo
Теперь дадим доступ к этой папке двум пользователям: test и test1. Первому полные права, а другому только на чтение. Установим права для test:
sudo setfacl -m u:test:rwx /foo
Теперь пользователь test сможет создавать подкаталоги и файлы в этом каталоге.
Затем установим права для второго пользователя:
sudo setfacl -m u:test2:rx /foo
Теперь давайте рассмотрим опции утилиты setfacl:
Теперь рассмотрим как посмотреть ACL права доступа для файла или папки:
ls -lh /foo
drwxrwxr-x+ 2 root root 4,0K окт 13 17:44 foo
Как видите возле стандартных прав доступа Linux стоит знак +, это означает что для этого файла настроены права ACL. Для их просмотра нужно выполнить команду:
sudo getfacl /foo
getfacl: Removing leading '/' from absolute path names
# file: foo
# owner: root
# group: root
user::rwx
user:test:rwx
user:test1:r-x
group::r-x
mask::rwx
other::r-x
Удалить ACL для пользователя можно командой:
sudo setfacl -x u:test /foo
А если нужно стереть полностью ACL список для директории выполните:
sudo setfacl -b /foo
Команды копирования и перемещения файлов cp и mv работают не совсем стандартно с ACL правами. Например чтобы скопировать ACL список вместе с файлом нужно указать опцию -p.
Использование списков контроля доступа позволяет более гибко контролировать доступ к файлам, которыми вы хотите поделиться с другими пользователями.
Лицензия: CC BY-SA 4.0
Благодарность автору!