Что такое ACL в Linux?

Ответ

ACL (Access Control Lists, списки контроля доступа) в Linux — это расширение стандартной модели прав доступа user/group/others (rwx). ACL позволяет назначать права на файлы и каталоги для произвольного количества пользователей и групп, что необходимо в сложных многопользовательских средах или при развертывании сервисов.

Основные команды:

  • Установка прав: setfacl -m u:jenkins:rwx,d:u:jenkins:rwx /opt/deploy/
    • -m — modify (изменить ACL).
    • u:jenkins:rwx — дать пользователю jenkins права на чтение, запись и выполнение.
    • d:u:jenkins:rwx — установить правило по умолчанию для новых файлов в этом каталоге.
  • Просмотр прав: getfacl /opt/deploy/
  • Удаление конкретной записи: setfacl -x u:jenkins /opt/deploy/
  • Удаление всех ACL: setfacl -b /opt/deploy/

Практическое применение в DevOps:

  1. Доступ для сервисных пользователей: Веб-серверу (www-data) может требоваться доступ на запись в каталог загрузок, принадлежащий другому пользователю, без изменения владельца или основной группы файла.
  2. Совместная работа в каталогах: Несколько разработчиков или CI/CD-агентов (Jenkins, GitLab Runner) могут иметь разные права в общем рабочем каталоге.
  3. Более тонкое управление, чем sudo: Вместо выдачи полного sudo можно дать через ACL право на запись в конкретный системный конфиг.

Важно: Файловая система должна быть смонтирована с опцией acl (по умолчанию в ext4, xfs). Проверить можно командой tune2fs -l /dev/sda1 | grep "Default mount options".

Ответ 18+ 🔞

А, слушай, вот тема, которая в админской жизни постоянно всплывает, как неотмываемое пятно на белой футболке. ACL, списки контроля доступа. Ну, стандартные права — это, конечно, классика, user/group/others, но они порой тупые, как пробка, понимаешь? Как будто на дворе 2002-й год, и у тебя в системе всего три человека. А на деле? Сервисов, пользователей, скриптов — овердохуища. Вот тут ACL и выручает, потому что позволяет навесить права буквально на кого угодно и сколько угодно.

Основные команды, без которых ты просто мартышлюшка:

  • Навесить права: setfacl -m u:jenkins:rwx,d:u:jenkins:rwx /opt/deploy/
    • -m — это модифицировать, то есть "вмандить" новые правила.
    • u:jenkins:rwx — вот тут мы говорим: "Слушай, чувак jenkins, вот тебе права читать, писать и запускать, делай что хочешь".
    • d:u:jenkins:rwx — а это, ёпта, магия! Правило по умолчанию. Любой новый файл в этой папке автоматом получит такие же права для Дженкинса. Красота же!
  • Посмотреть, что наворотил: getfacl /opt/deploy/. Откроется вся подноготная, кто и что может.
  • Удалить конкретного нахлебника: setfacl -x u:jenkins /opt/deploy/. Всё, отозвали пропуск у этого пидараса шерстяного.
  • Устроить тотальную зачистку: setfacl -b /opt/deploy/. Просто выносит все ACL-правила к хуям. Чисто, как у младенца.

Где это в работе пригождается, а?

  1. Доступ для сервисных уродов: Вот сидит у тебя веб-сервер www-data, и ему надо писать в каталог загрузок, который принадлежит другому юзеру. Менять владельца — геморрой, давать права всем (others) — терпения ноль, ебать. ACL решает всё одним махом: дал права только www-data и спи спокойно.
  2. Совместная работа в одной папке: Представь, несколько разработчиков или этих... CI/CD-агентов (Jenkins, GitLab Runner) копошатся в одном месте. Одному — читать, другому — писать, третьему — только смотреть. ACL позволяет развести их по углам, чтобы не бздели и не мешали друг другу.
  3. Альтернатива вседозволенному sudo: Вместо того чтобы давать человеку sudo на всё, что шевелится (а это доверия ебать ноль), можно через ACL разрешить ему писать только в один конкретный конфиг. Безопаснее и спокойнее.

Но, внимание, важный момент, про который все забывают! Файловая система должна это поддерживать, быть смонтирована с опцией acl. В современных (ext4, xfs) обычно так и есть, но проверить — святое дело. Команда tune2fs -l /dev/sda1 | grep "Default mount options" тебе в помощь. Если опции acl нет — сам от себя охуеешь, когда ничего не заработает. Так что сначала проверь, а потом уже взъёбывайся с настройками.