- Системы защиты Linux
- Предыстория Linux Security Modules и SELinux
- Глоссарий SELinux
- LSM и архитектура SELinux
- Управление настройками SELinux
- Изменение конфигурации доступов
- Файлы, порты и булевы значения
- Практикум, получить доступ к интерфейсу Pgadmin-web
- Русские Блоги
- Конфигурация политики безопасности Linux — модуль аутентификации PAM_TALLY2
Системы защиты 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
Все это работает следующим образом.
- Некий субъект, в терминах SELinux, выполняет над объектом разрешенное действие после DAC проверки, как показано не верхней картинке. Этот запрос на выполнение операции попадает к перехватчику событий LSM.
- Оттуда запрос вместе с контекстом безопасности субъекта и объекта передается на модуль SELinux Abstraction and Hook Logic, ответственный за взаимодействие с LSM.
- Инстанцией принятия решения о доступе субъекта к объекту является Policy Enforcement Server и к нему поступают данные от SELinux AnHL.
- Для принятия решения о доступе, или запрете Policy Enforcement Server обращается к подсистеме кэширования наиболее используемых правил Access Vector Cache (AVC).
- Если решение для соответствующего правила не найден в кэше, то запрос передается дальше в БД политик безопасности.
- Результат поиска из БД и AVC возвращается в Policy Enforcement Server.
- Если найденная политика согласуется с запрашиваемым действием, то операция разрешается. В противном случае операция запрещается.
Управление настройками 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, всё работает.
Источник
Русские Блоги
Конфигурация политики безопасности Linux — модуль аутентификации PAM_TALLY2
Экземпляр конфигурации безопасности аутентификации PAM
— Сохранить надежный пароль (конфигурация безопасности пароля пользователя)
— Пользовательская попытка пользователя SSH SSH превышает предел после заблокированного лимита (блокировка учетной записи / разблокировка и настройка времени)
— Разрешить обычным пользователям использовать Sudo вместо SU (ограничивая обычные пользователи, чтобы войти в пользователей root)
— запрещено непосредственно с помощью пользователей root, чтобы войти через SSH
Pwgen Комплекс пароль Случайный инструмент сборки
О PAM.
Linux-PAM (подключаемые модули аутентификации для Linux) подключены к модулю аутентификации.Linux-Pam — это набор систем библиотечных библиотек аутентификации для подлинности для Linux, обеспечивая поддержку динамического модуля аутентификации для приложений или услуг в системе. В Linux Pam Pam динамически настраивается, а администратор локальной системы может свободно выбирать, как приложение аутентифицирует пользователя. Приложения PAM находятся на многих программах и службах, таких как аутентификация PAM (аутентификация пароля, логин аутентификации, ограничения), Passwd и пользовательские процессы, а также процессы пользовательских процессов выделяют системные ресурсы для пользователей.
Основной особенностью PAM является то, что природа аутентификации динамически настроена. Основной частью PAM является коллекцией модулей Libpams и PAM, которые являются файлами динамической библиотеки ссылок (.so), расположенные в папке / lib / Security /, а в каталоге /etc/pam.d/ (или модуль PAM Профиль файла конфигурации /etc/pam.conf. Файл конфигурации PAM различных программ и сервисов определяется в каталоге /etc/pam.d/, где файл system-auth — это важный профиль модуля PAM. Он в основном отвечает за аутентификацию идентификации системы входа в систему пользователя , не только другие приложения или услуги могут вызвать его через интерфейс включения (этот файл имеет мягкую ссылку System-AUTH-AC). Кроме того, файл конфигурации паролей-Auth — также важные файлы конфигурации, связанные с аутентификацией, такие как пользователь Remote Loginy Verification (вход в систему SSH), называется. В выпуске Ubuntu, SUSE Linux, основные профили PAM являются четыреми файлами Common-auth, Common — Common-Password, Common-Sessional, все приложения и обслуживание первичных конфигураций PAM PAM. Вызов. Вызов
Используйте следующую команду, чтобы определить, использует ли программа PAM:
# ldd /usr/bin/passwd | grep libpam
libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007fb74f748000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007fb74eb45000)
Если у вас есть аналогичный выход, это означает, что программа использует PAM, без вывода, без использования.
Профиль аутентификации PAM
Каталог /etc/pam.d/ содержит файл конфигурации PAM приложения. Например, программа входа в систему определяет его имя программы / обслуживания в качестве входа, а соответствующий файл конфигурации PAM — /etc/pam.d/login.
Формат синтаксиса файлов конфигурации PAM
Каждый файл конфигурации PAM содержит набор инструкций для определения модулей и контрольных флагов и параметров. Каждая инструкция имеет простой синтаксис для идентификации цели модуля (интерфейса) и настройки конфигурации модуля, формат синтаксиса выглядит следующим образом:
module_interface control_flag module_name module_arguments |
Как в файле конфигурации /etc/pam.d/password-auth-ac (centos), одна из линий определений модуля PAM следующим образом
Интерфейс модуля PAM (группа управления модулем)
PAM предоставляет четыре типа доступных интерфейсов модулей для задач аутентификации, которые предоставляют различные услуги аутентификации:
√ auth | — Интерфейс модуля аутентификации, такой как проверка идентификации пользователя, проверьте, может ли пароль проходить и установить учетные данные пользователя |
√ account | — Интерфейс модуля учетных записей, проверьте, соответствует ли указанная учетная запись текущего состояния проверки, такое как пользователь имеет право доступа к запрошенной службе, проверьте, истекает ли учетная запись |
√ password | — Интерфейс модуля паролей, используемый для изменения пользовательского пароля и принудительно настроить конфигурацию прочных паролей |
√ session | — Интерфейс модуля сеанса для управления и настройки пользовательских сеансов. Сессия запускается в силу после успешной аутентификации пользователя |
Модуль библиотеки одного PAM может быть предоставлен для любых или всех интерфейсов модулей. Например, PAM_UNIX.SO предоставляется четырем интерфейсам модуля.
Логотип управления PAM PAM
Все модули PAM вызываются, когда они вызываются, и возвращается результат успеха или провала, и каждый модуль PAM определяется несколькими соответствующими флагами управления в каждом модуле PAM, определяет, передается ли результат или не удастся. Каждый флаг управления соответствует результату обработки, а библиотека PAM интегрирует результаты этих проходов / сбой в целый результат pass / неисправности, а затем возвращает результат к приложению. Модуль может быть укладывается в определенном порядке. Флаг управления является определенной детализацией реализации, которая реализует пользователей в конкретном аутентификации приложения или услуг. Флаг управления — это второе поле в файле конфигурации PAM, а флаг управления PAM выглядит следующим образом:
> required | — Результаты модуля должны быть успешными, чтобы продолжать быть сертифицированным. Если тест не удается здесь, продолжайте тестирование следующего модуля в интерфейсе модуля, пока все тесты модуля не будут завершены, уведомление пользователю. |
> requisite | — Результат модуля должен быть успешным, чтобы продолжать быть сертифицированным. Если тест не удается здесь, результат отказа уведомлен пользователю. |
> sufficient | — Результаты модуля, если тест не удается, он будет игнорироваться. Если достаточный модуль успешен, и предыдущий необходимый модуль не имеет неисправности, PAM возвращает результат принятого результата и не вызывает других модулей в стеке. |
> optional | — Результат прохода / сбоя, возвращаемого модулем, игнорируется. Когда нет другого модуля, который не ссылается, модуль необходим для отмены дополнительного модуля, и требуется модуль. Этот модуль вызывается для выполнения некоторых операций и не влияет на результат стека модуля. |
> include | — В отличие от других флагов управления, включая метод обработки результатов модуля. Этот флаг используется для непосредственного ссылки на параметры конфигурации других модулей PAM PAM |
Метод конфигурации PAM
Все методы конфигурации PAM описаны в руководстве человека. Например, чтобы найти программу для поддержки конфигурации модуля PAM, вы можете использовать имя блока MAN PLUS MODE (удалить .so), чтобы найти инструкции, такие как #man pam_unix Отказ (Имя модуля можно найти в каталоге / Lib / Security / или / lib64 / Security /.)
Экземпляр конфигурации безопасности аутентификации PAM
Один,Заставить надежный пароль (конфигурация безопасности пароля пользователя)
Файл конфигурации PAM: /etc/pam.d/system-auth-ac
Имя модуля: PAM_CRACKLIB (доступно только для интерфейса модуля пароля)
Minlen = 12 Длина символа символа пароля не менее 12 цифр (по умолчанию 9)
Lcredit = -1 содержит не менее 1 строчной буквы
Ucredit = -1 содержит как минимум 1 заглавную букву
Dcredit = -1 содержит как минимум 1 номер
Ocredit = -1 содержит как минимум 1 специальный символ
Повторите попытку = 3 При настройке пароля, подскажите 3 ввода ошибки пароля пользователя
Различные 6 символов в новом пароле, отличном от старого пароля, когда Difok = 6 Настроить пароли (по умолчанию 5)
Другие общие параметры:
Reject_username Новый пароль не может содержать одно и то же поле, что и имя пользователя
MaxRepeat = n отказался содержать пароли, которые превышают n непрерывных символов, значение по умолчанию равно 0 указывает, что эта проверка отключена.
MaxeSsexence = N отказался от пароля, содержащего монотонную последовательность символов, больше n, например, «1234» или «FEDCB», даже без этой конфигурации параметра, большинство таких паролей не пройдет, если только последовательность не будет просто паролем. Раздел
MaxCla *** Epeat = n отклоняет пароль N или более последовательных символов, которые содержат одну и ту же категорию. Значение по умолчанию равно 0 указывает, что этот чек отключен.
Use_authtok Обеспечивает предыдущий пароль, не предложит пользователю ввести новый пароль (не разрешено менять пароль)
Имя модуля: PAM_UNIX (для учетной записи, аутентики, пароля и модуля сеанса)
Помните = n Сохраняет N Пароли, используемые каждым пользователем, обязательный пароль не может быть повторен с паролем истории
Другие общие параметры:
SHA512 Когда пользователь меняет пароль в следующий раз, используйте алгоритм SHA256 для шифрования
MD5 Когда пользователь изменяет пароль, используйте алгоритм MD5 для шифрования его.
TRY_FIRST_PASS Перед тому, чтобы запросить пользователю ввести пароль, модуль сначала пытается предыдущий пароль для проверки того, будет ли удовлетворить требование модуля.
Use_first_pass Этот модуль обеспечивает предыдущий пароль (не разрешено изменять пароль), если пароль пуст или пароль не правильный, пользователь будет отклонен доступом
Пароль защиты пользователей тени
Nullok по умолчанию для пустых сервисов доступа к паролю
Use_authtok Обеспечивает предыдущий пароль, не предложит пользователю ввести новый пароль (не разрешено менять пароль)
Измените конфигурацию /etc/pam.d/system-auth-ac файл, измените или добавьте параметры конфигурации в модуле пароля, следующим образом:
password requisite pam_cracklib.so try_first_pass retry=3 type= reject_username minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 difok=6
Модифицированный файл конфигурации /etc/pam.d/system-auth-ac показан ниже
Следует отметить, что я отображаюсь здесь, это конфигурация под RHEL / CENTOS, файл конфигурации PAM PAMWD PAMWD включает первичный профиль /etc/pam.d/passwd и /etc/pam.d/system-auth-ac (или / или / etc / pam.d / password-auth-ac), где файл конфигурации /etc/pam.d/passwd содержит только файл конфигурации /etc/pam.d/system-auth-ac, поэтому для приведенного выше пароля аутентификации PAM Конфигурация модуля, модифицировать / настроить файл. Или в Ubuntu файл конфигурации включает в себя: /etc/pam.d/common-password/count/PAM.D/Common-acccount/Common (Pammon-AUTC / PAM.D / Common-auth / etc / pam.d / общее представление.
Тестовая конфигурация PAM:
Логин (SU) Нормальные пользователи используют программу Passwd для обновления пароля, если входной пароль не соответствует требованиям, он не будет изменен.
Источник