- Что такое ACL
- Как работает ACL
- Linux ACL vs. Windows ACL
- Преимущества ACL
- Недостатки ACL
- Как устроены ACL
- Синтаксис ACL
- Основные команды для настройки ACL
- Основные опции для работы с ACL
- Дефолтные ACL
- Как использовать ACL на практике
- Рекомендации по настройке ACL
- Заключение
В Linux система разрешений по умолчанию ограничивается тремя категориями: владелец, группа и остальные пользователи. Этого бывает недостаточно, если нужно задать разные права для конкретных людей или отдельных групп. В таких случаях используется ACL — о нем мы и поговорим далее.
Что такое ACL
ACL (Access Control Lists — «списки управления доступом») — это механизм, который позволяет более гибко задавать права пользователей и групп по сравнению с традиционной системой разрешений Linux. С помощью ACL администратор может точно определить, кто и с каким уровнем доступа может работать с файлами, каталогами или сетевыми ресурсами.
Как работает ACL
ACL можно рассматривать как таблицу правил, которая определяет, какие действия разрешены или запрещены конкретным пользователям и группам. Каждому объекту в системе — будь то файл, каталог или сетевой ресурс — соответствует свой список доступа. В нем прописаны все пользователи, у которых есть права на этот объект, и указано, что они могут делать.
Когда пользователь обращается к файлу или каталогу, операционная система смотрит в ACL: есть ли у него право выполнить нужное действие (прочитать, изменить или запустить файл). Если правило позволяет — действие выполняется, если нет — доступ блокируется.
Есть два основных типа ACL:
Файловые ACL
Файловые списки доступа контролируют работу с файлами и каталогами. Они дают возможность выходить за рамки стандартной схемы «владелец — группа — остальные» и назначать точные права для отдельных пользователей или групп. Например, можно разрешить одному сотруднику только чтение определенной папки, не меняя общие права для остальных.
Типичные права включают:
- чтение содержимого файла или каталога;
- запись и изменение данных;
- выполнение файла как программы.
Подобная модель используется не только в Linux, но и в Windows NT/2000, Novell NetWare, OpenVMS и других UNIX-подобных системах.
В Linux чаще всего используются именно файловые ACL, потому что они:
- расширяют базовую модель разрешений;
- позволяют точечно настраивать доступ для конкретных пользователей и групп;
- могут применяться как к отдельным файлам, так и к целым каталогам, при этом правила могут наследоваться.
Сетевые ACL
В сетях ACL работают иначе — они устанавливаются на маршрутизаторах и коммутаторах и выполняют роль фильтров трафика. Каждое правило описывает, какие пакеты могут пройти, а какие должны быть заблокированы. Решение принимается на основе IP-адресов источника и назначения, портов и протоколов.
Раньше сетевые ACL были главным способом защиты сети — по сути, выполняли роль файрвола. Сегодня их используют вместе с современными межсетевыми экранами и VPN, чтобы узнавать, какой трафик должен быть зашифрован и передан через защищенный канал.
Linux ACL vs. Windows ACL
ACL есть и в Linux, и в Windows, но работают они немного по-разному.
В Linux ACL встроены в файловую систему и позволяют очень гибко управлять правами. Администратор может назначить доступ отдельным пользователям или группам, а при необходимости даже внести изменения в ядро. Они предлагают широкие возможности, но требуют технических знаний и опыта, особенно в случае поддержки рабочих серверов.
В Windows ACL тоже встроены в систему безопасности, но здесь акцент сделан на удобстве. Права доступа можно настроить сразу через графический интерфейс. Система менее гибкая, чем Linux, зато более предсказуемая и проще в использовании.
Различается и работа с обновлениями. В Windows патчи выпускает только Microsoft. В Linux обновления можно получать как от коммерческих поставщиков дистрибутива, так и от сообщества.
Преимущества ACL
- Гибкость настроек. ACL позволяют назначать права доступа не только владельцу, группе и остальным пользователям, но и отдельным конкретным пользователям или дополнительным группам.
- Удобство при сложных сценариях. В больших командах или организациях не всегда удобно создавать отдельные группы для каждого случая. С помощью ACL можно быстро добавить или ограничить доступ для одного сотрудника, не затрагивая общую структуру прав.
- Наследование правил. При работе с каталогами можно задать ACL, которые будут автоматически применяться ко всем создаваемым внутри файлам и подкаталогам.
- Совместимость со стандартной моделью прав. ACL не заменяют классические разрешения Linux, а расширяют их. То есть системы и программы, которые не поддерживают ACL, все равно будут корректно работать с базовыми правами.
- Тонкий контроль безопасности. Возможность четко указывать, кто и что может делать с файлом или директорией, позволяет снизить вероятность несанкционированного доступа.
Недостатки ACL
- Сложность управления. Чем больше пользователей и правил, тем труднее контролировать настройки и отслеживать, у кого какие права.
- Риск ошибок. При большом количестве записей легко допустить неточность, которая может либо ограничить доступ нужному человеку, либо наоборот открыть его тем, кому он не предназначался.
- Особенности администрирования. Для настройки и поддержки ACL нужен внимательный и опытный администратор.
- Сложность отладки. Если доступ работает не так, как ожидалось, разобраться в цепочке правил ACL бывает непросто, особенно при наложении стандартных прав и расширенных списков.
Как устроены ACL
В Linux у каждого файла и каталога может быть свой ACL. Этот список состоит из записей, каждая из которых задает права для конкретного пользователя или группы.
Выделяют три основных типа записей:
- Пользовательские определяют права для конкретного пользователя, отличного от владельца файла.
- Групповые записи — задают права для определенной группы пользователей.
- Для остальных — описывают права для всех остальных пользователей, которые не подпадают под предыдущие категории.
Каждая запись содержит набор разрешений, который аналогичен стандартным правам Linux:
- r (read) — чтение;
- w (write) — запись или изменение;
- x (execute) — выполнение файла или доступ к каталогу.
Таким образом, ACL расширяют привычную модель разрешений и позволяют более точно контролировать, кто и как может работать с файлами и папками.
Синтаксис ACL
В Linux для работы с ACL чаще всего используются две команды:
- setfacl — добавляет или меняет права;
- getfacl — показывает, какие правила уже установлены.
Например, посмотрим права для файла report.txt:
getfacl report.txt
Результат может быть таким:
# file: report.txt
# owner: alex
# group: editors
user::rw-
user:maria:r--
group::r--
mask::r--
other::---
В выводе видно, что владелец файла — alex — может читать и менять его, а у пользователя maria есть доступ только на чтение. Группа editors тоже может читать его, а для всех остальных доступ закрыт.
То есть getfacl показывает текущее состояние, а с помощью setfacl можно при необходимости добавить новое правило — например, открыть доступ еще одному пользователю.
Основные команды для настройки ACL
Команда | Описание | Что нужно заменить |
setfacl -m "u:user:permissions" /path/to/file | Добавляет права для конкретного пользователя | user — имя пользователя; permissions — r, w, x; /path/to/file — путь к файлу |
setfacl -m "g:group:permissions" /path/to/file | Добавляет права для группы пользователей | group — имя группы; permissions — r, w, x; /path/to/file — путь к файлу |
setfacl -dm "entry" /path/to/dir | Включает наследование ACL в каталоге | entry — правило (например, u:user:rw); /path/to/dir — путь к каталогу |
setfacl -x "entry" /path/to/file | Удаляет конкретное правило ACL | entry — запись (например, u:user:rw); /path/to/file — путь к файлу |
setfacl -b /path/to/file | Удаляет все ACL, оставляя только стандартные права | /path/to/file — путь к файлу или каталогу |
Основные опции для работы с ACL
Опция | Описание |
-m | Изменяет или добавляет запись ACL для пользователя или группы |
-x | Удаляет указанные параметры ACL |
-b | Удаляет все записи ACL |
--set и --set file | Полностью заменяют действующие права ACL на новые, которые указаны в команде или в файле |
-n | Не изменяет текущую маску ACL |
-mask | Пересчитывает маску ACL |
-k | Удаляет дефолтные записи ACL (для директорий) |
-d | Вносит дефолтные записи ACL (для директорий) |
-r | Рекурсивно применяет записи ACL ко всем файлам и каталогам |
-restore=file | Восстанавливает ACL из файла с резервной копией |
Дефолтные ACL
Помимо обычных ACL, в Linux можно использовать дефолтные. Они задаются для каталогов и работают как шаблон: все новые файлы и подкаталоги, созданные внутри, автоматически наследуют эти правила. Это удобно, если нужно сразу настроить единые права для будущих объектов, не изменяя их вручную каждый раз.
Чтобы назначить такие права, используется префикс d:. Например, если нужно, чтобы группа editors по умолчанию имела права на чтение и запись ко всем новым файлам и каталогам внутри projects, команда будет такой:
setfacl -m d:g:editors:rw projects
В итоге каждый новый объект внутри каталога projects получит доступ для группы editors.
Как использовать ACL на практике
Ранее в статье мы уже брали группу editors в качестве примера. А теперь разберем более глобальный сценарий, когда эта группа используется для совместной работы над проектом.
Представим, что у нас есть каталог /projects, в котором хранится весь рабочий контент редакторов: статьи, иллюстрации, черновики и прочие материалы. Задача администратора — правильно организовать доступ к этому каталогу:
- у группы editors должны быть полные права на чтение и изменение файлов;
- пользователь maria может только читать материалы, но не редактировать;
- у остальных пользователей системы вообще не должно быть доступа;
- все новые файлы и каталоги, которые создаются внутри /projects, автоматически получают эти правила, чтобы не приходилось вручную их дублировать.
Шаг 1. Настройка базовых прав каталога
Для начала ограничим доступ для посторонних, оставив его только владельцу и группе:
chmod 770 /projects
Каталог станет доступен только владельцу и группе, все остальные пользователи к нему не имеют доступа.
Шаг 2. Добавление индивидуального правила для пользователя
Назначим пользователю maria доступ только на чтение:
setfacl -m u:maria:r-- /projects
Теперь maria сможет просматривать содержимое, но не сможет изменять файлы или добавлять новые.
Шаг 3. Назначение прав группе editors
Дадим участникам группы editors возможность читать и изменять файлы:
setfacl -m g:editors:rw /projects
Шаг 4. Настройка дефолтных ACL для наследования
Чтобы новые файлы и каталоги внутри /projects автоматически получали те же права, зададим дефолтные ACL:
setfacl -d -m g:editors:rw /projects
setfacl -d -m u:maria:r-- /projects
Если кто-то из редакторов создаст новый файл, он сразу будет доступен всей группе, а maria сможет его прочитать, но не редактировать.
Шаг 5. Проверка результата
Проверим текущие права с помощью getfacl:
getfacl /projects
Вывод может быть следующим:
# file: projects
# owner: alex
# group: editors
user::rwx
user:maria:r--
group::rw-
mask::rw-
other::---
default:user::rwx
default:user:maria:r--
default:group:editors:rw-
default:mask::rw-
default:other::---
Из него можно выяснить, что владелец каталога — пользователь alex, и у него полный доступ. У группы editors есть права на чтение и запись, а пользователь maria может только просматривать файлы. Для остальных пользователей доступ полностью закрыт.
Кроме того, в выводе видны дефолтные ACL, которые гарантируют, что такие же права будут применяться ко всем новым файлам и подкаталогам внутри каталога.
Шаг 6. Удаление ненужных ACL
Если в будущем необходимость в таких настройках отпадет, все можно отменить. Например, чтобы убрать дефолтные ACL из каталога /projects:
setfacl -k /projects
А чтобы полностью сбросить все ACL и оставить только стандартные права Linux:
setfacl -b /projects
Рекомендации по настройке ACL
ACL позволяют точно управлять доступом, но при неаккуратной настройке система быстро становится запутанной. Как этого избежать:
- Сначала — базовые права, потом ACL. В первую очередь настройте стандартные разрешения через chmod, а уже потом добавляйте ACL.
- Используйте группы, а не только отдельных пользователей. Если нескольким людям нужны одинаковые права, лучше объединить их в группу и настроить ACL на нее. Это сократит количество записей и облегчит администрирование.
- Применяйте дефолтные ACL для каталогов. Если нужно, чтобы новые файлы автоматически наследовали права, настройте правила с префиксом d:. Так вам не нужно будет вручную назначать доступ к каждому объекту.
- Не злоупотребляйте количеством правил. Чем больше записей ACL, тем выше риск ошибок и труднее разбираться в конфигурации. Старайтесь держать список правил максимально простым.
- Регулярно проверяйте права. Используйте getfacl, чтобы убедиться, что все настройки работают так, как задумано, и не появилось лишних разрешений.
- Документируйте настройки. Если проект большой, фиксируйте правила ACL в документации или храните резервную копию с помощью getfacl -R /path > backup.acl. Восстановить их можно через setfacl --restore=backup.acl.
- Помните о безопасности. ACL не заменяют полноценные средства защиты, такие как файрволы или SELinux. Используйте их в комплексе, а не как единственный инструмент контроля доступа.
- Не усложняйте без необходимости. В небольших командах или на одноразовых проектах достаточно стандартной схемы прав. В ACL есть смысл тогда, когда базовой модели уже не хватает.
Грамотно настроенные ACL позволяют гибко управлять доступом и при этом не перегружать систему сложными правилами. Главное — применять их там, где действительно нужна тонкая настройка, и всегда держать под контролем, кто и что может делать с файлами.
Заключение
ACL расширяют стандартную модель прав в Linux и позволяют задавать доступ на уровне отдельных пользователей и групп без изменения базовых настроек.
Хотя использование ACL может усложнить отладку и диагностику, их гибкость оправдывает эти трудности. Возможности зависят от файловой системы, и современные файловые системы, как правило, уже по умолчанию поддерживают ACL. Эффективнее всего использовать их вместе с продуманной структурой каталогов, где доступ распределяется исходя из ролей и задач — например, отдельный каталог для отдела продаж и другой для маркетинга.
Наиболее заметную пользу ACL приносят в крупных инфраструктурах: на файловых серверах, где сотни пользователей работают с тысячами ресурсов и права доступа нужно настраивать максимально точно. Если в вашей системе есть сложности с управлением доступом или возникают непонятные ошибки прав, стоит подумать об использовании ACL — возможно, они станут ключом к решению.