Страница 1 из 1

SELinux в CentOS

Добавлено: 17 янв 2022, 23:27
xor

Источник:https://www.dmosk.ru/miniinstruktions.p ... ux-setting
Источник:https://www.dmosk.ru/miniinstruktions.p ... nux-centos

Настройка SELinux в CentOS

Принцип работы
В «двух словах», SELinux расширяет возможности стандартной системы безопасности (на основе прав доступа к файлам). Она позволяет ограничить доступ процессу, который запускается от имени пользователя, у которого прав больше, чем нужно данному процессу. Чтобы понять наглядно принцип работы SELinux, рассмотрим контекст безопасности — сочетание сущности, роли, домена и категории (не обязательно).

Вот как выглядят права SELinux:
<сущность>:<роль>:<домен/тип>:<уровень:категория>

Например:

Код: Выделить всё

unconfined_u:object_r:user_home_t:s0
system_u:system_r:kernel_t:s0

<сущность> или тип пользователя — это субъект, совершающий действие. Чаще всего, процесс или программа.
<роль> — список разрешенных операций или сочетание доменов. Роли нельзя объединять.
<домен/тип> — набор минимальных действий, необходимый для выполнения операции. Термин «Домен» применяется к процессам, «Тип» — к файлам и папкам.
<уровень:категория> — в стандартных политиках SELinux не применяется. Используется для MLS/MCS (Model Multi-Level Security / Multi-Category Security), в которых используются уровни доступа для файлов определенных категорий. Например, s0-s0:c0.c1023 — максимально разрешенный уровень доступа.

Так как же это работает
Принцип довольно прост — необходимо, чтобы процесс и файл, к которому он обращается находились в одном домене/типе.
Чтобы понять было проще, разберем настройки на примерах.

Общие команды
Посмотреть состояние работы SELinux (развернуто):
sestatus

Посмотреть кратко — работает или нет:
getenforce

Отключить SELinux (разово до перезагрузки):
setenforce 0

Включить (разово):
setenforce 1

* если SELinux переведен в состояние disabled (выключена), данная команда не сработает. Необходимо перевести систему безопасности в режим enforcing (строгий режим работы) или permissive (разрешать все, но вести лог).

Подробнее о включении/отключении системы безопасности читайте статью Как отключить SELinux.

Настройка SELinux
Настройка задается контекстом безопасности, который назначается на файлы. Повторюсь, домен процесса должен быть таким же, как и тип файла.
В системе должен быть установлен пакет policycoreutils-python:
yum install policycoreutils-python

Просмотр текущих настроек контекста безопасности
Для файлов:
ls -Z

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

Для процессов:
ps -aeZ

* можно использовать grep для выборки определенного процесса или файла.

Вывод каталогов/файлов и применяемых к ним по умолчанию контекстов безопасности:
semanage fcontext -l

Смена контекста безопасности
Задаем метки по умолчанию, которые должны применяться ко всем файлам в каталоге:
semanage fcontext --add --type NetworkManager_etc_rw_t '/etc/NetworkManager/NetworkManager(/.*)?'

* в данном примере мы задали правило, что всем файлам в директории /etc/NetworkManager/NetworkManager будут назначаться SELinux права (тип) NetworkManager_etc_rw_t. Однако нужно понимать, что это не приведет к смене прав для файлов, которые уже находятся в каталоге.

Сбрасываем права на заданные по умолчанию:
restorecon /etc/NetworkManager/NetworkManager

* все права сменятся на те, которые мы указали командой semanage fcontext.

Редактируем права на файл:
chcon -v --type=cron_spool_t /var/spool/cron

* команда задаст права на /var/spool/cron. Также можно использовать рекурсивный запрос, чтобы применить метки ко всех файлам в каталоге. Это делается с добавлением опции -R.

Использование команды chcon нежелательно, так как в случае применения правил по умолчанию, установленные права будут сбрасываться, что приведет к неочевидным проблемам. По возможности, стоит применять команды semanage fcontext и restorecon.

Готовые политики
Разработчики некоторых программных решений предоставляют готовые наборы настроек SELinux для своих программ.

Список установленных редактируемых политик можно посмотреть следующей командой:
getsebool -a

* команда выведет название политик и их статус: включена — on, отключена — off.

Чтобы изменить состояние готовой политики, вводим команду:
setsebool -P <имя политики> <on или off>

Например:
setsebool -P virt_use_samba on

Диагностика проблем
Для поиска проблем в настройке политик сначала необходимо перевести режим работы SELinux в permissive. Для этого открываем файл:
vi /etc/selinux/config

... и отредактировать опцию SELINUX:

Код: Выделить всё

SELINUX=permissive

После перезагружаем компьютер:
shutdown -r now

Теперь можно просмотреть лог-файл:
tail -f /var/log/audit/audit.log

Примеры настройки

Использование политик
Для применения некоторых политик в CentOS, необходимо установить следующие пакеты:
yum install policycoreutils setroubleshoot

Samba
Политики
Список готовых политик и текущее значение смотрим командой:
getsebool -a | grep samba

Задаем политику, например, разрешить шары доманших каталого:
setsebool -P samba_enable_home_dirs=1

Ручная настройка
Посмотреть текущие настройки для samba:
semanage fcontext -l | grep samba

Задать разрешение:
semanage fcontext -a -t samba_share_t "/share/samba(/.*)?"
restorecon -R -v /share/samba

* в данном примере политика применяется к каталогу /share/samba и всем входящим папкам и файлам.

Rsyslog
Список для разрешенных портов смотрим командой:
semanage port -l | grep syslog

Если мы хотим использовать rsyslog для соединений по TCP на порту 514 вводим:
semanage port -m -t syslogd_port_t -p tcp 514

SELinux в Ubuntu
В других системах на базе ядра Linux, например, Debian/Ubuntu, настройки SELinux выполняется способами, описанными выше. Единственное отличие — по умолчанию, данная система безопасности не установлена. Для установки необходимо выполнить команду:
apt-get install selinux

И можно приступать к настройке.

Как отключить SELinux

Отключить данную систему безопасности можно разными способами. В данной статье рассмотрим 3 возможных метода.

Просмотр текущего статуса
Посмотреть текущий статус системы безопасности можно командой:
getenforce
Варианты ответа: Enforcing / Permissive / Disabled — включен / только предупреждения / отключен.

Нижеизложенная инструкция подходит для любого дистибутива Linux — CentOS, Ubuntu, Debian, Fedora и так далее.

Способ 1. Разово без перезагрузки
Введите команду:
setenforce 0

После перезагрузки системы все вернется как было.

Способ 2. Отключить навсегда
Чтобы SELinux не запускался после перезагрузки, открываем на редактирование следующий файл:
vi /etc/selinux/config

И редактируем следующую строку:

Код: Выделить всё

...
SELINUX=disabled
...

* disabled отключает selinux, enforcing — включает.

Навсегда одной командой
Для этого достаточно выполнить замену строки в вышеописанном конфигурационном файле следующей командой:
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Способ 3. Удалить пакеты Selinux
Пожалуй, это самый суровый способ, но тоже работает. Итак вводим:

Для CentOS / Red Hat / Fedora / ...
yum remove selinux*

Для Debian / Ubuntu / ...
apt-get remove selinux*