SELinux for system administrators
-
Upload
aleksey-chudov -
Category
Technology
-
view
165 -
download
9
Transcript of SELinux for system administrators
![Page 1: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/1.jpg)
SELinux для системных администраторов
![Page 2: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/2.jpg)
2
Что такое SELinux и как его использовать?
![Page 3: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/3.jpg)
3
Cодержание
1. Фундаментальные понятия в SELinux
2. Режимы работы SELinux и логирование
3. Контекст файлов и домен процессов
4. SELinux пользователи и роли
5. Управление сетевыми соединениями
6. Работа с SELinux политиками
7. SELinux в продакшн среде
![Page 4: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/4.jpg)
4
Часть 1. Фундаментальные понятия в SELinux
![Page 5: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/5.jpg)
5
Краткое содержание части 1
● Определение SELinux
● Избирательное управление доступом
● Принудительное управление доступом
● Фреймворк Linux Security Modules
● SELinux контекст
● SELinux политика
● SELinux модули
![Page 6: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/6.jpg)
6
Security-Enhanced Linux
Security-Enhanced Linux (SELinux) – это модуль ядра Linux и набор пользовательских утилит для реализации механизма принудительного контроля доступа (англ. Mandatory Access Control, MAC).
![Page 7: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/7.jpg)
7
Управление доступом в Linux
● Избирательное управление доступом (англ. Discretionary Access Control, DAC)
● Принудительное управление доступом (англ. Mandatory Access Control, MAC)
![Page 8: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/8.jpg)
8
Избирательное управление доступом
Избирательное управление доступом (англ. Discretionary Access Control, DAC) — управление доступом субъектов к объектам на основе списков управления доступом или матрицы доступа.
![Page 9: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/9.jpg)
9
Discretionary Access Control в Linux
Механизм Discretionary Access Control (DAC) в Linux основан на сравнении пользователя и группы процесса с владельцем и группой файла, директории или другого ресурса, к которому этот процесс обращается.
![Page 10: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/10.jpg)
10
Пример DAC в Linux
# ls -l /etc/shadow-rw-------. 1 root root 1310 May 29 13:10 /etc/shadow
# iduid=0(root) gid=0(root) groups=0(root)
# ps -u root -o user,group,command...root root /usr/sbin/crondroot root /usr/sbin/irqbalanceroot root /usr/sbin/lvmetadroot root /usr/sbin/mcelogroot root /usr/sbin/rsyslogdroot root /usr/sbin/snmpd...
![Page 11: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/11.jpg)
11
Принудительное управление доступом
Принудительное управление доступом (англ. Mandatory Access Control, MAC) — управление доступом субъектов к объектам основанное на назначении метки конфиденциальности для информации, содержащейся в объектах, и выдаче официальных разрешений (допуска) субъектам на обращение к информации такого уровня конфиденциальности.
![Page 12: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/12.jpg)
12
Mandatory Access Control в Linux
Механизм Mandatory Access Control (MAC) в Linux основан на политике безопасности описывающей разрешенные операции для каждого объекта политики. Соблюдение политики безопасности гарантирует ядро через фреймворк Linux Security Modules (LSM).
![Page 13: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/13.jpg)
13
Пример SELinux MAC
# ls -Z /etc/shadow-rw-------. root root system_u:object_r:shadow_t:s0 /etc/shadow
# id -Zcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# ps -u root -o user,group,label,command...root root system_u:system_r:crond_t:s0 /usr/sbin/crondroot root system_u:system_r:irqbalance_t:s0 /usr/sbin/irqbalanceroot root system_u:system_r:lvm_t:s0 /usr/sbin/lvmetadroot root system_u:system_r:mcelog_t:s0 /usr/sbin/mcelogroot root system_u:system_r:syslogd_t:s0 /usr/sbin/rsyslogdroot root system_u:system_r:snmpd_t:s0 /usr/sbin/snmpd...
![Page 14: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/14.jpg)
14
Linux Security Modules
Linux Security Modules (LSM) — это фреймворк добавляющий в ядро Linux поддержку подключаемых модулей безопасности (AppArmor, SELinux, Smack, TOMOYO Linux).
![Page 15: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/15.jpg)
15
Схема работы LSM
![Page 16: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/16.jpg)
16
SELinux и DAC
● SELinux политика проверяется после DAC
● SELinux политика не может влиять на DAC
![Page 17: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/17.jpg)
17
SELinux контекст
● У всего есть контекст!
● Контекст (context) = метка (label)
● Контекст состоит из четырех полей
![Page 18: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/18.jpg)
18
Поля SELinux контекста
# id -Zcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
![Page 19: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/19.jpg)
19
SELinux пользователь
● SELinux user ≠ Linux user
● Не меняется в течение сессии
● Используется для User-based access control (UBAC)
● Ограничивает SELinux роли пользователя
● По соглашению имеет суффикс "_u"
![Page 20: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/20.jpg)
20
Пример SELinux пользователей
● guest_u
● root
● staff_u
● sysadm_u
● system_u
● unconfined_u
● user_u
● xguest_u
![Page 21: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/21.jpg)
21
SELinux роль
● Может меняться в течение сессии
● Используется для Role-based access control (RBAC)
● Ограничивает SELinux типы пользователя
● По соглашению имеет суффикс "_r"
![Page 22: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/22.jpg)
22
Пример SELinux ролей
● guest_r
● staff_r
● sysadm_r
● system_r
● unconfined_r
● user_r
● xguest_r
![Page 23: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/23.jpg)
23
SELinux тип
● SELinux type = SELinux process domain
● Основной компонент SELinux targeted политики
● Используется для Type Enforcement
● По соглашению имеет суффикс "_t"
![Page 24: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/24.jpg)
24
Пример SELinux типов
● crond_t
● httpd_t
● irqbalance_t
● lvm_t
● mcelog_t
● snmpd_t
● syslogd_t
● unconfined_t
![Page 25: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/25.jpg)
25
Неограниченный домен
● Неограниченный домен (англ. unconfined domain или unconfined type) — это SELinux тип, на который не накладывается ни каких ограничений
● Позволяет запускать программы, для которых еще нет политики и работать в неограниченной консоли
● Неограниченные домены ограничены DAC
● По соглашению называется unconfined_t
![Page 26: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/26.jpg)
26
Sensitivity level
● Состоит из уровня конфиденциальности (префикс "s") и категории (префикс "c")
● Используется для Multi-Level Security (MLS) и Multi-Category Security (MCS)
● MLS реализует модель Белла — Лападулы
● MCS дополнительно ограничивает домен только своей категорией
![Page 27: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/27.jpg)
27
Модель Белла — Лападулы
Модель Белла — Лападулы — модель контроля и управления доступом, в которой невозможно создание информационных потоков от субъектов с более высоким уровнем доступа к субъектам с более низким уровнем доступа.
![Page 28: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/28.jpg)
28
Схема модели Белла — Лападулы
Unclassified
Confidential
Secret
Top SecretW
riteR
ead
no read up / no write down
![Page 29: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/29.jpg)
29
Пример Multi-Level Security (MLS)
# seinfo --sensitivity -x
Sensitivities: 1 s0 level s0:c0.c1023
![Page 30: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/30.jpg)
30
Пример Multi-Category Security (MCS)
http://danwalsh.livejournal.com/73416.html
# ps -u qemu -o label,commandsystem_u:system_r:svirt_t:s0:c434,c803 /usr/libexec/qemu-kvm -name vm100system_u:system_r:svirt_t:s0:c154,c948 /usr/libexec/qemu-kvm -name vm101system_u:system_r:svirt_t:s0:c264,c563 /usr/libexec/qemu-kvm -name vm102system_u:system_r:svirt_t:s0:c504,c867 /usr/libexec/qemu-kvm -name vm103system_u:system_r:svirt_t:s0:c652,c458 /usr/libexec/qemu-kvm -name vm104
# seinfo -amcs_constrained_type -x mcs_constrained_type svirt_kvm_net_t svirt_lxc_net_t openshift_app_t svirt_tcg_t netlabel_peer_t sandbox_x_t svirt_t sandbox_min_t sandbox_net_t sandbox_web_t openshift_t svirt_qemu_net_t
![Page 31: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/31.jpg)
31
SELinux политика
● Определяет поведением системы
● Существуют разные реализации политик (англ. policy type или policy store)
● SELinux Policy Store содержит одну политику
● Только одна политика активна
● Смена политики требует рестарт системы
![Page 32: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/32.jpg)
32
Пример SELinux policy store
● strict
● targeted
● minimum
● mcs
● mls
![Page 33: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/33.jpg)
33
Пример активной SELinux политики
# sestatus SELinux status: enabledSELinuxfs mount: /sys/fs/selinuxSELinux root directory: /etc/selinuxLoaded policy name: targetedCurrent mode: enforcingMode from config file: enforcingPolicy MLS status: enabledPolicy deny_unknown status: allowedMax kernel policy version: 28
# grep ^SELINUX /etc/selinux/config SELINUX=enforcingSELINUXTYPE=targeted
![Page 34: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/34.jpg)
34
Policy deny_unknown
● Разрешенные операции (read, write, open, lock и др.) определены как в ядре Linux, так и в SELinux политике
● В новых версиях ядра Linux могут появиться операции, которых нет в политике
● Policy deny_unknown определяет, что делать в случае появления неизвестных операций
● Возможные варианты: allow, deny, reject
![Page 35: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/35.jpg)
35
Max kernel policy version
● Описывает максимальную версию SELinux политики, которую поддерживает ядро Linux
● При добавлении в ядро нового SELinux функционала версия увеличивается
![Page 36: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/36.jpg)
36
Kernel policy versions
![Page 37: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/37.jpg)
37
SELinux модули
● Изначально SELinux политика состояла из одного бинарного файла
● Современная SELinux политика состоит из базового модуля base.pp и отдельных модулей для приложений
● SELinux модули можно загружать / выгружать / отключать / включать без рестарта системы
![Page 38: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/38.jpg)
38
Пример SELinux модулей
# semodule -l ...apache 2.7.2bacula 1.2.0bind 1.13.1dhcp 1.11.0docker 1.0.0mysql 1.14.1samba 1.16.3ssh 2.4.2sudo 1.10.0virt 1.5.0zabbix 1.6.0...
![Page 39: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/39.jpg)
39
SELinux booleans
SELinux booleans — это «переключатели», которые при «включении» и «выключении» меняют поведение правил SELinux политики. Booleans используются разработчиками SELinux политики для создания условных правил (англ. conditional rules).
![Page 40: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/40.jpg)
40
Пример SELinux booleans
# semanage boolean -l | grep httpd_can_connecthttpd_can_connect_mythtv (off,off) Allow http daemon to connect to mythtvhttpd_can_connect_ldap (off,off) Allow httpd to connect to the ldap porthttpd_can_connect_ftp (off,off) Allow httpd to act as a FTP clienthttpd_can_connect_zabbix (off,off) Allow http daemon to connect to zabbix
![Page 41: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/41.jpg)
41
Часть 2. Режимы работы SELinux и логирование
![Page 42: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/42.jpg)
42
Краткое содержание части 2
● Режимы работы SELinux
● Отключение SELinux
● Изменение режима SELinux
● Permissive домены
● SELinux логирование и аудит
![Page 43: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/43.jpg)
43
Режимы SELinux
● Enforcing — SELinux включен и политика безопасности соблюдается. Все нарушения логируются и запрещаются.
● Permissive — SELinux включен, но политика безопасности не соблюдается. Все нарушения логируются, но не запрещаются.
● Disabled — SELinux отключен. Для смены режима требуется рестарт системы.
![Page 44: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/44.jpg)
44
Пример определения режима SELinux
# sestatus | grep 'Current mode'Current mode: enforcing
# sestatus | grep 'Mode from config file'Mode from config file: enforcing
# grep ^SELINUX= /etc/selinux/configSELINUX=enforcing
# getenforce Enforcing
# selinuxenabled # echo $?0
![Page 45: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/45.jpg)
45
Отключение SELinux
Для полного отключения SELinux нужно внести изменения в конфигурационный файл /etc/selinux/config и перезагрузить систему
![Page 46: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/46.jpg)
46
Пример отключения SELinux
# grep ^SELINUX= /etc/selinux/configSELINUX=enforcing
# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# grep ^SELINUX= /etc/selinux/configSELINUX=disabled
# reboot
![Page 47: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/47.jpg)
47
Изменение режима SELinux
● Команда setenforce переключает режим SELinux между permissive (0) и enforcing (1). Изменения вступают в силу сразу и действуют до перезагрузки системы.
● При старте системы режим работы зачитывается из конфигурационного файла /etc/selinux/config
● Boolean secure_mode_policyload запрещает изменение режима SELinux до перезагрузки
![Page 48: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/48.jpg)
48
Пример изменения режима SELinux
# getenforceEnforcing
# setenforce 0
# getenforcePermissive
# setenforce 1
# getenforceEnforcing
![Page 49: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/49.jpg)
49
Пример boolean secure_mode_policyload
# setsebool secure_mode_policyload=on
# setenforce 0setenforce: setenforce() failed
# setsebool secure_mode_policyload=offCould not change active booleans: Permission denied
# aureport -a -ts recent1. 02/10/2016 11:57:02 setenforce unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1 security setenforce system_u:object_r:security_t:s0 denied 982. 02/10/2016 11:59:34 setsebool unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1 security setbool system_u:object_r:security_t:s0 denied 99
# getsebool -a | grep ^securesecure_mode --> offsecure_mode_insmod --> offsecure_mode_policyload --> on
![Page 50: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/50.jpg)
50
SELinux параметры ядра
● SELinux параметры ядра имеют более высокий приоритет, чем параметры в конфигурационном файле /etc/selinux/config
● selinux=0 — отключить SELinux
● enforcing=0 — включить SELinux permissive режим
● enforcing=1 — включить SELinux enforcing режим
![Page 51: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/51.jpg)
51
Permissive домены
● Начиная с Linux 2.6.26 (policy version 23) SELinux поддерживает permissive домены
● Вместо отключения SELinux для всей системы предпочтительно использовать permissive режим для отдельных доменов
![Page 52: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/52.jpg)
52
Пример permissive домена
# semanage permissive -a httpd_t
# semanage permissive -lCustomized Permissive Typeshttpd_t...
# semodule -l | grep permissivepermissive_httpd_t 1.0permissivedomains 21
# semanage permissive -d httpd_t
![Page 53: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/53.jpg)
53
SELinux логирование и аудит
● SELinux логирует все запрещенные операции через Linux Audit-Subsystem
● При запущенном auditd логи SELinux пишутся по умолчанию в файл /var/log/audit/audit.log
● При остановленном auditd логи SELinux пишутся в kernel ring buffer
● Сообщения от SELinux имеют тип Access Vector Cache (AVC)
![Page 54: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/54.jpg)
54
Access Vector Cache (AVC)
● Access Vector Cache (AVC) — это часть системы безопасности SELinux в ядре отвечающая за проверку и соблюдение SELinux правил
● SELinux решения кешируются в AVC
● Если результат решения есть в кеше, то он используется. Иначе проверяется SELinux политика и результат кеширует.
![Page 55: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/55.jpg)
55
Пример avcstat
# avcstat 1 lookups hits misses allocs reclaims frees 736510 730700 5810 5810 5216 5307 18 18 0 0 0 0 13 13 0 0 0 0 24 21 3 3 0 0 3302 3302 0 0 0 0 147 147 0 0 0 0
![Page 56: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/56.jpg)
56
Поля AVC сообщения
● SELinux action — denied
● Permission — { write }
● Process ID — pid=1634
● Process name — comm="rsync"
● Target name — name="backup"
● Target device — dev="vda1"
● Target inode — ino=1075368783
● Source context — scontext=system_u:system_r:rsync_t:s0
● Target context — tcontext=unconfined_u:object_r:var_t:s0
● Resource class — tclass=dir
![Page 57: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/57.jpg)
57
Dontaudit правила
● Разработчики SELinux политики могут добавлять в политику dontaudit правила, чтобы не логировать некоторые ошибки и не засорять логи
● Dontaudit правила можно временно отключить для расследования SELinux запретов
![Page 58: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/58.jpg)
58
Пример отключения dontaudit правил
# seinfo | grep -E 'Allow|Dontaudit' Allow: 95588 Neverallow: 0 Auditallow: 160 Dontaudit: 8368
# semodule -BD
# semodule -B
# semanage dontaudit off
# semanage dontaudit on
![Page 59: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/59.jpg)
59
Расследование SELinux запретов
● Утилиты aureport, ausearch
● Проверить DAC
● Permissive режим
● Выключить Dontaudit
![Page 60: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/60.jpg)
60
Часть 3. Контекст файлов и домен процессов
![Page 61: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/61.jpg)
61
Краткое содержание части 3
● SELinux контекст файлов и директорий
● Регулярные выражения контекста
● Установка контекста файлов
● Настраиваемые типы
● Type transition
● SELinux контекст процессов
● Domain transition
![Page 62: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/62.jpg)
62
SELinux контекст файлов и директорий
● Контекст файлов и директорий хранится в расширенных атрибутах (англ. extended attributes) файловой системы
● Если файловая система не поддерживает extended attributes, то контекст определяется при монтирования файловой системы
● Если SELinux не может определить контекст файла или директории, то используется контекст по умолчанию file_t
![Page 63: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/63.jpg)
63
Пример получения контекста файлов
# ls -Z /etc/shadow-rw-------. root root system_u:object_r:shadow_t:s0 /etc/shadow
# stat /etc/shadow | grep ContextContext: system_u:object_r:shadow_t:s0
# getfattr -n security.selinux /etc/shadowsecurity.selinux="system_u:object_r:shadow_t:s0"
# mount image.iso /media# ls -dZ /mediadrwxr-xr-x. root root system_u:object_r:iso9660_t:s0 /media
# mount image.iso /media -o context="system_u:object_r:public_content_t:s0"# ls -dZ /mediadrwxr-xr-x. root root system_u:object_r:public_content_t:s0 /media
![Page 64: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/64.jpg)
64
Регулярные выражения контекста
● SELinux политика содержит описание контекста файлов и директорий в виде регулярных выражений
● Список регулярных выражений хранится в директории /etc/selinux/<store>/contexts/files
● Контекст файлов и директорий на диске может отличаться от регулярного выражения. Существуют утилиты для проверки и смены контекста.
![Page 65: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/65.jpg)
65
Формат регулярного выражения контекста
● Регулярное выражение
● SELinux класс (тип) файла
● SELinux контекст
![Page 66: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/66.jpg)
66
# semanage fcontext -lSELinux fcontext type Context
/ directory system_u:object_r:root_t:s0/.* all files system_u:object_r:default_t:s0/[^/]+ regular file system_u:object_r:etc_runtime_t:s0/\.autofsck regular file system_u:object_r:etc_runtime_t:s0/\.autorelabel regular file system_u:object_r:etc_runtime_t:s0/\.ismount-test-file regular file system_u:object_r:sosreport_tmp_t:s0/\.snapshots(/.*)? all files system_u:object_r:snapperd_data_t:s0...
# findcon /etc/selinux/targeted/contexts/files/file_contexts -p /var/.* system_u:object_r:default_t:s0/[^/]+ -- system_u:object_r:etc_runtime_t:s0/var system_u:object_r:var_t:s0
# findcon /etc/selinux/targeted/contexts/files/file_contexts -p /etc/shadow/.* system_u:object_r:default_t:s0/etc/.* system_u:object_r:etc_t:s0/etc/shadow.* -- system_u:object_r:shadow_t:s0
Пример регулярных выражений контекста
![Page 67: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/67.jpg)
67
Классы (типы) файлов
# semanage fcontext -h... -f {a,f,d,c,b,s,l,p}, --ftype {a,f,d,c,b,s,l,p} File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use -d to match only directories or -- to match only regular files. The following file type options can be passed: -- (regular file),-d (directory),-c (character device), -b (block device),-s (socket),-l (symbolic link),-p (named pipe) If you do not specify a file type, the file type will default to "all files"....
![Page 68: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/68.jpg)
68
Приоритет выражений контекста
Выражение B более точное, если:
● Стока A содержит регулярное выражение, а строка B не содержит
● Количество символов до регулярного выражения в строке A меньше, чем количество символов до регулярного выражения в строке B
● Количество символов в строке A меньше, чем количество символов в строке B
● В строке A не указан тип файла, а в строке B указан
![Page 69: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/69.jpg)
69
Приоритет выражений контекста
Локальные выражения (добавленные через semanage fcontext) имеют более высокий приоритет, чем выражения в SELinux политике!
![Page 70: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/70.jpg)
70
Установка контекста файлов
Для установки SELinux контекста файла процесс должен иметь:
● DAC права на изменение атрибутов файла
● MAC (SELinux) права relabelfrom и relabelto
![Page 71: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/71.jpg)
71
Утилиты для установки контекста
● chcon
● chcat
● restorecon
● fixfiles (RHEL)
● rlpkg (Gentoo)
● setfiles
● setfattr
![Page 72: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/72.jpg)
72
Пример установки контекста
# chcon -R -t httpd_sys_content_t /srv/www
# chcon --reference /var/www /srv/www
# semanage fcontext -a -t httpd_sys_content_t "/srv/www(./*)?"# restorecon -R /srv/www
# semanage fcontext -a -e /var/www /srv/www# restorecon -R /srv/www
# fixfiles -R openssh restore
# touch /.autorelabel# reboot
![Page 73: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/73.jpg)
73
Настраиваемые типы
● Настраиваемые типы (англ. customizable types) — это SELinux типы, которые предназначены для динамического назначения на файлы без изменения политики
● Не сбрасываются утилитами restorecon, fixfiles, setfiles без ключа -F
● Перечислены в файле /etc/selinux/<store>/contexts/customizable_types
![Page 74: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/74.jpg)
74
Пример настраиваемых типов
# cat /etc/selinux/targeted/contexts/customizable_typessandbox_file_tsvirt_image_tsvirt_home_tsvirt_sandbox_file_tvirt_content_thttpd_user_htaccess_thttpd_user_script_exec_thttpd_user_rw_content_thttpd_user_ra_content_thttpd_user_content_tgit_session_content_thome_bin_tuser_tty_device_t
# sesearch -AC -s user_t -p relabelfrom# sesearch -AC -s user_t -p relabelto
![Page 75: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/75.jpg)
75
Наследование контекста
● При создании файла SELinux контекст наследуется от родительской директории
● Исключение составляют SELinux-aware приложения и type transition правила
![Page 76: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/76.jpg)
76
Пример наследования контекста
# mkdir testdir# ls -dZ testdirdrwxr-xr-x. root root system_u:object_r:user_home_t:s0 testdir
# touch testdir/testfile1# ls -Z testdir-rw-r--r--. root root system_u:object_r:user_home_t:s0 testdir/testfile1
# chcon -t home_bin_t testdir# ls -dZ testdirdrwxr-xr-x. root root system_u:object_r:home_bin_t:s0 testdir
# touch testdir/testfile2# ls -Z testdir-rw-r--r--. root root system_u:object_r:user_home_t:s0 testdir/testfile1-rw-r--r--. root root system_u:object_r:home_bin_t:s0 testdir/testfile2
![Page 77: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/77.jpg)
77
Type transition
● Type transition — это правила SELinux политики, которые изменяют SELinux контекст объекта в зависимости от условий.
● Named file transition — это type transition правила, которые учитывают имя объекта.
![Page 78: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/78.jpg)
78
Пример type transition правил
# sesearch -T -s httpd_t -t var_log_tFound 1 semantic te rules: type_transition httpd_t var_log_t : file httpd_log_t;
# sesearch -T -s httpd_t -t tmp_tFound 4 semantic te rules: type_transition httpd_t tmp_t : file httpd_tmp_t; type_transition httpd_t tmp_t : dir httpd_tmp_t; type_transition httpd_t tmp_t : lnk_file httpd_tmp_t; type_transition httpd_t tmp_t : sock_file httpd_tmp_t;
Found 2 named file transition filename_trans:type_transition httpd_t tmp_t : file krb5_host_rcache_t "HTTP_23"; type_transition httpd_t tmp_t : file krb5_host_rcache_t "HTTP_48";
![Page 79: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/79.jpg)
79
SELinux контекст процессов
● У процессов есть контекст!
● SELinux тип процесса = SELinux домен
● Если не удается определить домен процесса, то домен процесса unlabeled_t
![Page 80: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/80.jpg)
80
Пример контекста процессов
# ps -u root -o label,command...system_u:system_r:kernel_t:s0 [kswapd0]system_u:system_r:init_t:s0 /usr/lib/systemd/systemdsystem_u:system_r:udev_t:s0 /usr/lib/systemd/systemd-udevdsystem_u:system_r:crond_t:s0 /usr/sbin/crondsystem_u:system_r:irqbalance_t:s0 /usr/sbin/irqbalancesystem_u:system_r:unconfined_service_t:s0 /usr/sbin/lldpdsystem_u:system_r:lvm_t:s0 /usr/sbin/lvmetadsystem_u:system_r:mcelog_t:s0 /usr/sbin/mcelogsystem_u:system_r:syslogd_t:s0 /usr/sbin/rsyslogdsystem_u:system_r:snmpd_t:s0 /usr/sbin/snmpdunconfined_u:unconfined_r:unconfined_t:s0 -bash...
![Page 81: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/81.jpg)
81
Domain transition
● При создании процесса SELinux контекст наследуется от родительского процесса
● Исключение составляют SELinux-aware приложения и type transition правила
● Type transition правила для процессов называются domain transition или process transition
![Page 82: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/82.jpg)
82
Схема domain transition правил
![Page 83: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/83.jpg)
83
Пример domain transition правил
# seinfo -rsystem_r -x | grep -E 'initrc_t|httpd_t' initrc_t httpd_t
# sesearch -AC -s httpd_t -t httpd_exec_t -c file -p entrypoint allow httpd_t httpd_exec_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open } ;
# sesearch -AC -s initrc_t -t httpd_exec_t -c file -p execute allow initrc_t exec_type : file { ioctl read getattr lock execute execute_no_trans open } ;
# sesearch -AC -s initrc_t -t httpd_t -c process -p transition allow initrc_domain daemon : process transition ;
# sesearch -T -s initrc_t -t httpd_exec_t type_transition initrc_t httpd_exec_t : process httpd_t;
![Page 84: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/84.jpg)
84
SELinux-aware приложения
SELinux-aware приложения используют SELinux API для управления контекстом создаваемых файлов и процессов (cron, login, ssh, httpd и др.)
![Page 85: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/85.jpg)
85
SELinux API
SELinux предоставляет API для приложений, например
● setcon
● setexeccon
● setfilecon
● setfscreatecon
● и др.
http://selinuxproject.org/page/LibselinuxAPISummary
![Page 86: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/86.jpg)
86
Пример Apache mod_selinux
# cat /etc/httpd/conf.vhosts.d/example.com.conf
<VirtualHost *:443> DocumentRoot /var/www/vhosts/site1.example.com ServerName site1.example.com selinuxDomainVal *:s0:c1 ...</VirtualHost>
<VirtualHost *:443> DocumentRoot /var/www/vhosts/site2.example.com ServerName site2.example.com selinuxDomainVal *:s0:c2 ...</VirtualHost>
# sesearch -AC -s httpd_t -c process -p dyntransitionFound 1 semantic av rules: allow httpd_t httpd_t : process { ... dyntransition ... } ;
# sesearch -AC -c process -p dyntransition Found 141 semantic av rules:...
![Page 87: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/87.jpg)
87
SELinux атрибуты типов
SELinux атрибуты типов (англ. type attributes) — это тэги назначаемые для группировки типов с целью сокращения количества SELinux правил
![Page 88: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/88.jpg)
88
Пример SELinux атрибутов типов
# sesearch -AC -s initrc_t -t httpd_t -c process -p transition allow initrc_domain daemon : process transition ;
# seinfo -ainitrc_domain -x initrc_domain piranha_pulse_t initrc_t openshift_initrc_t kdumpctl_t init_t glusterd_t cluster_t condor_startd_t
# seinfo -adomain -x | wc -l 798
![Page 89: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/89.jpg)
89
Часть 4. SELinux пользователи и роли
![Page 90: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/90.jpg)
90
Краткое содержание части 4
● SELinux контекст пользователя
● Unconfined домены
● Linux логин, SELinux пользователь и роль
● Возможности SELinux пользователей
● Смена SELinux контекста при авторизации
● Контекст в зависимости от приложения
![Page 91: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/91.jpg)
91
SELinux контекст пользователя
При логине в систему пользователь получает SELinux контекст, который определяет права пользователя в системе.
![Page 92: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/92.jpg)
92
Пример информации о пользователе
# id -Zunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# ps -o label,command LABEL COMMANDunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 -bashunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ps -o label,command
![Page 93: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/93.jpg)
93
Пример информации о пользователе
# seinfo -uUsers: 8 sysadm_u system_u xguest_u root guest_u staff_u user_u unconfined_u
# seinfo -uunconfined_u -x unconfined_u default level: s0 range: s0 - s0:c0.c1023 roles: object_r system_r unconfined_r
![Page 94: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/94.jpg)
94
Unconfined домены
● По умолчанию в SELinux все запрещено!
● Большинство приложений не имеет своих политик
● Политики ограниченных приложений нужно обновлять так же часто, как и сами приложения
● Для многих приложений ограничения не требуются
![Page 95: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/95.jpg)
95
Сложность разработки SELinux доменов
![Page 96: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/96.jpg)
96
Пример unconfined доменов
# seinfo -aselinux_unconfined_type -x | wc -l83
# seinfo -aselinux_unconfined_type -x... crond_t inetd_t init_t tuned_t udev_t kernel_t httpd_unconfined_script_t rpm_script_t samba_unconfined_script_t unconfined_cronjob_t unconfined_dbusd_t unconfined_sendmail_t unconfined_service_t unconfined_t zabbix_script_t...
![Page 97: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/97.jpg)
97
Linux логин, SELinux пользователь и роль
● При входе в систему процесс, через который происходит авторизация, определяет SELinux пользователя по Linux логину (учетной записи)
● По SELinux пользователю определяется SELinux роль пользователя
● SELinux роль пользователя ограничивает доступные пользователю SELinux типы
● SELinux типы ограничены SELinux политикой
![Page 98: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/98.jpg)
98
Linux логин, SELinux пользователь и роль
![Page 99: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/99.jpg)
99
Пример SELinux login mapping
# semanage login -l
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 *
# semanage login -a -s user_u aleksey
# semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *aleksey user_u s0 *root unconfined_u s0-s0:c0.c1023 *system_u system_u s0-s0:c0.c1023 *
![Page 100: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/100.jpg)
100
Пример SELinux users
# semanage user -l
Labeling MLS/ SELinux User Prefix MCS Level SELinux Roles
guest_u user s0 guest_rroot user s0 staff_r sysadm_r system_r unconfined_rstaff_u user s0 staff_r sysadm_r system_r unconfined_rsysadm_u user s0 sysadm_rsystem_u user s0 system_r unconfined_runconfined_u user s0 system_r unconfined_ruser_u user s0 user_rxguest_u user s0 xguest_r
![Page 101: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/101.jpg)
101
Возможности SELinux пользователей
![Page 102: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/102.jpg)
102
Пример создания SELinux login mapping
[root@localhost ~]# useradd -g users aleksey[root@localhost ~]# passwd aleksey
[aleksey@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[aleksey@localhost ~]$ su -Password: ********[root@localhost ~]#
[root@localhost ~]# semanage login -a -s user_u %users
[aleksey@localhost ~]$ id -Zuser_u:user_r:user_t:s0
[aleksey@localhost ~]$ su - Password: ********su: Authentication failure
[root@localhost ~]# aureport -a -ts recent1. 01/26/2016 16:54:39 su user_u:user_r:user_t:s0 105 capability setuid user_u:user_r:user_t:s0 denied 337
![Page 103: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/103.jpg)
103
Пример создания SELinux user
[root@localhost ~]# useradd aleksey[root@localhost ~]# passwd aleksey[root@localhost ~]# semanage user -a -R user_r aleksey_u[root@localhost ~]# semanage login -a -s aleksey_u aleksey
[aleksey@localhost ~]$ id -Zaleksey_u:user_r:user_t:s0
[aleksey@localhost ~]$ mkdir test[aleksey@localhost ~]$ ls -dZ testdrwxrwxr-x. aleksey aleksey aleksey_u:object_r:user_home_t:s0 test
![Page 104: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/104.jpg)
104
Смена SELinux контекста пользователя
● Пользователю может быть доступно несколько SELinux ролей и типов
● Для смены SELinux роли и типа существуют утилиты newrole, sudo, run_init, runcon и др.
![Page 105: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/105.jpg)
105
Пример смены контекста пользователя
[root@localhost ~]# useradd aleksey[root@localhost ~]# passwd aleksey[root@localhost ~]# semanage login -a -s staff_u aleksey
[aleksey@localhost ~]$ id -Zstaff_u:staff_r:staff_t:s0-s0:c0.c1023
[aleksey@localhost ~]$ sudo aureport -aError opening /var/log/audit/audit.log (Permission denied)
[aleksey@localhost ~]$ sudo -r sysadm_r -t sysadm_t aureport -aAVC Report...
[aleksey@localhost ~]$ newrole -r sysadm_rPassword: ********
[aleksey@localhost ~]$ id -Zstaff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
![Page 106: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/106.jpg)
106
Смена SELinux контекста при авторизации
● Приложения отвечающие за логин и авторизацию пользователя: login, ssh, kdm, gdm и др.
● Вместо модификации всех приложений используется PAM модуль pam_selinux
● pam_selinux использует SELinux API и устанавливает SELinux контекст для следующего execve вызова
![Page 107: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/107.jpg)
107
Пример конфигурации pam_selinux
# cat /etc/pam.d/remote
#%PAM-1.0auth required pam_securetty.soauth substack password-authauth include postloginaccount required pam_nologin.soaccount include password-authpassword include password-auth# pam_selinux.so close should be the first session rulesession required pam_selinux.so closesession required pam_loginuid.so# pam_selinux.so open should only be followed by sessions to be executed in the user contextsession required pam_selinux.so opensession required pam_namespace.sosession optional pam_keyinit.so force revokesession include password-authsession include postlogin
![Page 108: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/108.jpg)
108
Контекст в зависимости от приложения
● SELinux контекст по умолчанию зависит от приложения используемого для авторизации
● В файле targeted/contexts/default_contexts хранится контекст по умолчанию в зависимости от контекста приложения
● В директории targeted/contexts/users хранится контекст по умолчанию в зависимости от SELinux пользователя и контекста приложения
● Результат можно проверить утилитой getseuser https://github.com/SELinuxProject/selinux/wiki/Tools
![Page 109: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/109.jpg)
109
Пример контекста по умолчанию
# cat /etc/selinux/targeted/contexts/default_contexts
system_r:crond_t:s0 system_r:system_cronjob_t:s0system_r:local_login_t:s0 user_r:user_t:s0system_r:remote_login_t:s0 user_r:user_t:s0system_r:sshd_t:s0 user_r:user_t:s0system_r:sulogin_t:s0 sysadm_r:sysadm_t:s0system_r:xdm_t:s0 user_r:user_t:s0
# cat /etc/selinux/targeted/contexts/users/unconfined_u
system_r:crond_t:s0 unconfined_r:unconfined_t:s0system_r:initrc_t:s0 unconfined_r:unconfined_t:s0system_r:local_login_t:s0 unconfined_r:unconfined_t:s0system_r:remote_login_t:s0 unconfined_r:unconfined_t:s0system_r:rshd_t:s0 unconfined_r:unconfined_t:s0system_r:sshd_t:s0 unconfined_r:unconfined_t:s0system_r:sysadm_su_t:s0 unconfined_r:unconfined_t:s0system_r:unconfined_t:s0 unconfined_r:unconfined_t:s0system_r:initrc_su_t:s0 unconfined_r:unconfined_t:s0unconfined_r:unconfined_t:s0 unconfined_r:unconfined_t:s0system_r:xdm_t:s0 unconfined_r:unconfined_t:s0
![Page 110: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/110.jpg)
110
Часть 5. Управление сетевыми соединениями
![Page 111: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/111.jpg)
111
Краткое содержание части 5
● SELinux поддержка для TCP и UDP
● SELinux поддержка для netfilter
![Page 112: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/112.jpg)
112
SELinux поддержка для TCP и UDP
● Многие приложения не должны сами устанавливать сетевые соединения, а если должны, то на ограниченный список портов
● SELinux ограничивает сетевые сокеты, на которых процессу разрешено слушать и к которым разрешено подключаться разрешениями name_bind и name_connect соответственно
● SELinux маппит TCP и UDP сокеты к tcp_socket и udp_socket классам соответственно
● TCP и UDP порты по соглашению маркируются типом с префиксом "_port_t"
![Page 113: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/113.jpg)
113
Пример SELinux маркировки TCP и UDP
# semanage port -l | grep ^httphttp_cache_port_t tcp 8080, 8118, 8123, 10001-10010http_cache_port_t udp 3130http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
# semanage port -l | grep ^ftpftp_data_port_t tcp 20ftp_port_t tcp 21, 989, 990ftp_port_t udp 989, 990
![Page 114: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/114.jpg)
114
Пример SELinux маркировки ssh_port_t
# echo 'Port 22' >> /etc/ssh/sshd_config# echo 'Port 2222' >> /etc/ssh/sshd_config# systemctl restart sshd.service
# aureport -a -ts recent...1. 02/10/2016 16:14:25 sshd system_u:system_r:sshd_t:s0-s0:c0.c1023 49 tcp_socket name_bind system_u:object_r:unreserved_port_t:s0 denied 72
# semanage port -a -t ssh_port_t -p tcp 2222
# semanage port -l | grep ^sshssh_port_t tcp 2222, 22
![Page 115: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/115.jpg)
115
Пример SELinux правил для TCP и UDP
# sesearch -AC -s httpd_t -t http_port_t... allow httpd_t port_type : tcp_socket { recv_msg send_msg } ; allow httpd_t port_type : udp_socket { recv_msg send_msg } ; allow httpd_t http_port_t : tcp_socket name_bind ; allow httpd_t http_port_t : udp_socket name_bind ; DT allow httpd_t port_type : tcp_socket name_connect ; [ httpd_can_network_connect ]...
Разрешения recv_msg и send_msg устаревшие и больше не используются!
![Page 116: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/116.jpg)
116
Пример SELinux маркировки в netfilter
# cat /proc/net/nf_conntrackipv4 2 tcp 6 432000 ESTABLISHED src=192.168.111.142 dst=192.168.111.1 sport=22 dport=39647 src=192.168.111.1 dst=192.168.111.142 sport=39647 dport=22 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
![Page 117: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/117.jpg)
117
Пример SELinux маркировки в netfilter
iptables -t security -A INPUT -p tcp -m multiport --dports 80,443 -j SECMARK --selctx system_u:object_r:http_server_packet_t:s0
iptables -t security -A INPUT -m state --state ESTABLISHED,RELATED -j CONNSECMARK --save
iptables -t security -A OUTPUT -p tcp -m multiport --dports 80,443 -j SECMARK --selctx system_u:object_r:http_client_packet_t:s0
iptables -t security -A OUTPUT -m state --state ESTABLISHED,RELATED -j CONNSECMARK --save
![Page 118: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/118.jpg)
118
Пример SELinux правил для netfilter
# sesearch -AC -s httpd_t -t http_server_packet_tFound 1 semantic av rules: allow httpd_t http_server_packet_t : packet { send recv } ;
# sesearch -AC -s httpd_t -t mssql_client_packet_tFound 1 semantic av rules:DT allow httpd_t mssql_client_packet_t : packet { send recv } ; [ httpd_can_network_connect_db ]
# sesearch -AC -s squid_t -t http_client_packet_tFound 2 semantic av rules: allow squid_t http_client_packet_t : packet { send recv } ; ET allow squid_t packet_type : packet { send recv } ; [ squid_connect_any ]
# sesearch -AC -t unlabeled_t -c packet -p sendFound 5 semantic av rules: allow domain unlabeled_t : packet { send recv } ;...
![Page 119: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/119.jpg)
119
Пример SELinux правил для netfilter
*security:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -j SECMARK --selctx system_u:object_r:internet_packet_t:s0-A INPUT -p tcp -m tcp --dport 22 -j SECMARK --selctx system_u:object_r:ssh_server_packet_t:s0-A INPUT -p tcp -m multiport --dports 80,443 -j SECMARK --selctx system_u:object_r:http_server_packet_t:s0-A INPUT -m state --state RELATED,ESTABLISHED -j CONNSECMARK --save-A OUTPUT -j SECMARK --selctx system_u:object_r:intranet_packet_t:s0-A OUTPUT -p tcp -m tcp --sport 22 -j SECMARK --selctx system_u:object_r:ssh_server_packet_t:s0-A OUTPUT -p tcp -m multiport --sports 80,443 -j SECMARK --selctx system_u:object_r:http_server_packet_t:s0-A OUTPUT -m state --state RELATED,ESTABLISHED -j CONNSECMARK --saveCOMMIT
![Page 120: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/120.jpg)
120
Часть 6. Работа с SELinux политиками
![Page 121: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/121.jpg)
121
Управление SELinux политикой
● Изменения режима работы SELinux
● Переключение booleans
● Изменение контекста файлов и директорий
● Изменение контекста пользователей
● Изменение контекста сетевых соединений
● Изменение контекста процессов
● SELinux модули
![Page 122: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/122.jpg)
122
SELinux пакеты
● policycoreutils, selinux-policy, selinux-policy-targeted, libselinux, libselinux-utils, libselinux-python — базовый набор пакетов в CentOS 7 (установлены по умолчанию)
● selinux-policy-devel, setools-console, policycoreutils-python, policycoreutils-newrole, policycoreutils-gui — пакеты для работы с политиками в CentOS 7
![Page 123: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/123.jpg)
123
Пример system-config-selinux
![Page 124: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/124.jpg)
124
Пример изменения контекста rsync
[root@vm100 ~]# yum -y install rsync[root@vm100 ~]# useradd -d /srv/backup -M -r -s /usr/sbin/nologin backup[root@vm100 ~]# id backupuid=997(backup) gid=995(backup) groups=995(backup)[root@vm100 ~]# mkdir -m 0770 -p /srv/backup[root@vm100 ~]# chown root:backup /srv/backup[root@vm100 ~]# ls -ld /srv/backupdrwxrwx---. 2 root backup 6 Nov 13 10:37 /srv/backup[root@vm100 ~]# cat << EOF >> /etc/rsyncd.conf[backup] path = /srv/backup uid = backup gid = backup read only = noEOF[root@vm100 ~]# systemctl start rsyncd.service
[root@vm200 ~]# yum -y install rsync[root@vm200 ~]# rsync -r rsync://vm100backup[root@vm200 ~]# rsync -r /etc rsync://vm100/backup rsync: mkdir "/etc" (in backup) failed: Permission denied (13)
![Page 125: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/125.jpg)
125
Пример изменения контекста rsync
[root@vm100 ~]# aureport -a -ts recent1. 11/13/2015 10:45:36 rsync system_u:system_r:rsync_t:s0 83 dir write unconfined_u:object_r:var_t:s0 denied 4962. 11/13/2015 10:45:36 rsync system_u:system_r:rsync_t:s0 83 dir write unconfined_u:object_r:var_t:s0 denied 497[root@vm100 ~]# yum -y install policycoreutils-python setools-console[root@vm100 ~]# sesearch -AC -s rsync_t -c dir -p write...DT allow rsync_t rsync_data_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir open } ; [ rsync_client ]...[root@vm100 ~]# semanage boolean -m -1 rsync_client[root@vm100 ~]# semanage fcontext -a -t rsync_data_t '/srv/backup(/.*)?'[root@vm100 ~]# restorecon -iFRv /srv/backuprestorecon reset /srv/backup context unconfined_u:object_r:rsync_data_t:s0->system_u:object_r:rsync_data_t:s0
[root@vm200 ~]# rsync -rv /etc rsync://vm100/backup...sent 19980256 bytes received 16500 bytes 13331170.67 bytes/sec
![Page 126: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/126.jpg)
126
Пример ошибки audit2why
# ausearch -m avc -a recent | audit2why type=AVC msg=audit(1447404336.985:496): avc: denied { write } for pid=1634 comm="rsync" name="backup" dev="vda1" ino=1075368783 scontext=system_u:system_r:rsync_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir
Was caused by: The boolean rsync_full_access was set incorrectly. Description: Allow rsync to full access
Allow access by executing: # setsebool -P rsync_full_access 1
audit2why сразу предлагает разрешить полный доступ, хотя достаточно сменить стандартный контекст таргет директории
![Page 127: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/127.jpg)
127
Пример переключения SELinux booleans
# semanage boolean -l | grep httpd_can_network_connecthttpd_can_network_connect (off , off) Allow HTTPD scripts and modules to connect to the network using TCP.
# getsebool httpd_can_network_connecthttpd_can_network_connect --> off
# setsebool httpd_can_network_connect on
# semanage boolean -l | grep httpd_can_network_connecthttpd_can_network_connect (on , off)
# setsebool -P httpd_can_network_connect on
# semanage boolean -l | grep httpd_can_network_connecthttpd_can_network_connect (on , on)
# semanage boolean -m --off httpd_can_network_connect
![Page 128: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/128.jpg)
128
Что именно включает SELinux boolean?
# sesearch -AC -b httpd_can_network_connectFound 17 semantic av rules:
DT allow httpd_t port_type : tcp_socket name_connect ; [ httpd_can_network_connect ]...
# seinfo -aport_type -x | wc -l270
DT – статус disabled (D) или enabled (E) и условие включения true (T) или false (F).
![Page 129: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/129.jpg)
129
Пример создания SELinux модуля rsync
Задача – настроить два сервера MariaDB Master / Standby с репликацией данных через rsync демон.
![Page 130: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/130.jpg)
130
Пример создания SELinux модуля rsync
[root@vm100 ~]# yum -y install mariadb-server rsync[root@vm100 ~]# cat << EOF >> /etc/rsyncd.conf[mysql] path = /var/lib/mysql uid = mysql gid = mysql read only = noEOF[root@vm100 ~]# systemctl start rsyncd.service
[root@vm200 ~]# yum -y install mariadb-server rsync[root@vm200 ~]# systemctl start mariadb.service[root@vm200 ~]# rsync -r rsync://vm100mysql[root@vm200 ~]# rsync -r /var/lib/mysql/* rsync://vm100/mysql@ERROR: chroot failedrsync error: error starting client-server protocol (code 5)
[root@vm100 ~]# setenforce 0
[root@vm200 ~]# rsync -rv /var/lib/mysql/* rsync://vm100/mysql...sent 30408091 bytes received 1825 bytes 60819832.00 bytes/sec
![Page 131: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/131.jpg)
131
Пример создания SELinux модуля rsync
[root@vm100 ~]# yum -y install selinux-policy-devel setools-console mcstrans policycoreutils-python @Development Tools
[root@vm100 ~]# mkdir rsync_local[root@vm100 ~]# cd rsync_local[root@vm100 ~]# sepolicy generate -n rsync_local --customize -d rsync_t[root@vm100 ~]# ausearch -m avc -ts recent -se rsync_t | audit2allow -r -m rsync_local > rsync_local.te
[root@vm100 ~]# vim rsync_local.te[root@vm100 ~]# vim rsync_local_selinux.spec[root@vm100 ~]# ./rsync_local.sh[root@vm100 ~]# setenforce 1
[root@vm200 ~]# rsync -rv /var/lib/mysql/* rsync://vm100/mysql...sent 30408091 bytes received 1825 bytes 60819832.00 bytes/sec
[root@vm100 ~]# find -name '*rpm' ./rsync_local_selinux-1.0-1.el7.centos.src.rpm./noarch/rsync_local_selinux-1.0-1.el7.centos.noarch.rpm
![Page 132: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/132.jpg)
132
Пример анализа SELinux модуля
# yum -y install bzip2 checkpolicy# cp /etc/selinux/targeted/modules/active/modules/rsync_local.pp rsync_local.mod.bz2# bzip2 -d rsync_local.mod.bz2# sedismod rsync_local.mod ...Select a command:1) display unconditional AVTAB...
Command ('m' for menu): 1... allow [rsync_t] [mysqld_db_t] : [dir] { write search remove_name create getattr add_name }; allow [rsync_t] [mysqld_db_t] : [file] { rename write getattr setattr read create open };
# rm rsync_local.mod
![Page 133: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/133.jpg)
133
Пример selinux-polgengui
![Page 134: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/134.jpg)
134
Часть 7. SELinux в продакшн среде
![Page 135: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/135.jpg)
135
SELinux в продакшн среде
● Включен по умолчанию везде
● Управляется политикой конфигурации
● Не используется semanage
● Мониторинг
![Page 136: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/136.jpg)
136
Политика конфигурации SELinux
● Устанавливает пакеты с политиками
● setenforce 1
● Daily restorecon
● Booleans
● File contexts
● Port contexts
● SELinux users
![Page 137: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/137.jpg)
137
Мониторинг
● SELinux режим
● SELinux модули
● SELinux permissive типы
● SELinux booleans
● При срабатывании авто инцидент
![Page 138: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/138.jpg)
138
Вопросы?
![Page 139: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/139.jpg)
139
Литература
https://en.wikipedia.org/wiki/Security-Enhanced_Linux
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide
https://www.packtpub.com/networking-and-servers/selinux-system-administration
![Page 140: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/140.jpg)
140
Спасибо за внимание!
![Page 141: SELinux for system administrators](https://reader034.fdocuments.net/reader034/viewer/2022052212/58e53a391a28ab18318b4813/html5/thumbnails/141.jpg)
141
Алексей Чудов
Security Team Lead, System Administrator at OK.RU
https://www.linkedin.com/in/AlekseyChudov
Riga 2016