- Системное администрирование Linux
- Новый ресурс
- Просмотр прав доступа
- Управление доступом
- Права по умолчанию
- Рекурсивная установка прав
- Удаление прав
- Очистка правил
- Эффективная маска
- Access Control Lists (Русский)
- Установка
- Включение ACL
- Использование
- Изменение ACL
- Просмотр ACL
- Примеры
- Вывод команды ls
- Права на выполнение личных файлов
- Смотрите также
Системное администрирование Linux
Для создания прав доступа к файлам Samba ресурса сервера используйте ACL (Access Control List — список контроля доступа). При помощи ACL вы можете установить доступ к файлам определенным группам, либо конечным пользователям.
Новый ресурс
Для примера допустим у вас в системе есть две группы admins и managers, а также два пользователя alexei и petr.
Создадим директорию Managers для доступа на чтение и запись пользователям, входящим в группу managers.
setfacl -m d:g:managers:rwx,g:managers:rwx Managers
Первая команда создаст директорию с правами чтения выполнения и изменения содержимого для пользователя root.
Второй командой мы установим те же права для пользователей группы managers.
Файлы и директории, создаваемые пользователями этой группы, либо root-ом, будут наследовать атрибуты доступа.
Просмотр прав доступа
Увидеть права доступа из консоли можно выполнив команду:
Программа выведет следующий текст:
# owner: root # group: root user::rwx group::--- group:managers:rwx mask::rwx other::--- default:user::rwx default:group::--- default:group:managers:rwx default:mask::rwx default:other::---
Управление доступом
Для управлением доступом используется команда setfacl.
Для модификации или добавления правила используется параметр -m.
Если пользователь пропущен, то права назначаются владельцу файла.
Если группа пропущена, то права назначаются группе-владельцу файла.
Добавить право на чтение/запись файла secretinfo пользователям alexei и petr:
setfacl -m user:alexei:rw,u:petr:rw secretinfo
Права по умолчанию
Для директорий можно указать ACL права, которые будут автоматически добавляться для файлов и директорий, создаваемых в ней.
Для этого используется идентификатор default или параметр -d. На саму директорию права указанные в default не распространяются.
Для файлов и директорий, создаваемых в директории managerdata, добавить право чтение/записи для пользователя petr.
setfacl -m default:user:iivanov:rw managerdata
Рекурсивная установка прав
Для установки прав для всех файлов и директорий внутри директории используется параметр -R.
Так как для того, чтобы читать файл необходимы права на чтение r, а для того чтобы читать директорию необходимы права на чтение и выполнение rx, то можно при указании прав вместо х указывать X.
Флаг X устанавливает права на выполнение только для директорий и файлов, которые уже имеют право на выполнение.
Флаг X вычисляется на момент запуска setfacl, поэтому в default правилах она интерпретируется как x.
Разрешить пользователю alexei читать все файлы и просматривать директории в folder.
setfacl -R -m d:u:alexei:rwx,u:apetrov:rwX folder
setfacl -R -m d:u:alexei:rw,u:apetrov:rwX folder
Обе команды имеют недостаток, который проявляется при создании новых файлов и директорий.
Разница в том, что в первом случае пользователь alexei получит право на выполнение всех новых файлов создаваемых в folder и вложенных директориях,
а во втором случае пользователь не сможет просматривать новые директории.
Удаление прав
Удалить права доступа к файлу secretfile для пользователя petr.
setfacl -x u:petr secretfile
Удалить права доступа ко всем файлам и директориям внутри folder для пользователя alexei.
setfacl -R -x u:alexei folder
Очистка правил
Для удаления всех ACL правил используется опция -b. Ее также можно использовать совместно с -m, для того, чтобы заместить права.
Удалить все ACL правила и разрешить пользователю petr читать secretfile.
setfacl -b -m u:petr:r secretfile
Эффективная маска
Эффективная маска используется для ограничения определенного действия для всех пользователей и групп описанных в ACL. То есть можно например запретить всем писать в файл установив эффективную маску r-x.
Иногда эффективная маска вычисляется автоматически (например при действии chmod, а также при создании файла, так как применяется права umask). Для отмены маски ее следует установить в значение rwx.
Порядок определения доступа к файлу
Может ли пользователь выполнить действие над файлом или директорией определяются следующим образом.
- Используются права владельца, если пользователь им является.
- Используются права, указанные конкретно для этого пользователя.
- Если действие разрешено хотя бы для одной из группы в которую входит пользователь.
- Если пользователь не входит ни в одну группу описанную в ACL, то используются права для other.
Access Control Lists (Русский)
Состояние перевода: На этой странице представлен перевод статьи Access Control Lists. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Списки управления доступом (Access Control Lists, ACL) — расширенный, более гибкий механизм прав доступа для файловых систем, разработанный как дополнение к стандартным правам доступа UNIX. ACL позволяет задавать права доступа к объектам на диске для пользователей и групп.
Установка
Пакет acl уже установлен, так как является зависимостью systemd.
Включение ACL
Для использования ACL файловая система должна быть смонтирована с опцией acl . Файл fstab позволяет настроить постоянное монтирование с данной опцией.
В некоторых файловых системах параметр монтирования acl включён по умолчанию. К таким файловым системам относятся Btrfs и Ext2/3/4. Следующая команда позволяет проверить раздел с файловой системой ext* на наличие параметра acl :
# tune2fs -l /dev/sdXY | grep "Default mount options:"
Default mount options: user_xattr acl
Убедитесь, что используемая по умолчанию опция не была переопределена. Об этом будет свидетельствовать параметр noacl в соответствующей строке файла /proc/mounts .
Задать параметры монтирования файловой системы по умолчанию можно командой tune2fs -o параметр раздел , например:
# tune2fs -o acl /dev/sdXY
Это очень удобно при работе с внешними дисками, поскольку такой диск будет монтироваться с опцией acl и на других Linux-машинах. В противном случае придётся редактировать файл /etc/fstab на каждой системе.
- acl используется как опция монтирования по умолчанию при создании файловой системы ext2/3/4. Это настраивается в файле /etc/mke2fs.conf .
- Параметры монтирования по умолчанию в /proc/mounts не указаны.
Использование
Изменение ACL
Для изменения прав ACL используется команда setfacl.
- Флаг —test позволяет вывести изменения прав доступа к файлу/каталогу без их реального применения (т.н. dry-run).
- Флаг -R / —recursive позволяет применять действия рекурсивно.
Задать права пользователя (в качестве пользователь можно использовать имя пользователя или его ID):
# setfacl -m "u:пользователь:права"
Задать права группы (в качестве группа можно использовать имя группы или её ID):
# setfacl -m "g:группа:права"
Задать права для остальных:
# setfacl -m "other:права"
Настроить наследование новыми файлами и каталогами записей ACL родительского каталога (не относится к файлам/каталогам, которые копируются в каталог):
# setfacl -dm «запись_ACL»
Удалить определённую запись ACL:
# setfacl -x "запись_ACL"
Удалить записи по умолчанию:
The factual accuracy of this article or section is disputed.
Reason: Оригинальное замечание об опции —mask (взятое из setfacl(1) ) было признано неточным, но новый вариант также, судя по всему, неверен. Подробности см. по ссылке на обсуждение. (Discuss in Talk:Access Control Lists#ACL mask entry)
Примечание: По умолчанию setfacl вычисляет значение маски ACL, если она не была задана явно флагом —mask . С помощью маски задаются максимальные права, которые могут быть даны пользователю (не владельцу) или группе. Если маска не задаётся явно, то ей присваивается значение прав «группы по умолчанию». Например, предположим, что группа определённого каталога имеет права r-x . Если добавить ACL-пользователя или группу с правами rwx , то эффективными правами этого пользователя/группы применительно к данному каталогу будут r-x . Причина подобного поведения заключается в предотвращении «сюрпризов» при перемещении файлов из системы, не поддерживающей ACL, в систему с ACL.
Просмотр ACL
Вывести права доступа ACL:
Примеры
Установить все права доступа к файлу abc для пользователя johnny :
# file: abc # owner: someone # group: someone user::rw- user:johny:rwx group::r-- mask::rwx other::r--
Измененить права для пользователя johnny :
# file: abc # owner: someone # group: someone user::rw- user:johny:r-x group::r-- mask::r-x other::r--
# file: abc # owner: someone # group: someone user::rw- group::r-- other::r--
Вывод команды ls
Символ + (плюс) после прав доступа Unix в выводе команды ls -l указывает на использование ACL:
crw-rw----+ 1 root audio 14, 4 nov. 9 12:49 /dev/audio
getfacl: Removing leading '/' from absolute path names # file: dev/audio # owner: root # group: audio user::rw- user:solstice:rw- group::rw- mask::rw- other::---
Права на выполнение личных файлов
Ниже описано, как процесс вроде веб-сервера может получить доступ к файлам в домашнем каталоге пользователя без ущерба для безопасности.
Будем считать что веб-сервер работает от пользователя http и получает доступ к домашнему каталогу /home/geoffrey пользователя geoffrey .
Санчала предоставим права на выполнение для пользователя http :
# setfacl -m "u:http:--x" /home/geoffrey
Примечание: Права на исполнение для каталога позволяют процессу просматривать его содержимое.
Поскольку пользователь http теперь имеет доступ к файлам в /home/geoffrey то безопаснее будет удалить доступ для остальных пользователей:
Проверим изменения с помощью getfacl :
getfacl: Removing leading '/' from absolute path names # file: home/geoffrey # owner: geoffrey # group: geoffrey user::rwx user:http:--x group::r-x mask::r-x other::---
Как видно из вывода, other больше не имеют никаких прав, но пользователь http всё ещё может обращаться к файлам.
Если необходимо будет выдать пользователю http права доступа на запись в определённые файлы/каталоги, выполните:
# setfacl -dm "u:http:rwx" /home/geoffrey/project1/cache