Задать вопрос
Все статьи / Полезная информация / ACL в Linux: настройка прав доступа
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

ACL в Linux: настройка прав доступа

В 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 — возможно, они станут ключом к решению.

Предыдущая статья
Полезная информация
Следующая статья
Astra Linux настройка сети