Команды 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, которая полезна для очистки логов.