- Debian 10. Расширенные права доступа к файлам (ACL)
- О системе прав ACL
- Подготовка системы к практике
- Работа с ACL
- Наследование ACL
- Маска ACL
- Access Control Lists (Русский)
- Contents
- Установка
- Включение ACL
- Использование
- Изменение ACL
- Просмотр ACL
- Примеры
- Вывод команды ls
- Права на выполнение личных файлов
- Наследование ACL
- Re: Наследование ACL
- Re: Наследование ACL
- Наследование прав на файлы и папки в Linux
- Linux acl наследование прав
Debian 10. Расширенные права доступа к файлам (ACL)
О системе прав ACL
В статье предыдущем уроке мы познакомились с системой прав в Linux. Но может возникнуть ситуация, что к файлу с такими правами:
Нужно дать доступ пользователю admin с правами rw-, и пользователю user2 c правами r—.
Стандартная система прав здесь не поможет. Для решения подобной задачи применяют ACL (Access Control List / списки контроля доступа). Во многих современных дистрибутивах эта система уже установлена и активна, в debian 10 в том числе.
ACL бывает 2-х типов:
- ACL прав доступа — определяет доступ к файлу или каталогу;
- ACL default — назначается только каталогу. Если в данном каталоге файлы не имеют собственного ACL, то они наследуют ACL родительского каталога при создании.
Подготовка системы к практике
Давайте для начала создадим трёх новых пользователей в системе:
Дальше под пользователем user1 создадим каталог test и в нем файл file1.txt:
Работа с ACL
Для начала установим систему acl, про установку дополнительных пакетов в систему поговорим позже, просто выполните:
Чтобы посмотреть acl права на файл или каталог используют команду getfacl:
Для данного файла acl пока не настроен.
Для установки acl прав используем команду setfacl:
- опция -m используется когда нужно модифицировать права;
- дальше если мы устанавливаем права для пользователя то ставим символ u, для группы будем использовать символ g;
- дальше после двоеточия имя пользователя;
- дальше после двоеточия права доступа для этого пользователя;
- и наконец указываем имя файла:
Вот как решается задача используя права acl:
При этом если мы посмотрим командой ls -l права, то заметим знак «+», который и указывает что файл имеет дополнительные acl права:
Для группы владельцев и всех остальных также можно установить acl права таким образом:
Для того чтобы удалить пользователя или группу из acl нужно использовать команду setfacl с опцией -x, например вот так:
Как видим у пользователя user2 не осталось acl прав к этому файлу. Таким же образом можем удалить группу:
Для того чтобы удалить все acl права с файла используем команду setfacl с опцией -b:
Наследование ACL
Теперь разберемся с acl default. Устанавливаются такие права только на каталог. Для установки таких прав используется команда setfacl с опцией -d:
Добавились новые поля default, которые определяют права по умолчанию для всех новых вложенных файлов в этом каталоге:
Права по умолчанию применяются только к вновь созданным или скопированным файлам. Выше я создал файл из под пользователя root, но пользователь admin получил к нему доступ, так как он указал в правах default этого каталога.
Маска ACL
Кроме прав доступа и прав по умолчанию в acl присутствуем маска. Маска говорит о максимально возможных назначенных правах для пользователей. Она вычисляется автоматически при добавлении пользователя. Т.е. мы можем одному пользователю дать права rw-, второму r—, маска при этом станет rw-.
Маску можно изменить командой setfacl -m m:права_доступа файл например:
Как мы видим права rw- перешли в r—. Использовать это можно, если мы дали различные права на файл разным пользователям, а затем всех решили ограничить, то можем просто поменять маску.
Рекурсивное назначение прав
Для установки рекурсивно прав на все файлы в каталоге и подкаталогах используется опция -R, её же можно использовать при удалении прав:
- Узнали про систему прав ACL.
- Узнали про acl default.
- Узнали про acl mask.
- Познакомились с командой getfacl для просмотра прав.
- Познакомились с командой setfacl для редактирования прав.
- Увидели как команда «ls -l» отображает файлы с установленными acl.
Оглавление курса доступно по ссылке.
Источник
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 права доступа на запись в определённые файлы/каталоги, выполните:
Источник
Наследование ACL
Есть такая проблема:
есть раздел на xfs, на котором лежат каталоги разных пользователей (не домашний). Требуется, чтобы все файлы, создаваемые одним пользователем в своем каталоге были доступны на запись и некоему другому пользователю, а остальным — только на чтение или вообще запрещены.
Можно, конечно, создать общую группу и поставить umask в значение, разрешающее запись для членов группы, но проблема в том, что все остальные пользователи _уже_ объединены в общей группе, и, значит, они тоже смогут писать в файлы.
Если быть более детальным, то это раздел предназначен для расчетов и научный руководитель хочет иметь права писать в файлы своих студентов. Понятно, что остальные пользователи машины, в общем, писать туда не должны. Но беда в том, что все пользователи, ведущие расчеты, уже объединены в группу, для которой дано несколько больше прав, чем всем остальным. Т.е. нужно еще более тонкое разделение прав. Пытаюсь реализовать это на уровне ACL, но пока не понимаю, как сделать так, чтобы некоторый лист прав доступа автоматически присваивался и вновь создаваемым файлам. (что-то вроде наследования прав в Винде).
Re: Наследование ACL
man setfacl -> default, Luke.
Re: Наследование ACL
Вы не совсем меня поняли. Я знаю, как поставить ACL на существующие файлы. Я хочу, чтобы все создаваемые _новые_ файлы имели ACL тот, который мне нужен, а не тот, который по умолчанию. _Наследование_ ACL, например от каталога, в котором этот файл расположен, работает?
Источник
Наследование прав на файлы и папки в Linux
На самом деле, речь в этой статье пойдёт не только о наследовании прав на файлы и каталоги в операционных системах семейства Linux. Однако наследование прав доступа будет первой и основной темой, которая будет здесь затронута.
Многие пользователи Windows в курсе, как работает система наследования прав. Суть её в том, что пользователи и группы будут иметь те же права на файлы и каталоги, которые они имели по отношению к родительскому каталогу. В Linux механизм наследования работает схожим образом и называется «правами по умолчанию». Несмотря на своё название, права по умолчанию вовсе не задаются автоматически. Их нужно прописать отдельно. Для примера используем каталог пользователя test:
-d указывает, что команда задаёт права по умолчанию, -m на редактирование прав.
Как видим на скриншоте, использование команды getfacl показало, что в свойствах каталога появились строчки, начинающиеся с default . Именно они и говорят нам о правах по умолчанию для владельца, ассоциированной группы и всех остальных. Не будем забывать, что ACL дозволяет установку прав доступа для отдельных пользователей и групп. Воспользуемся данной возможностью:
Этой командой мы дали пользователю tux те же права по умолчанию, что и у владельца каталога.
Для удаления прав по умолчанию используется команда
Если нужно удалить права по умолчанию и в подкаталогах, то добавьте ключ -R , указывающий на рекурсивное действие:
Кроме наследования прав есть и другие особенности ACL, которые будет полезно рассмотреть. Первым делом рассмотрим сохранение (или нет) ACL-прав при операциях над файлами и папками:
- перемещение файлов и каталогов сохраняет ACL-доступы;
- копирование файлов и каталогов не сохраняет ACL-доступы, если не использован ключ -p ;
- архивирование и распаковка должны проводиться утилитой star (вместо tar).
Как видим, логика операций здесь довольно проста.
Другой интересной возможностью в работе с ACL-правами доступа будут так называемые автоматические операции.
Первой из таких операций является перенос ACL-прав. Это значит, что мы снимаем ACL-права с одного объекта и придаём их другому. Ранее мы рассматривали файл file_test в каталоге /home/test/. Перенесём ACL-доступы с него на файл file_test2 командой
На скриншоте выше можно наблюдать права на файл file_test2 до и после применения команды по переносу ACL-прав.
Если же нужно не перенести, а скопировать ACL-права с одного объекта на другой, то здесь поможет другая команда:
Эта команда не заменит права, как предыдущая, а добавит их к уже существующим.
Еще одним неплохим приемом может стать копирование ACL-прав на каталог в права по умолчанию этого же каталога. По сути, это то же самое, что мы провернули в начале статьи. Вот только тогда мы могли задать любые другие права по умолчанию. А вот если нам надо именно скопировать текущие права, то будет проще воспользоваться следующей командой:
Здесь dir1 и dir2 являются каталогами, между которыми мы копируем права по умолчанию.
Источник
Linux acl наследование прав
В предыдущих статьях был рассмотрен способ установки файлового сервера Samba в кластере и установка прав доступа на отдельные папки используя «классический» метод. Но данный метод не всегда удобен, особенно если папок на сервере много и требуется весьма разветвленная структура доступа. Весьма затруднительно вносить каждую папку, на которую требуется наложить какие-либо ограничения, в файл конфигурации сервера. Да и делегировать административные права на управление доступом гораздо проще используя другой метод. Таким методом является ACL.
Как обычно все работы будут проводиться на ОС Rosa Enterprise Linux Server 7.3 (RELS 7.3), он же CentOS 7.3, он же RedHat 7.3.
- smb.rpn.int — файловый сервер Samba
- otd1 — первое подразделение компании
- otd2 — второе подразделение компании
- unit1 — папка первого подразделения
- unit2 — папка второго подразделения
- share — общая папка всех подразделений.
Задача: организовать доступ к папкам таким образом:
- Пользователи из otd1 имели полный доступ к папке unit1, но не имели доступ к папке unit2
- Пользователи из otd2 имели полный доступ к папке unit2, но не имели доступ к папке unit1
- Все пользователи имеют полный доступ к папке share
- Все пользователи имеют право просматривать структуру корневой папки
В предыдущей статье рассказывалось о том, как организовать такой доступ, используя стандартные настройки Samba. Сейчас же рассмотрим более «продвинутый» метод — ACL.
Стандартные команды работы с ACL — setfacl и getfacl — подробно описаны в руководстве, поэтому здесь мы ограничимся примерами.
Для работы ACL необходимо включить поддержку этого функционала при монтировании файловой системы. Когда мы подключали кластерную файловую систему к кластеру, мы это предусмотрели:
Т.е. в параметре монтирования указываем опцию acl . Если мы не используем кластерную файловую систему, а работаем с выделенным сервером, то эта опция указывается в файле, описывающим смонтированные устройства ( /etc/fstab ). Например:
Проверить поддерживает ли раздел работу с ACL можно попыткой установить список доступа на этот раздел. Например:
Operation not supported говорит о том, что поддержка ACL не была включена и необходимо ее задействовать.
Т.к. сервер в данном примере работает в домене FreeIPA, то в первую очередь создаем несколько групп:
- fs_users — в данную группу будут входить все пользователи, имеющие право заходить на файловый сервер, и которым будет доступен листинг корневых папок ресурса
- fs_admins — группа пользователей, которым будут доступны все папки на сервере и которые смогут редактировать (настраивать) ACL непосредственно из файлового менеджера без доступа в консоль сервера.
- otd1 — пользователи первого подразделения
- otd2 — пользователи второго подразделения
Далее на диске, который будет использоваться для файлового сервера создаем структуру папок:
Где FS_Share — точка монтирования диска. Далее назначаем хозяина папок и раздаем права:
Т.е. мы назначаем группу владельца файлов и папок fs_admins и разрешаем доступ с правом чтения-записи всем пользователям, принадлежащим этой группе.
Права 2770 гарантируют, что все файлы и подпапки, находящиеся в них, будут всегда создаваться с соответствующими подгруппами этих родительских папок. Немного изменим права доступа на корневую папку:
Далее настраиваем доступ к корневой общей папке и включаем ACL в конфигурации Samba:
Перезапускаем сервер Samba с новыми настройками:
В итоге на сервере появилась общая папка SHARE , в которую имеют доступ пользователи, входящие в группу fs_admins .
Остается настроить права доступа на все папки общего ресурса. Для этого переходим в консоль сервера и начинаем настройку.
Устанавливаем права просмотра содержимого корневого каталога для всех пользователей, входящих в группу fs_users (в отличии от групп Samba в группы домена FreeIPA могут входить другие группы. Т.е. в нашем случае в группу fs_admins входят группы подразделений otd1 и otd2 ):
Устанавливаем полный доступ для пользователей группы otd1 на папку и все последующие папки unit1 :
Устанавливаем полный доступ для пользователей группы otd2 на папку и все последующие папки unit2 :
Посмотреть права доступа можно выполнив следующую команду:
Т.е. мы видим, что в данную папку разрешен полный доступ группе otd2. Всем остальным доступ запрещен.
То же самое можно посмотреть для остальных папок.
В итоге мы добились поставленной цели: все пользователи могут читать структуру корневого каталога. Пользователь имеет полный доступ в папку своего подразделения. Доступ пользователю в папку чужого подразделения запрещен.
Особенности и ограничения.
Наиболее часто встречающиеся опции star :
Опция | Описание |
---|---|
-c | Создаёт файл архива |
-n | Отключает извлечение файлов, используется в сочетании с -x для просмотра списка извлекаемых файлов. |
-r | Заменяет файлы в архиве. Файлы записываются в конец архива, заменяя любые файлы с тем же путём и именем. |
-t | Выводит содержимое файла архива. |
-u | Обновляет файл архива. Файлы записываются в конец архива, если их ещё не было в архиве или если они новее, чем файлы с тем же именем в архиве. |
-x | Извлекает файлы из архива. Если используется с ключом -U и файл в архиве старее, чем соответствующий файл в файловой системе, такой файл не извлекается. |
-help | Выводит наиболее важные параметры. |
-xhelp | Выводит менее важные параметры. |
-/ | Оставляет ведущую косую черту в имени файла при извлечении файлов из архива. По умолчанию она убирается. |
-acl | При создании архива или извлечении файлов, архивирует или восстанавливает все ACL , связанные с файлами или каталогами. |
Пример для архивирования утилитой star с сжатием:
Пример для разархивирования в текущий каталог:
Источник