Контроль доступа для linux

Фундаментальные основы Linux. Часть VIII. Механизмы безопасной работы с файлами

Глава 32. Списки контроля доступа

Стандартных прав доступа Unix может быть недостаточно в случае развертывании систем в некоторых организациях. В данной главе описываются списки контроля доступа ( access control lists или acls ), предназначенные для дополнительной защиты файлов и директорий от несанкционированного доступа.

Параметр acl в файле /etc/fstab

Утилита getfacl

Утилита setfacl

Запись или модификация списков контроля доступа может осуществляться с помощью утилиты /usr/bin/setfacl . В примерах ниже показана методика модификации списка контроля доступа к файлу с именем file33 с помощью утилиты setfacl .

Удаление элемента списка контроля доступа

Обратите внимание на то, что в случае указания элемента списка контроля доступа к файлу без использования символа u (указывающего на соответствие учетной записи пользователя) или g (указывающего на соответствие группе пользователей), по умолчанию будет рассматриваться элемент списка контроля доступа к файлу , соответствующий учетной записи пользователя.

Удаление всего списка контроля доступа

Маска прав списка контроля доступа

Маска прав списка контроля доступа описывает максимальные эффективные права доступа для любого из элементов этого списка . Данная маска рассчитывается каждый раз, когда вы используете утилиту setfacl или chmod .

Приложение eiciel

Пользователи настольных систем могут отдать предпочтение приложению eiciel , которое является инструментом с графическим интерфейсом для управления списками контроля доступа .

Источник

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 права доступа на запись в определённые файлы/каталоги, выполните:

Источник

Механизмы безопасности в Linux

В данной статье я проведу краткий экскурс в наиболее распространенные средства, связанные с безопасностью Linux. Информация предоставлена в сжатом виде, и если какое-то средство вас заинтересует, можно пройтись по ссылкам и прочитать более подробно. По заявкам пользователей некоторые механизмы можно будет рассмотреть более подробно в последующих статьях.

Читайте также:  Как установить все обновления для windows

Будут рассмотрены следующие средства: POSIX ACL, sudo, chroot, PAM, SELinux, AppArmor, PolicyKit. Виртуализация, хотя и относится в какой-то мере к средствам безопасности, рассматриваться не будет, тем более что это отдельная обширная тема.

POSIX ACL

Описание: Разграничение прав доступа к файлам на основе их атрибутов (Discretionary Access Control, DAC).
Механизм работы: Система (в частности, менеджер файловой системы) считывает атрибуты файла, к которому обращается пользователь (или программа, работающая от имени какого-либо пользователя), и решает предоставлять ли доступ на основе этих атрибутов. При ошибке доступа приложению возвращается соответствующий код ошибки.
Пример использования: Чтобы запретить/разрешить доступ остальных пользователей к своему файлу, можно поменять его атрибуты через chmod, и поменять владельца/группу через chown и chgrp (либо использовать более общую команду setfacl). Текущие права доступа можно посмотреть через ls и getfacl.
Дополнительные ссылки: POSIX Access Control Lists on Linux, Расширенные ACL в Linux.

Описание: Выполнение программ от своего и/или чужого имени.
Механизм работы: При вызове команды sudo/sudoedit система считывает файл /etc/sudoers, и на его основе определяет какие команды может вызывать пользователь.
Пример использования: Вся конфигурация определяется в файле /etc/sudoers. Например, можно разрешать выполнять только определенные команды и только от определенного пользователя:
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
Данная строчка говорит о том, что пользователи, определенные в алиасе WEBMASTERS могут выполнять все команды от имени пользователя www, или делать su только в www.

chroot

Описание: Операция, ограничивающая доступ процесса к файловой системе, изменяя ее корень в контексте процесса.
Механизм работы: Запускает программу (по умолчанию /bin/sh) с контекстом, в котором переопределен корневой каталог файловой системы. Теперь все обращения вызванной программы не могут выйти за пределы корневого каталога (т.е. программа работает в весьма условной «песочнице»). Обойти данный механизм не составляет труда, особенно из под рута, так что это средство не рекомендуется для обеспечения безопасности. Настоящую песочницу сможет обеспечить только виртуализация.
Пример использования: Создается специальный каталог, в него копируется необходимое для работы окружение (также можно использовать команду mount —bind). Далее делается chroot на этот каталог, и запущенная программа работает только с предварительно подготовленным окружением. Для упрощения можно использовать различные jail-инструменты, доступные в дистрибутивах.

Описание: Подключаемые модули аутентификации.
Механизм работы: Программы, написанные с использованием PAM, обращаются к его библиотеке, которая уже собственно проводит процедуру аутентификации пользователя. При ошибке авторизации приложению возвращается соответствующий код ошибки.
Пример использования: PostgreSQL, Apache, Squid и другие программы (включая написанные вами) могут работать с учетными записями пользователей не через собственные конфигурационные файлы, а обращаться к PAM, тем самым обеспечивая различные варианты аутентификации — Kerberos, eTokens, биометрия и др. Естественно, это касается и самого Linux-а — можно входить не только вбивая пару логин/пароль.

SELinux

Контроль называется принудительным, когда применение контроля производится администраторами и системой, и не зависит от решения пользователей, как это происходит при обычном контроле доступа. [*]

Механизм работы: Для проверки прав доступа используется LSM-модуль ядра, которые проверяет политику безопасности приложения и сверяет его тип с контекстом безопасности используемых файлов (объектов). При ошибке доступа соответствующая запись добавляется в /var/log/audit/audit.log. Пользователь может получить нотификацию об этом через утилиту setroubleshoot.
Пример использования: В targeted-режиме SELinux позволяет апачу читать только определенные каталоги. Стандартный (для кого-то) путь сделать веб-сайт в домашнем каталоге и открыть его через симлинк в /var/www не пройдет процедуру проверки, т.к. SELinux проверяет контекст безопасности файлов, делая полное сканирование. Чтобы поменять контекст безопасности файла, необходимо использовать команду chcon (в данном случае, chcon -R -h -t httpd_sys_content_t /path/to/directory). Текущие контексты безопасности можно посмотреть через ls -Z.
Дополнительные ссылки: Анатомия SELinux.

AppArmor

Описание: Система упреждающей защиты, основанная на политиках безопасности (профилях).
Механизм работы: Для проверки прав доступа используется LSM-модуль ядра, который при запуске приложения проверяет наличие его профиля (/etc/apparmor.d), и если профиль существует, то ограничивает выполнение системных вызовов в соответствии с профилем. При ошибке доступа соответствующая запись добавляется в /var/log/audit/audit.log. Пользователь может получить нотификацию об этом через утилиту apparmor-notify.
Пример использования: С помощью команды aa-genprof можно создать профиль интересующего приложения, отработав в нем все необходимые use-case-ы. Далее полученный файл профиля можно модифицировать интересующим вас образом, сохранить в /etc/apparmor.d и активировать через aa-enforce.

PolicyKit

Описание: Средство контроля системных привилегий.
Механизм работы: При обращении приложения к сервису (любое обращение проходит как action), он проверяет через PolicyKit права доступа пользователя для данного action-а. В зависимости от политик доступ может быть запрещен, разрешен или требовать аутентификации. Отображение ошибок (или запрос пароля) должно на себя брать клиентское приложение.
Пример использования: Ubuntu при настройке сети позволяет просматривать всю информацию без запроса пароля (т.к. конфигурация PolicyKit разрешает чтение без авторизации), но когда необходимо настройки сохранить, то запрашивается пароль. Причем пользователю не даются рутовские права на всю систему, т.к. он работает только в пределах используемого сервиса.

Читайте также:  Установка windows внешним dvd приводом

Заключение

Естественно, есть и другие средства, связанные с безопасностью, не рассмотренные в данной статье. Однако все вышеперечисленное является стандартом де-факто для наиболее распространенных дистрибутивов, и если вы заботитесь о безопасности, желательно их знать.

Если у кого-то есть более релевантные ссылки на описание средств безопасности (на русском), пишите в комментарии. Также буду рад всем замечаниям и найденным неточностям.

Источник

Системы защиты Linux

Одна из причин грандиозного успеха Linux ОС на встроенных, мобильных устройствах и серверах состоит в достаточно высокой степени безопасности ядра, сопутствующих служб и приложений. Но если присмотреться внимательно к архитектуре ядра Linux, то нельзя в нем найти квадратик отвечающий за безопасность, как таковую. Где же прячется подсистема безопасности Linux и из чего она состоит?

Предыстория Linux Security Modules и SELinux

Security Enhanced Linux представляет собой набор правил и механизмов доступа, основанный на моделях мандатного и ролевого доступа, для защиты систем Linux от потенциальных угроз и исправления недостатков Discretionary Access Control (DAC) — традиционной системы безопасности Unix. Проект зародился в недрах Агентства Национальной Безопасности США, непосредственно разработкой занимались, в основном, подрядчики Secure Computing Corporation и MITRE, а также ряд исследовательских лабораторий.

Linux Security Modules

Линус Торвальдс внес ряд замечаний о новых разработках АНБ, с тем, чтобы их можно было включить в основную ветку ядра Linux. Он описал общую среду, с набором перехватчиков для управления операциями с объектами и набором неких защитных полей в структурах данных ядра для хранения соответствующих атрибутов. Затем эта среда может использоваться загружаемыми модулями ядра для реализации любой желаемой модели безопасности. LSM полноценно вошел в ядро Linux v2.6 в 2003 году.

Фреймворк LSM включает защитные поля в структурах данных и вызовы функций перехвата в критических точках кода ядра для управления ими и выполнения контроля доступа. Он также добавляет функции для регистрации модулей безопасности. Интерфейс /sys/kernel/security/lsm содержит список активных модулей в системе. Хуки LSM хранятся в списках, которые вызываются в порядке, указанном в CONFIG_LSM. Подробная документация по хукам включена в заголовочный файл include/linux/lsm_hooks.h.

Подсистема LSM позволила завершить полноценную интеграцию SELinux той же версии стабильного ядра Linux v2.6. Буквально сразу же SELinux стал стандартом де-факто защищенной среды Linux и вошел в состав наиболее популярных дистрибутивов: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Глоссарий SELinux

LSM и архитектура SELinux

Несмотря на название LSM в общем-то не являются загружаемыми модулями Linux. Однако также, как и SELinux, он непосредственно интегрирован в ядро. Любое изменение исходного кода LSM требует новой компиляции ядра. Соответствующая опция должна быть включена в настройках ядра, иначе код LSM не будет активирован после загрузки. Но даже в этом случае его можно включить опцией загрузчика ОС.

Стек проверок LSM

LSM оснащен хуками в основных функций ядра, которые могут быть релевантными для проверок. Одна из основных особенностей LSM состоит в том, что они устроены по принципу стека. Таким образом, стандартные проверки по-прежнему выполняются, и каждый слой LSM лишь добавляет дополнительные элементы управления и контроля. Это означает, что запрет невозможно откатить назад. Это показано на рисунке, если результатом рутинных DAC проверок станет отказ, то дело даже не дойдет до хуков LSM.

SELinux перенял архитектуру безопасности Flask исследовательской операционной системы Fluke, в частности принцип наименьших привилегий. Суть этой концепции, как следует из их названия, в предоставлении пользователю или процессу лишь тех прав, которые необходимы для осуществления предполагаемых действий. Данный принцип реализован с помощью принудительной типизации доступа, таким образом контроль допусков в SELinux базируется на модели домен => тип.

Благодаря принудительной типизации доступа SELinux имеет гораздо более значительные возможности по разграничению доступа, нежели традиционная модель DAC, используемая в ОС Unix/Linux. К примеру, можно ограничить номер сетевого порта, который будет случать ftp сервер, разрешить запись и изменения файлов в определенной папке, но не их удаление.

Основные компоненты SELinux таковы:

  • Policy Enforcement Server — Основной механизм организации контроля доступа.
  • БД политик безопасности системы.
  • Взаимодействие с перехватчиком событий LSM.
  • Selinuxfs — Псевдо-ФС, такая же, как /proc и примонтированная в /sys/fs/selinux. Динамически заполняется ядром Linux во время выполнения и содержит файлы, содержащие сведения о статусе SELinux.
  • Access Vector Cache — Вспомогательный механизм повышения производительности.


Схема работы SELinux

Все это работает следующим образом.

  1. Некий субъект, в терминах SELinux, выполняет над объектом разрешенное действие после DAC проверки, как показано не верхней картинке. Этот запрос на выполнение операции попадает к перехватчику событий LSM.
  2. Оттуда запрос вместе с контекстом безопасности субъекта и объекта передается на модуль SELinux Abstraction and Hook Logic, ответственный за взаимодействие с LSM.
  3. Инстанцией принятия решения о доступе субъекта к объекту является Policy Enforcement Server и к нему поступают данные от SELinux AnHL.
  4. Для принятия решения о доступе, или запрете Policy Enforcement Server обращается к подсистеме кэширования наиболее используемых правил Access Vector Cache (AVC).
  5. Если решение для соответствующего правила не найден в кэше, то запрос передается дальше в БД политик безопасности.
  6. Результат поиска из БД и AVC возвращается в Policy Enforcement Server.
  7. Если найденная политика согласуется с запрашиваемым действием, то операция разрешается. В противном случае операция запрещается.
Читайте также:  Какого объема ssd выбрать для windows 10

Управление настройками SELinux

SELinux работает в одном из трех режимов:

  • Enforcing — Строгое соблюдение политик безопасности.
  • Permissive — Допускается нарушение ограничений, в журнале делается соответствующая пометка.
  • Disabled — Политики безопасности не действуют.

Посмотреть в каком режиме находится SELinux можно следующей командой.

Изменение режима до перезагрузки, например выставить на enforcing, или 1. Параметру permissive соответствует числовой код 0.

Также изменить режим можно правкой файла:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing — SELinux security policy is enforced.
# permissive — SELinux prints warnings instead of enforcing.
# disabled — No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted — Targeted processes are protected,
# minimum — Modification of targeted policy. Only selected processes are protected.
# mls — Multi Level Security protection.

Разница с setenfoce в том, что при загрузке операционный системы режим SELinux будет выставлен в соответствии со значением параметра SELINUX конфигурационного файла. Помимо того, изменения enforcing disabled вступают в силу только через правку файла /etc/selinux/config и после перезагрузки.

Просмотреть краткий статусный отчет:

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Для просмотра атрибутов SELinux некоторые штатные утилиты используют параметр -Z.

По сравнению с обычным выводом ls -l тут есть несколько дополнительных полей следующего формата:

Последнее поле обозначает нечто вроде грифа секретности и состоит из комбинации двух элементов:

  • s0 — значимость, также записывают интервалом lowlevel-highlevel
  • c0, c1… c1023 — категория.

Изменение конфигурации доступов

Используйте semodule, чтобы загружать модули SELinux, добавлять и удалять их.

Первая команда semanage login связывает пользователя SELinux с пользователем операционной системы, вторая выводит список. Наконец последняя команда с ключом -r удаляет связку отображение пользователей SELinux на учетные записи ОС. Объяснение синтаксиса значений MLS/MCS Range находится в предыдущем разделе.

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server

]$ semanage login -d karol

Команда semanage user используется для управления отображений между пользователями и ролями SELinux.

  • -a добавить пользовательскую запись соответствия ролей;
  • -l список соответствия пользователей и ролей;
  • -d удалить пользовательскую запись соответствия ролей;
  • -R список ролей, прикрепленных к пользователю;

Файлы, порты и булевы значения

Каждый модуль SELinux предоставляет набор правил маркировки файлов, но также можно добавить собственные правила для в случае необходимости. Например мы желаем дать веб серверу права доступа к папке /srv/www.

Первая команда регистрирует новые правила маркировки, а вторая сбрасывает, вернее выставляет, типы файлов в соответствии с текущими правилами.

Аналогично, TCP/UDP порты отмечены таким образом, что лишь соответствующие сервисы могут их прослушивать. Например, для того, чтобы веб-сервер мог прослушивать порт 8080, нужно выполнить команду.

Значительное число модулей SELinux имеют параметры, которые могут принимать булевы значения. Весь список таких параметров можно увидеть с помощью getsebool -a. Изменять булевы значения можно с помощью setsebool.

Практикум, получить доступ к интерфейсу Pgadmin-web

Рассмотрим пример из практики, мы установили на RHEL 7.6 pgadmin4-web для администрирования БД PostgreSQL. Мы прошли небольшой квест с настройкой pg_hba.conf, postgresql.conf и config_local.py, выставили права на папки, установили из pip недостающие модули Python. Все готово, запускаем и получаем 500 Internal Server error.

Начинаем с типичных подозреваемых, проверяем /var/log/httpd/error_log. Там есть некоторые интересные записи.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
.
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: ‘/var/lib/pgadmin’
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

На этом месте у большинства администраторов Linux возникнет стойкое искушение запустить setenforce 0, да и дело с концом. Признаться, в первый раз я так и сделал. Это конечно тоже выход, но далеко не самый лучший.

Несмотря на громоздкость конструкций SELinux может быть дружественным к пользователю. Достаточно установить пакет setroubleshoot и просмотреть системный журнал.

]$ yum install setroubleshoot
[admin@server

]$ journalctl -b -0
[admin@server

]$ service restart auditd

Обратите внимание на то, что сервис auditd необходимо перезапускать именно так, а не с помощью systemctl, несмотря на наличие systemd в ОС. В системном журнале будет указан не только факт блокировки, но также причина и способ преодоления запрета.

Выполняем эти команды:

]$ setsebool -P httpd_can_network_connect 1
[admin@server

]$ setsebool -P httpd_can_network_connect_db 1

Проверяем доступ на веб страницу pgadmin4-web, всё работает.

Источник

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