рекомендации

вторник, 1 февраля 2022 г.

Введение в SELinux для начинающих

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 (for process)
$ netstat –anpZ | grephttpd (for port)

Пример.

Теперь давайте рассмотрим пример, чтобы понять метки и контекст в деталях. Допустим, у нас есть веб-сервер, который в качестве каталога документов использует /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 (for apache)
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy (for samba)

Здесь http_policy & smb_policy - это названия локальных политик, которые мы создали. Теперь нам нужно только загрузить эти созданные локальные политики в текущую политику SElinux, это может быть сделано с помощью следующих команд:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Наши локальные политики были загружены, и мы не должны теперь видеть никаких ошибок в audit.log.

Комментариев нет:

Отправить комментарий