Что такое acl linux

Access Control Lists (Русский)

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

Contents

Установка

Пакет acl уже установлен, так как является зависимостью systemd.

Включение ACL

Для использования ACL файловая система должна быть смонтирована с опцией acl . Файл fstab позволяет настроить постоянное монтирование с данной опцией.

В некоторых файловых системах параметр монтирования acl включён по умолчанию. К таким файловым системам относятся Btrfs и Ext2/3/4. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра acl :

Убедитесь, что используемая по умолчанию опция не была переопределена. Об этом будет свидетельствовать параметр noacl в соответствующей строке файла /proc/mounts .

Задать параметры монтирования файловой системы по умолчанию можно командой tune2fs -o параметр раздел , например:

Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией acl и на других Linux-машинах. В противном случае придётся редактировать файл /etc/fstab на каждой системе.

Использование

Изменение ACL

Для изменения прав ACL используется команда setfacl.

Задать права пользователя (в качестве пользователь можно использовать имя пользователя или его ID):

Задать права группы (в качестве группа можно использовать имя группы или её ID):

Задать права для остальных:

Настроить наследование новыми файлами и каталогами записей ACL родительского каталога (не относится к файлам/каталогам, которые копируются в каталог):

Удалить определённую запись ACL:

Удалить записи по умолчанию:

Удалить все записи ACL:

The factual accuracy of this article or section is disputed.

Просмотр ACL

Вывести права доступа ACL:

Примеры

Установить все права доступа к файлу abc для пользователя johnny :

Измененить права для пользователя johnny :

Удалить все записи ACL:

Вывод команды ls

Символ + (плюс) после прав доступа Unix в выводе команды ls -l указывает на использование ACL:

Права на выполнение личных файлов

Ниже описано, как процесс вроде веб-сервера может получить доступ к файлам в домашнем каталоге пользователя без ущерба для безопасности.

Будем считать что веб-сервер работает от пользователя http и получает доступ к домашнему каталогу /home/geoffrey пользователя geoffrey .

Санчала предоставим права на выполнение для пользователя http :

Поскольку пользователь http теперь имеет доступ к файлам в /home/geoffrey то безопаснее будет удалить доступ для остальных пользователей:

Проверим изменения с помощью getfacl :

Как видно из вывода, other больше не имеют никаких прав, но пользователь http всё ещё может обращаться к файлам.

Если необходимо будет выдать пользователю http права доступа на запись в определённые файлы/каталоги, выполните:

Источник

Читайте также:  Windows system32 host exe

Что такое acl linux

Рисунок 9.1, «Минимальный ACL: Сравнение записей ACL с битами доступа» и Рисунок 9.2, «Расширенный ACL: Сравнение записей ACL с битами доступа» соответствуют минимальному и расширенному ACL. На рисунках изображены три блока: левый показывает тип спецификации записей ACL, центральный отображает пример ACL, и правый блок соответствует битам доступа традиционной концепции привилегий (отображаемым, например, командой ls -l ). В обоих случаях привилегии класса владелец отображаются на запись ACL « владелец » . Привилегии класса другие отображаются на соответствующую запись ACL. Однако отображение прав доступа класса группа отличается для каждого из случаев.

Рисунок 9.1. Минимальный ACL: Сравнение записей ACL с битами доступа

В случае минимального ACL — без маски — права доступа группы отражаются на запись ACL группа-владелец, как показывает Рисунок 9.1, «Минимальный ACL: Сравнение записей ACL с битами доступа». В случае расширенного ACL— с маской — права доступа группы отображаются на маску, Рисунок 9.2, «Расширенный ACL: Сравнение записей ACL с битами доступа».

Рисунок 9.2. Расширенный ACL: Сравнение записей ACL с битами доступа

Это отображение используется для упрощения взаимодействия с приложениями, избавляя от небходимости поддержки ACL приложением. Привилегии доступа, назначенные посредством битов доступа, задают верхний предел для всех « тонких настроек » , сделанных при помощи ACL. Изменение битов доступа отражается на ACL и наоборот.

9.4.2. Директория с ACL ¶

Вы можете получить доступ к ACL с помощью команд getfacl и setfacl . Использование этих команд показано в следующем примере.

Перед созданием директории используйте команду umask , чтобы задать биты доступа маскируемые при создании файлового объекта. Команда umask 027 устанавливает привилегии по умолчанию следующим образом: владелец получает полный доступ ( 0 ), группе запрещен доступ на запись ( 2 ), доступ остальным пользователям закрыт ( 7 ). В действительности umask маскирует соответствующие биты доступа или сбрасывает их. Подробности можно узнать на man странице umask .

mkdir mydir создает директорию mydir с привилегиями, установленными командой umask . С помощью ls -dl mydir можно определить правильность установки привилегий. Для данного примера вывод будет следующим:

Используя getfacl mydir , проверьте исходное состояние ACL. Будет отображена следующая информация:

Первые три строки вывода отображают имя, владельца и группу-владельца директории. Следующие три строки содержат три записи ACL: « владелец » , « группа-владелец » и « другие » . Фактически мы имеет дело с минимальным ACL и команда getfacl не дает дополнительной информации по сравнению с командой ls .

Измените ACL, разрешив доступ на чтение, запись и выполнение пользователю geeko и группе mascots командой:

Опция -m указывает setfacl изменить существующий ACL. Следующий за ней аргумент определяет записи ACL, которые будут изменены (можно указать несколько записей, разделяя из запятыми). Последняя часть определяет имя директории, к которой будут применены эти изменения. Используйте команду getfacl , чтобы узнать полученные ACL.

В дополнение к записям, созданным для пользователя geeko и группы mascots , была добавлена запись с маской. Эта запись была создана автоматически, таким образом, что все заданные права доступа будут применены. setfacl автоматически адаптирует существующие записи с масками к изменяемым битам. Это поведение можно изменить используя опцию -n . Маска определяет максимальные эффективные привилегии для класса « группа » , включая именованного пользователя, именованную группу и группу-владельца. Биты доступа класса « группа » , отображаемые командой ls , -dl mydir теперь соответствуют записи маска .

Читайте также:  Как изменить шлюз по умолчанию windows

Первый столбец вывода теперь содержит дополнительно знак + , указывая на существование расширенных ACL для этого элемента.

Согласно выводу команды ls , маска включает в себя доступ на запись. Традиционно эти биты означали бы, что группа-владелец ( project3 ) также имеет право на запись в директорию mydir . Однако эффективные права доступа соответствуют сочетанию прав заданных для группы-владельца и маски — r-x в нашем примере (Таблица 9.2, «Маскировка привилегий доступа»). Поэтому в отношении эффективных привилегий группы-владельца, даже после добавления дополнительных записей ACL, ничего не изменилось.

Измените значение маски с помощью команд setfacl или chmod . Например используйте chmod g-w mydir . ls -dl mydir покажет:

getfacl mydir даст следующий вывод:

После сброса бита доступа на запись для группы командой chmod , вывода команды ls достаточно, чтобы увидеть, что биты маски изменились: доступ на запись снова есть только у владельца mydir . Вывод getfacl подтверждает это. Он включает в себя комментарий для всех записей, в которых биты доступа не соответствуют реальным привилегиям из-за применения маски. Оригинальные права могут быть восстановлены в любое время командой chmod g+w mydir .

9.4.3. Директория с ACL по умолчанию ¶

Директории могут иметь ACL по умолчанию, которые являются специальной разновидностью ACL, определяющей права доступа, наследуемые объектами в этой директории при их создании. ACL по умолчанию влияет на поддиректории и файлы.

9.4.3.1. Действия ACL по умолчанию ¶

Существует два пути передачи ACL по умолчанию файлам и поддиректориям:

Поддиректория наследует ACL родительской директории как свои ACL по умолчанию и обычные ACL.

Файл наследует ACL по умолчанию как свои ACL.

Все системные вызовы, создающие объекты файловой системы, используют параметр режим , который определяет режим доступа к созданному объекту. Если родительская директория не имеет ACL по умолчанию, заданные umask биты доступа вычитаются из битов доступа параметра режим , а результат устанавливается созданному объекту. Если же ACL по умолчанию задан, биты доступа нового объекта соответствуют совпадающим частям параметра режим и разрешениям ACL по умолчанию. В этом случае umask не учитывается.

9.4.3.2. Применение ACL по умолчанию ¶

Следующие три примера показывают основные операции для директорий и ACL по умолчанию:

Добавить ACL по умолчанию существующей директории mydir :

Опция -d команды setfacl указывает setfacl выполнить изменения (опция -m ) для ACL по умолчанию.

Взглянем поближе на результат выполнения этой команды:

getfacl возвращает как ACL, так и ACL по умолчанию. ACL по умолчанию соответствуют строкам, начинающимся с default . Несмотря на то, что Вы передали команде setfacl только запись ACL по умолчанию для группы mascots , setfacl автоматически скопировала все остальные записи из ACL, чтобы создать валидный ACL по умолчанию. ACL по умолчанию не оказывают моментального влияния на доступ к объекту. Они вступают в игру при создании новых объектов. Эти новые объекты наследуют привилегии только от ACL по умолчанию своей родительской директории.

Читайте также:  Intel microcode linux что это

В следующем примере используйте команду mkdir , чтобы создать в mydir поддиректорию, которая унаследует ACL по умолчанию.

Как и ожидалось, вновь созданная директория mysubdir получила права доступа из ACL по умолчанию родительской директории. ACL директории mysubdir является точным отражением ACL по умолчанию директории mydir . Поддиректория передаст эти права вложенным в нее объектам и т.д.

Используйте touch для создания файла в директории mydir , например, touch mydir/myfile . ls -l mydir/myfile покажет:

Вывод getfacl mydir/myfile :

Если ACL по умолчанию и umask не накладывают никаких ограничений, touch при создании новых файлов использует режим со значением 0666 , создавая файлы с доступом на чтение и запись для всех (Раздел 9.4.3.1, «Действия ACL по умолчанию»). Также это означает, что все права доступа, которые не содержит значение режим будут удалены из соответствующих записей ACL. Несмотря на то, что записи для группы не были удалены из ACL, значение маски было модифицировано для маскировки прав не заданных значением режим .

Эта модель необходима для правильного взаимодействия приложений (например, компиляторов) с ACL. Вы можете создавать файлы с ограниченным доступом и затем помечать их как исполняемые. Механизм mask гарантирует, что только корректные пользователи и группы смогут запускать их как им заблагорассудится.

9.4.4. Алгоритм проверки ACL ¶

Алгоритм проверки применяется перед тем, как любому процессу или приложению будет предоставлен доступ к защищенному ACL объекту файловой системы. Основное правило проверки заключается в том, что записи ACL проверяются в следующем порядке: владелец, именованный пользователь, группа-владелец или именованная группа, другие пользователи. Доступ предоставляется в соответствии с записью, которая более подходит процессу. Привилегии не накапливаются.

Все усложняется, если процесс принадлежит более чем к одной группе и потенциально соответствует нескольким групповым записям. В этом случае из множества выбирается произвольная запись с требуемыми привилегиями. Неважно, какая из записей приведет к результату « доступ разрешен » . Аналогично, если ни одна из групповых записей не содержит требуемых привилегий, случайно выбранная запись приведет к конечному результату « доступ запрещен » .

9.5. Поддержка ACL приложениями ¶

ACL могут быть использованы для реализации очень сложных моделей привилегий, которые соответствуют требованиям современных приложений. Традиционная система привилегий и ACL могут эффективно сочетаться. Основные файловые команды ( cp , mv , ls , и т.д.) поддерживают ACL, равно как Samba и Konqueror.

К сожалению множество редакторов и файловых менеджеров до сих пор не поддерживает ACL. Например, копирование файлов с помощью Emacs приводит к потере ACL. При изменении файлов в редакторе ACL иногда сохраняются, а иногда нет, в зависимости от того способа, которым редактор создает резервные копии. Если редактор записывает изменения в оригинальный файл, ACL сохраняются. Если измененное содержание сохраняется в новый файл, который впоследствии получает имя оригинального файла, и сам редактор не поддерживает ACL, они могут быть потеряны. За исключением архиватора star в настоящее время не существует программ резервного копирования, сохраняющих ACL.

9.6. Дополнительная информация ¶

За подробной информацией об ACL обращайтесь в справку по командам getfacl(1) , acl(5) и setfacl(1) .

Источник

Оцените статью