Команда 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