Команды getfacl и setfacl в Linux: подробное руководство по настройке прав доступа ACL

В операционной системе Linux управление доступом к файлам и каталогам происходит на двух уровнях. Стандартные права доступа, которые управляются командой chmod
, и расширенные списки контроля доступа (ACL), позволяющие задавать дополнительные права для конкретных пользователей и групп. Это особенно важно в многоуровневых системах, где нужны детализированные настройки прав. В этой статье мы подробно разберем команды getfacl
и setfacl
, которые используются для работы с ACL.
ACL и стандартные права через chmod: основные отличия
Традиционные права в Linux включают три группы: для владельца файла, для группы, к которой принадлежит файл, и для всех остальных пользователей. Эти права ограничены тремя действиями — чтение (r), запись (w) и выполнение (x). Команда chmod
позволяет изменять эти права, но в ограниченном формате: доступ задается сразу для всех в категории, например, для всей группы.
ACL расширяет эти возможности, позволяя назначать индивидуальные права для отдельных пользователей и групп. Это становится особенно полезным, если доступ нужно предоставить нескольким конкретным пользователям, которые не входят в одну группу. С ACL можно точно указать, кто и каким образом может взаимодействовать с каждым файлом.
Основные возможности, которые дает ACL, включают:
- Назначение прав на уровне отдельных пользователей и групп.
- Настройка уникальных прав для нескольких пользователей на один файл.
- Задание прав по умолчанию, применяющихся ко всем новым файлам в каталоге.
Как установить пакет для работы с ACL
Чтобы использовать команды getfacl
и setfacl
, необходимо установить пакет acl
. Выполните одну из следующих команд в зависимости от вашего дистрибутива:
# Для Debian/Ubuntu
sudo apt update
sudo apt install acl
# Для CentOS/Fedora
sudo dnf install acl
Проверка поддержки ACL
Перед использованием ACL важно убедиться, что файловая система поддерживает их. Для проверки можно выполнить команду:
tune2fs -l /dev/sdX | grep "Default mount options:"
Если вывод не содержит опции acl
, смонтируйте файловую систему с этой опцией вручную:
sudo mount -o remount,acl /точка/монтирования
Команда getfacl: просмотр прав доступа ACL
Чтобы узнать, какие права доступа ACL заданы для файла или каталога, используйте команду getfacl
:
getfacl имя_файла_или_каталога
Пример вывода:
# file: example.txt
# owner: user
# group: user
user::rw-
user:guest:r--
group::r--
mask::r--
other::---
В этом примере права назначены для владельца user
, группы user
, пользователя guest
и всех остальных.
Использование команды setfacl для настройки прав доступа
Команда setfacl
позволяет добавлять, изменять или удалять права ACL для пользователей и групп. Основной синтаксис:
setfacl [опции] [действие] [запись] файл_или_каталог
Для примера, чтобы предоставить пользователю guest
права на чтение и запись для файла example.txt
, выполните:
setfacl -m u:guest:rw example.txt
Здесь -m
означает модификацию записи, u:guest:rw
— права на чтение и запись для пользователя guest
.
Удаление прав с помощью setfacl
Чтобы удалить права, назначенные пользователю guest
для файла example.txt
, используйте:
setfacl -x u:guest example.txt
Настройка прав по умолчанию в каталоге
Если нужно, чтобы права на чтение и запись по умолчанию применялись ко всем новым файлам в каталоге, можно установить дефолтные ACL. Например, для каталога project
это делается так:
setfacl -d -m u:guest:rw project/
Здесь -d
задает права по умолчанию, которые будут у новых файлов и каталогов внутри project
.
Рекурсивное изменение ACL в каталоге
Для применения изменений ко всем файлам и папкам внутри определенного каталога используйте опцию -R
:
setfacl -R -m u:guest:r project/
Сброс прав ACL до стандартных
Чтобы удалить все записи ACL и оставить только стандартные права, выполните команду:
setfacl -b example.txt
Эта команда убирает все дополнительные записи ACL, возвращая файл к исходным настройкам прав.
Заключение
Команды getfacl
и setfacl
позволяют расширить стандартную модель прав доступа в Linux, задавая индивидуальные права для пользователей и групп. Они полезны в ситуациях, когда требуется гибкое управление доступом, выходящее за пределы возможностей chmod
.
Для более глубокого изучения системных команд Linux и управления правами ознакомьтесь с другими материалами. Например, статья о решении проблемы 'failed to mount /proc/sys/fs/binfmt_misc' расскажет, как решить специфические ошибки. Если вам нужно фильтровать лог-файлы, обратите внимание на руководство по команде sponge, которая полезна для очистки логов.