Сервер: ACL в Linux

ACL (Access Control List) в Linux - это расширенные права поверх классических rwx. Позволяют задавать доступ отдельным пользователям/группам и дефолтные права для каталогов. Управляются через getfacl и setfacl, важный нюанс - запись mask, которая ограничивает эффективные права. Используется, когда схемы user/group/others уже не хватает.

Проверка и установка утилит ACL

Проверить наличие утилит:

which getfacl setfacl

Установка в RHEL / CentOS / AlmaLinux:

sudo dnf install acl

Установка в Debian / Ubuntu:

sudo apt install acl

Проверка опций файловой системы (часто ACL уже включён по умолчанию):

mount | grep ext4

Базовые команды: getfacl и setfacl

Просмотр ACL

getfacl file.txt
getfacl -R /srv/project

Добавление / изменение ACL

Права для конкретного пользователя:

setfacl -m u:alex:rw file.txt

Права для группы:

setfacl -m g:developers:rwx /srv/project

Рекурсивно по каталогу:

setfacl -R -m g:developers:rwx /srv/project

Удаление записей ACL

Удалить запись для пользователя или группы:

setfacl -x u:alex file.txt
setfacl -x g:developers /srv/project

Полностью сбросить ACL у файла/каталога:

setfacl -b file.txt
setfacl -bR /srv/project

Структура ACL и роль mask

Пример вывода getfacl:

# file: report.txt
# owner: root
# group: root
user::rw-
user:alex:rw-
group::r--
group:developers:rw-
mask::rw-
other::---
  • user:: - права владельца файла;
  • group:: - права основной группы файла;
  • other:: - права для всех остальных;
  • user:alex - отдельные права для пользователя alex;
  • group:developers - отдельные права для группы developers;
  • mask - верхняя граница прав для всех user: и group: ACL (кроме владельца и others).

Если выполнить, например:

chmod 640 report.txt

то mask может стать r--, и эффективные права для всех доп. пользователей/групп урежутся до чтения. В выводе getfacl это может отражаться как:

user:alex:rw-           #effective:r--

Важно: если используешь ACL, аккуратнее с массовыми chmod - они могут незаметно подрезать права через mask.

Default ACL - права по умолчанию для новых файлов

Default ACL задаются на каталог и наследуются всеми новыми файлами и подкаталогами внутри.

Пример: нужно, чтобы все новые файлы в /srv/shared были доступны группе developers с rwX, а пользователю alex - тоже с rwX:

setfacl -m d:g:developers:rwX /srv/shared
setfacl -m d:u:alex:rwX /srv/shared
  • d: - default ACL (для новых файлов/каталогов);
  • X - исполняемый бит только для каталогов и файлов, где уже есть x у кого-то (удобно при рекурсивной раздаче прав).

Комбо: применить права и к уже существующим объектам, и к будущим:

# Текущие файлы и каталоги
setfacl -R -m g:developers:rwX /srv/shared
setfacl -R -m u:alex:rwX /srv/shared

# Default ACL для новых файлов и каталогов
setfacl -m d:g:developers:rwX /srv/shared
setfacl -m d:u:alex:rwX /srv/shared

Взаимодействие ACL с chmod, chown и umask

  • chmod - меняет классические биты и может менять mask, тем самым урезая эффективные ACL-права.
  • chown - меняет владельца/группу, при этом дополнительные записи user: и group: обычно сохраняются.
  • umask - влияет на начальные права при создании файла, но затем поверх накладываются default ACL каталога (если они заданы).

Практический совет: если каталог активно использует ACL, старайся избегать слепых chmod -R и после изменений проверяй getfacl.

Практический пример: общий каталог проектов

Задача:

  • Каталог: /srv/projects
  • Владелец: root:root
  • Группа developers - полный доступ (rwx)
  • Пользователь alex - только чтение и выполнение (r-x)
  • Остальные - без доступа

Шаги настройки:

# Базовые владельцы и права
sudo chown root:root /srv/projects
sudo chmod 770 /srv/projects

# ACL для существующих файлов и каталогов
sudo setfacl -R -m g:developers:rwx /srv/projects
sudo setfacl -R -m u:alex:r-x /srv/projects

# Default ACL для новых файлов и каталогов
sudo setfacl -m d:g:developers:rwx /srv/projects
sudo setfacl -m d:u:alex:r-x /srv/projects

# Проверка
getfacl /srv/projects

Перенос и бэкапы с сохранением ACL

При копировании и бэкапах нужно явно сохранять ACL:

cp c ACL:

cp -a src/ dst/

rsync с ACL и extended attributes:

rsync -aAX src/ dst/

tar с ACL (пример):

tar --acls -cpf backup.tar /srv/projects
Просмотров: 335
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram