JavaRush /Курсы /Docker SELF /Управление правами доступа с помощью ACL (`setfacl`, `get...

Управление правами доступа с помощью ACL (`setfacl`, `getfacl`)

Docker SELF
5 уровень , 3 лекция
Открыта

1. Знакомство с ACL

Представьте, что вы организатор вечеринки (или администратор системы). Вы хотите, чтобы гости могли ходить в определённые комнаты, а в другие — только с вашего разрешения. Базовые права доступа в Linux rwx позволяют вам управлять доступом только для трёх категорий: владельца (user), группы (group) и всех остальных (others). Но что, если вам нужно дать доступ к комнате только особому другу? Смотритель стандартной модели прав скажет вам: "Эй, так не получится". Вот тут-то и приходят ACL с готовностью помочь.

ACL (Access Control Lists) решают проблему ограничения классической трёхуровневой системы прав, позволяя задавать права доступа конкретным пользователям и группам.

Основные возможности ACL:

  1. Установка индивидуальных прав на файлы и каталоги для определённых пользователей и групп.
  2. Наследование прав для новых файлов внутри каталога.
  3. Более гибкая настройка, чем традиционный подход chmod.

2. Как узнать, включены ли ACL?

Перед тем как начать управлять ACL, давайте выясним, поддерживаются ли они вашей системой. Вы можете проверить это с помощью команды:

mount | grep acl

Если файловая система была смонтирована с опцией acl, вы готовы к делу! В противном случае потребуется пересмонтировать раздел с добавлением acl:

sudo mount -o remount,acl /your/mount/point

Всё, теперь вы во всеоружии. Настало время погружаться в практику.


3. Основные команды для работы с ACL

Команда Описание
getfacl Получить список текущих ACL для файла или каталога.
setfacl Установить или модифицировать ACL для файла или каталога.
setfacl -m Изменить (modify) текущие права доступа.
setfacl -x Удалить (remove) определённые права доступа.
setfacl -b Удалить все записи ACL для файла или каталога.
setfacl -d Установить права по умолчанию для каталога, которые наследуются файлами.

Теперь давайте на примерах разберём каждую из этих команд!


Получение текущих ACL getfacl

Допустим, у нас есть файл example.txt. Мы хотим посмотреть текущие права доступа с использованием ACL. Для этого достаточно одной команды:

getfacl example.txt

Примерный вывод будет выглядеть так:

# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---

Этот список показывает стандартные права: владелец user1 может читать и писать, группа group1 только читать, а остальные пользователи вообще не имеют доступа.


Установка индивидуальных прав доступа (setfacl)

Теперь представим, что пользователю user2 нужно разрешить записывать в файл example.txt. Это можно сделать так:

sudo setfacl -m u:user2:rw example.txt

Команда означает:

  • -m: модификация прав.
  • u:user2:rw: добавить или изменить права для пользователя user2 (read-write).

Проверим результат:

getfacl example.txt

Теперь вывод выглядит так:

# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw  # Дополнительное правило!
group::r--
other::---

Удаление индивидуальных прав доступа setfacl -x

Если вы решили, что пользователь user2 больше не должен иметь права на запись, права можно удалить:

sudo setfacl -x u:user2 example.txt

Проверим:

getfacl example.txt

Больше никаких дополнительных правил для user2!


Установка прав для групп

Права через ACL можно задавать не только для отдельных пользователей, но и для целых групп. Например, чтобы дать группе devteam доступ на чтение и запись, выполните:

sudo setfacl -m g:devteam:rw example.txt

Установка прав по умолчанию setfacl -d

Часто бывает нужно автоматически задавать права для всех новых файлов и директорий внутри определённого каталога. Например, вы хотите, чтобы все файлы в каталоге project_dir имели права на запись для пользователя developer. В этом случае:

sudo setfacl -d -m u:developer:rw project_dir

Проверить права можно так:

getfacl project_dir

Теперь для всех новых файлов и подкаталогов в project_dir будет применяться это правило по умолчанию.


Удаление всех ACL setfacl -b

Если вы хотите полностью очистить все ACL для файла:

sudo setfacl -b example.txt

Теперь файл вернётся к стандартной модели прав доступа user:group:others.


4. Практическое применение ACL

Сценарий: Совместная работа в проекте

Допустим, у вас есть проект, хранящийся в каталоге /project. Работают три человека:

  • Alice должна иметь полный доступ (чтение, запись, выполнение).
  • Bob должен только читать файлы.
  • Eve вообще не должна видеть каталог.

Настраиваем это с помощью ACL:

  1. Дать Alice полный доступ:

    sudo setfacl -m u:alice:rwx /project
    
  2. Дать Bob доступ только на чтение:

    sudo setfacl -m u:bob:r-- /project
    
  3. Для Eve ничего не делаем — у неё не будет доступа по умолчанию.

Посмотрим текущий список ACL:

getfacl /project

Вывод:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

Теперь Alice может работать без ограничений, Bob может только просматривать файлы, а Eve остаётся в стороне.


5. Потенциальные ошибки и их решение

  1. ACL не работают, хотя вы их настроили. Возможно, раздел не смонтирован с опцией acl. Используйте mount для проверки и пересмонтируйте его при необходимости.

  2. Конфликт между стандартными правами и ACL. ACL всегда имеют приоритет над стандартными правами. Например, даже если у "others" установлен запрет на чтение, ACL может разрешить доступ конкретному пользователю.

  3. Забудете про унаследованные ACL. Если вы настроили -d (default) права, проверьте, унаследовались ли эти правила новыми файлами.

Почему это важно?

Управление правами через ACL позволяет вам гибко настраивать доступ для разных пользователей и групп. Это особенно полезно на рабочих серверах, где требуется распределение прав доступа с учётом ролей. Например, в компаниях ACL используются для ограничения доступа только тем, кто "в теме" — один из ключей к безопасности.

Дополнительно можно изучить официальное руководство по ACL, чтобы ещё лучше понять их возможности.

1
Задача
Docker SELF, 5 уровень, 3 лекция
Недоступна
Проверка текущих ACL прав
Проверка текущих ACL прав
1
Задача
Docker SELF, 5 уровень, 3 лекция
Недоступна
Установка индивидуальных прав для пользователя
Установка индивидуальных прав для пользователя
1
Задача
Docker SELF, 5 уровень, 3 лекция
Недоступна
Установка прав по умолчанию на директорию
Установка прав по умолчанию на директорию
1
Задача
Docker SELF, 5 уровень, 3 лекция
Недоступна
Удаление всех ACL прав
Удаление всех ACL прав
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Магсумова Диана Уровень 24 Expert
20 июля 2025
Видать Eve в свое время очень накосячила.. )