Библиотека сайта rus-linux.net
Введение в SELinux для начинающих
Оригинал: Beginner’s guide to SELinux
Автор: SHUSAIN
Дата публикации: 5 ноября 2018 года
Перевод: А. Кривошей
Дата перевода: июль 2019 г.
SELinux или Security Enhanced Linux - это усовершенствованный механизм контроля доступа, разработанный американским Агентством Национальной Безопасности (АНБ) для предотвращения злонамеренных вторжений и взлома. Он реализует MAC (Mandatory Access Control) поверх уже существующего DAC (Discretionary Access Control), то есть разрешения на чтение, запись, выполнение.
Он имеет три разных режима работы:
1. Enforcing: запрещает доступ на основе правил политик.
2. Permissive: регистрирует нарушения политик, но не запрещает доступ, который был бы запрещен в режиме Enforcing.
3. Disabled: полностью отключает Selinux.
Конфигурационный файл по умолчанию для изменения этих режимов: /etc/selinux/config.
Изменение режимов Selinux
Чтобы узнать текущий режим, выполните:
$ getenforce
Чтобы изменить режим на permissive, выполните следующую команду:
$ setenforce 0
или для смены режима permissive на enforcing, выполните:
$ setenforce 1
Если вам нужно полностью отключить selinux, это можно сделать только из конфигурационного файла:
$ vi /etc/selinux/config
Измените поле SELINUX следующим образом:
SELINUX=disabled
Настройка Selinux
Каждый файл или процесс помечен контекстом SELinux, который содержит дополнительную информацию, такую как пользователь SELinux, роль, тип и т. д. Если вы впервые включаете Selinux, то сначала нам нужно исправить контекст и метки. Этот процесс исправления меток и контекста известен как «Перемаркировка» (Relabeling). Чтобы начать перемаркировку, сначала перейдите в конфигурационный файл и измените режим на permissive.
$ vi /etc/selinux/config SELINUX=permissive
Как только установлен режим «permissive», мы создадим пустой скрытый файл с именем «autorelabel» в каталоге /.
$ touch /.autorelabel
Теперь перезагрузите компьютер
$ init 6
Примечание: мы используем режим ‘permissive’ для перемаркировки, поскольку использование режима enforcing во время проведения «перемаркировки» может привести к сбою системы.
Не беспокойтесь, если во время загрузки система застрянет в каком-то файле, перемаркировка займет некоторое время. После завершения перемаркировки и загрузки вашей системы вы можете перейти к конфигурационному файлу и установить режим «enforcing», а также выполнить команду:
$ setenforce 1
Вы успешно включили SELinux на своем компьютере.
Мониторинг логов
Возможно, у вас возникли ошибки во время перемаркировки или могут возникать ошибки при работе системы. Чтобы проверить, работает ли ваш Selinux должным образом и не блокирует ли он доступ к какому-либо порту, приложению и т. д., мы должны отслеживать журналы. Файл журнала для Selinux - /var/log/audit/audit.log, но вам не нужно читать все, чтобы проверить ошибки. Мы можем использовать утилиту «audit2why» для проверки ошибок в журналах, выполнив:
$ audit2why < /var/log/audit/audit.log
Мы получим ошибки в качестве вывода. Если все в порядке, вывода не будет.
Настройка политик Selinux
Политика Selinux - это набор правил, которыми руководствуется механизм безопасности Selinux. Политика определяет набор правил для конкретной среды. Здесь мы научимся изменять политики, чтобы разрешить доступ к нашим запрещенным сервисам.
1. Booleans
Booleans позволяет нам вносить изменения в часть политики во время выполнения без необходимости знания написания политики. Это позволяет вносить изменения без необходимости перезагрузки или перекомпиляции политики SELinux.
Пример:
Допустим, мы хотим предоставить общий доступ к домашнему каталогу нашего пользователя по FTP на чтение и запись, и мы уже поделились им, но, пытаясь получить к ним доступ, мы его не видим. Это связано с тем, что политика SElinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы ftp мог обращаться к домашним каталогам, для этого мы посмотрим, есть ли какие-либо логические значения, доступные для выполнения этого, с помощью команды:
$ semanage boolean –l
Она выдаст список всех доступных логических значений с их текущим состоянием (включено или выключено) и описанием. Вы можете уточнить поиск, добавив «grep», чтобы найти результаты, связанные только с ftp
$ semanage boolean –l | grep ftp
Среди прочих вы увидите следующий Boolean:
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Это правило позволяет ftp читать и писать в домашнюю директорию пользователя.
Оно выключено, поэтому мы включим этот Boolean с помощью команды setsebool:
$ setsebool ftp_home_dir on
Теперь наш демон ftp сможет получить доступ к домашнему каталогу пользователя.
Примечание: вы также можете получить список доступных логических значений, запустив команду «getsebool -a», но она не будет отображать описание Boolean.
2. Маркировка и контекст
Это наиболее распространенный способ реализации Selinuxpolicy на нашем сервере. Каждый файл, папка, процесс, порт помечены контекстом SELinux:
- для файлов/папок, метки хранятся как расширенные атрибуты в файловой системе и могут быть просмотрены с помощью команды:
$ ls –Z /etc/httpd
- для процессов и портов маркировкой управляет ядро, и мы можем увидеть эти метки с помощью команд:
$ ps –auxZ | grephttpd (для процессов) $ netstat –anpZ | grephttpd (для портов)
Пример.
Теперь давайте рассмотрим пример, чтобы понять метки и контекст в деталях. Допустим, у нас есть веб-сервер, который в качестве каталога документов использует /home/dan/html/, а не /var/www/html/, SElinux сочтет это нарушением политики, и вы не сможете просматривать вашу веб-страницу. Это происходит потому, что мы не установили контекст безопасности, связанный с HTML-файлами. Чтобы проверить контекст безопасности по умолчанию для HTML-файла, используйте следующую команду:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Здесь мы получили httpd_sys_content_t в качестве контекста для html-файлов. Нам нужно установить этот контекст безопасности для нашего текущего каталога, который имеет текущий контекст:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Другая команда для проверки контекста безопасности файла/каталога:
$ semanage fcontext -l | grep ‘/var/www’
Мы также будем использовать «semanage» для изменения контекста, как только мы найдем правильный контекст безопасности. Чтобы изменить контекст /home/ dan/html, выполните следующие команды:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’ $ semanage fcontext -l | grep ‘/home/dan/html’ /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html
Как только контекст был изменен с помощью «semange», restorecon загрузит контекст по умолчанию для файлов и каталогов. Наш веб-сервер теперь сможет читать файлы из папки /home/dan/html, поскольку контекст безопасности для этой папки был изменен на «httpd_sys_content_t».
3. Создание локальных политик
Может возникнуть ситуация, когда вышеуказанные методы бесполезны, и вы получаете ошибки (avc/denials) в audit.log. Когда возникает такая проблема, нам нужно создать локальную политику для ее разрешения. Вы можете просмотреть все ошибки с помощью audit2why, как было указано выше.
Как только мы увидели ошибки, мы можем создать локальную политику для их устранения. Когда, например, мы получаем ошибку, связанную с httpd (apache) или smbd (samba), мы создадим для нее политику:
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy (для apache) $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy (для samba)
Здесь http_policy & smb_policy - это названия локальных политик, которые мы создали. Теперь нам нужно только загрузить эти созданные локальные политики в текущую политику SElinux, это может быть сделано с помощью следующих команд:
$ semodule –I http_policy.pp $ semodule –I smb_policy.pp
Наши локальные политики были загружены, и мы не должны теперь видеть никаких ошибок в audit.log.
Подробнее о selinux вы можете узнать из следующих статей на нашем сайте:
- Серверы Linux. Часть VII. Система контроля доступа SELinux
- Серверы Linux. Часть VII. Система контроля доступа SELinux (продолжение)
- Серверы Linux. Часть VII. Система контроля доступа SELinux
- Запускаем приложения в "песочнице" с помощью SELinux
- Знакомимся с демонами (в Red Hat Enterprise Linux)
- 20 советов по повышению безопасности сервера Linux
- Что такое AppArmor и как с его помощью защитить вашу систему Ubuntu