Команда setfacl списки контроля доступов ACL в Linux
ACL или Access Control Lists в Linux дают возможность предоставлять разрешения нескольким пользователям и группам для одного и того же файла или каталога. ACL позволяют решить некоторые ограничения других общих инструментов управления разрешениями, в частности:
- У файла/каталога может быть только один пользователь-владелец и одна группа-владелец
- Не работает наследование разрешений, чтобы разрешения каталога передавались его файлам и подкаталогам
Списки ACL применяются к каталогам, чтобы гарантировать, что новые файлы, созданные в каталоге, автоматически получат необходимые разрешения. Для установки ACL применяется команда setfacl.
Синтаксис
setfacl опции операция объект:группа:права дириктория/файл
Опции
ACL по умолчанию предназначен для новых файлов и не влияет на существующие файлы. Все новые файлы получат разрешения,
установленные в ACL по умолчанию. Без опции -d команда setfacl работает только с существующими файлами. Чтобы убедиться, что все новые файлы получат желаемые настройки ACL, следует дважды использовать команду setfacl. Сначала с опцией -d, чтобы был установлен список ACL по умолчанию, а затем с опцией -R и без опции -d, чтобы позаботиться о существующих в данный момент файлах.
-dустанавливает ACL по умолчанию. Это параметр ACL также наследуется подкаталогами и файлами-kудаляет список ACL по умолчанию-Rрекурсивно применяет настройки ACL
Операция
Устанавливает что надо сделать, добавить или удалить настройку ACL.
--setиспользуется для установки ACL, стоит учитывать, что произойдёт замена существующий ACL-mдополняет текущие настройки ACL, без полной замены-xудаляет существующий ACL
Объект
Существует два типа объектов:
uдля пользователяgдля группы
Группа
Указываем группу для которой будут новые настройки доступа.
Права
Разрешения, которые надо установить с помощью списков управления доступом.
Информации о списках
Для получения информации о списках ACL применяется команда getfacl, которой передается имя файла/каталога:
getfacl file
Применение setfacl
Создадим в папке файловой системы новый каталог:
sudo mkdir ./test
Посмотрим на списки ACL для этого каталога:
getfacl ./test
# file: test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
Видим что для владельца установлены разрешения rwx, для группы владельца и всех остальных — r-x.
Перейдем в каталог и попробуем создать в нем файл «hello.txt»:
touch hello.txt
Команда touch, которая должна создавать файл, не создает его без команды sudo.
Установим списки контроля доступом для этого каталога. В моем случае среди дополнительных групп, к которым принадлежит текущий пользователь, есть группа www-data:
groups
Установим для группы www-data разрешения rwx на папку ./test:
sudo setfacl -m g:www-data:rwx ./test
После этого заново проверим списки контроля доступа к папке с помощью команды getfacl:
getfacl ./test
# file: test
# owner: root
# group: root
user::rwx
group::r-x
group:www-data:rwx
mask::rwx
other::r-x
Видим что в выводе команды появился новый пункт group:www-data:rwx, который указывает на разрешения для группы www-data.
После этого, пользователи из группы www-data смогут изменять содержимое каталога, без команды sudo:
touch test.txt
Получим ACL для созданного файла:
getfacl test.txt
Для файла test.txt действуют списки доступа, установленные для папки test по умолчанию.
# file: test.txt
# owner: vadik
# group: vadik
user::rw-
group::rw-
other::r--
Изменение прав по умолчанию
Изменим права по умолчанию:
sudo setfacl -d -m g:www-data:rwx ./test
Параметр -d устанавливает список доступа ACL по умолчанию для всех новых файлов и каталогов на основе ACL, установленного для каталога test.
Создадим новый файл:
touch test2.txt
getfacl test2.txt
Для файла test2.txt уже применяются ACL, установленные для каталога:
# file: test2.txt
# owner: vadik
# group: vadik
user::rw-
group::r-x
group:www-data:rwx
mask::rwx
other::r--
Рекурсивное изменение прав
К первому текстовому файлу ACL каталога все еще не применяется. Чтобы решить эту проблему, нам надо применить ACL рекурсивно:
sudo setfacl -R -m g:www-data:rwx ./test