SELinux

Материал из sysadm
Перейти к навигации Перейти к поиску

Отключение и изменение режимов работы

SELinux имеет конфигурационный файл /etc/sysconfig/selinux, в котором можно отключить SELinux или задать режим его работы при старте системы

# SELINUX= возможны только следующие значения:
#     enforcing - SELinux включен и блокирует все что не разрешено.
#     permissive - SELinux включен, но ничего не блокирует, только пишет в лог то что должен блокировать.
#     disabled - SELinux полностью выключен
SELINUX=enforcing

Определение текущего режима работы SELinux

getenforce

Временное изменение режима работы, действует до следующей перезагрузки (если SELinux выключен, то изменить режим работы нельзя)

setenforce Permissive
setenforce Enforcing

Анализ причин блокировки

cat /var/log/audit/audit.log | grep <имя_блокируемого_процесса_или_его_часть>

Контексты

# для работы с semanage установите пакет
dnf install policycoreutils-python-utils

# список каталогов с контекстом openvpn_etc_t
semanage fcontext -l | grep openvpn_etc_t

# добавление контекста openvpn_etc_t на каталог
semanage fcontext --add -t openvpn_etc_t '<path>(/.*)?'

# удаление контекста openvpn_etc_t с каталога
semanage fcontext --delete -t openvpn_etc_t '<path>(/.*)?'

# применение заданных контекстов к каталогу, всем подкаталогам и файлам
restorecon -R -v <path>

# проверка текущих контекстов
ls -lZ <path>

Переключатели

Вывод списка всех переключателей и их значений

getsebool -a

Изменение состояния переключателя

setsebool -P param_name {on | off}

Работа с политиками

Вывод списка действующих политик

semodule -l | grep openvpn

Пример генерации собственной политики для openvpn по текущему логу блокировок

cd /tmp
cat /var/log/audit/audit.log | grep openvpn | audit2allow -M openvpn-my

# будут созданы два файла
#    openvpn-my.te — текстовое представление политики
#    openvpn-my.pp — скомпилированная политика, готовая к импорту

Импорт файла скомпилированной политики

semodule -i file.pp

Security

параметры безопасности SELinux

# отключение selinux
grubby --update-kernel ALL --args selinux=0
reboot now

# отменяем выключения selinux
grubby --update-kernel ALL --remove-args selinux

# запрет загрузки политик (фиксирует текущие политики и не позволяет их менять)
# чтобы выключить этот параметр, придется отключить SELinux и перегрузить сервер
setsebool -P secure_mode_policyload on

# проверка значения параметра в текущей конфигурации
getsebool -a | grep policyload
secure_mode_policyload --> on

Lockdown

lockdown - механизм ядра, позволяющий ограничивать действия root, защита памяти ядра и процессов, запрет ручной загрузки модулей ядра, запрет ручной загрузки политик, запрет изменения важных параметров безопасности.

Для работы lockdown необходимо использовать UEFI SecureBoot. По умолчанию, в режиме UEFI при включенном SecureBoot, ядро загружается с параметром lockdown=integrity.

lockdown может находиться в трех состояниях:

  • none - SecureBoot выключен, lockdown не работает
  • integrity - запрещает изменять память процессов, ...
  • confidentiality - запрещает изменять и читать память процессов, ...

lockdown запрещает загрузать политики SELinux на уровне вызовов ядра, в режиме confidentiality действуют более жесткие ограничения


# временное повышение уровня lockdown без перезагрузки
# понижение уровня требует перезагрузки
echo confidentiality > /sys/kernel/security/lockdown

# переключение lockdown в режим confidentiality на этапе загрузки ОС
grubby --update-kernel=ALL --args="lockdown=confidentiality"

# проверка параметров загрузки ядра в текущей конфигурации
grubby --info=DEFAULT | grep args

# проверка, с какими параметрами загружено текущее ядро
cat /proc/cmdline

# проверка текущего режима lockdown, выделяется скобками []
cat /sys/kernel/security/lockdown
none integrity [confidentiality]