selinux for system administrators

141
SELinux для системных администраторов

Upload: aleksey-chudov

Post on 06-Apr-2017

164 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: SELinux for system administrators

SELinux для системных администраторов

Page 2: SELinux for system administrators

2

Что такое SELinux и как его использовать?

Page 3: SELinux for system administrators

3

Cодержание

1. Фундаментальные понятия в SELinux

2. Режимы работы SELinux и логирование

3. Контекст файлов и домен процессов

4. SELinux пользователи и роли

5. Управление сетевыми соединениями

6. Работа с SELinux политиками

7. SELinux в продакшн среде

Page 4: SELinux for system administrators

4

Часть 1. Фундаментальные понятия в SELinux

Page 5: SELinux for system administrators

5

Краткое содержание части 1

● Определение SELinux

● Избирательное управление доступом

● Принудительное управление доступом

● Фреймворк Linux Security Modules

● SELinux контекст

● SELinux политика

● SELinux модули

Page 6: SELinux for system administrators

6

Security-Enhanced Linux

Security-Enhanced Linux (SELinux) – это модуль ядра Linux и набор пользовательских утилит для реализации механизма принудительного контроля доступа (англ. Mandatory Access Control, MAC).

Page 7: SELinux for system administrators

7

Управление доступом в Linux

● Избирательное управление доступом (англ. Discretionary Access Control, DAC)

● Принудительное управление доступом (англ. Mandatory Access Control, MAC)

Page 8: SELinux for system administrators

8

Избирательное управление доступом

Избирательное управление доступом (англ. Discretionary Access Control, DAC) — управление доступом субъектов к объектам на основе списков управления доступом или матрицы доступа.

Page 9: SELinux for system administrators

9

Discretionary Access Control в Linux

Механизм Discretionary Access Control (DAC) в Linux основан на сравнении пользователя и группы процесса с владельцем и группой файла, директории или другого ресурса, к которому этот процесс обращается.

Page 10: SELinux for system administrators

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

11

Принудительное управление доступом

Принудительное управление доступом (англ. Mandatory Access Control, MAC) — управление доступом субъектов к объектам основанное на назначении метки конфиденциальности для информации, содержащейся в объектах, и выдаче официальных разрешений (допуска) субъектам на обращение к информации такого уровня конфиденциальности.

Page 12: SELinux for system administrators

12

Mandatory Access Control в Linux

Механизм Mandatory Access Control (MAC) в Linux основан на политике безопасности описывающей разрешенные операции для каждого объекта политики. Соблюдение политики безопасности гарантирует ядро через фреймворк Linux Security Modules (LSM).

Page 13: SELinux for system administrators

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

14

Linux Security Modules

Linux Security Modules (LSM) — это фреймворк добавляющий в ядро Linux поддержку подключаемых модулей безопасности (AppArmor, SELinux, Smack, TOMOYO Linux).

Page 15: SELinux for system administrators

15

Схема работы LSM

Page 16: SELinux for system administrators

16

SELinux и DAC

● SELinux политика проверяется после DAC

● SELinux политика не может влиять на DAC

Page 17: SELinux for system administrators

17

SELinux контекст

● У всего есть контекст!

● Контекст (context) = метка (label)

● Контекст состоит из четырех полей

Page 18: SELinux for system administrators

18

Поля SELinux контекста

# id -Zcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Page 19: SELinux for system administrators

19

SELinux пользователь

● SELinux user ≠ Linux user

● Не меняется в течение сессии

● Используется для User-based access control (UBAC)

● Ограничивает SELinux роли пользователя

● По соглашению имеет суффикс "_u"

Page 20: SELinux for system administrators

20

Пример SELinux пользователей

● guest_u

● root

● staff_u

● sysadm_u

● system_u

● unconfined_u

● user_u

● xguest_u

Page 21: SELinux for system administrators

21

SELinux роль

● Может меняться в течение сессии

● Используется для Role-based access control (RBAC)

● Ограничивает SELinux типы пользователя

● По соглашению имеет суффикс "_r"

Page 22: SELinux for system administrators

22

Пример SELinux ролей

● guest_r

● staff_r

● sysadm_r

● system_r

● unconfined_r

● user_r

● xguest_r

Page 23: SELinux for system administrators

23

SELinux тип

● SELinux type = SELinux process domain

● Основной компонент SELinux targeted политики

● Используется для Type Enforcement

● По соглашению имеет суффикс "_t"

Page 24: SELinux for system administrators

24

Пример SELinux типов

● crond_t

● httpd_t

● irqbalance_t

● lvm_t

● mcelog_t

● snmpd_t

● syslogd_t

● unconfined_t

Page 25: SELinux for system administrators

25

Неограниченный домен

● Неограниченный домен (англ. unconfined domain или unconfined type) — это SELinux тип, на который не накладывается ни каких ограничений

● Позволяет запускать программы, для которых еще нет политики и работать в неограниченной консоли

● Неограниченные домены ограничены DAC

● По соглашению называется unconfined_t

Page 26: SELinux for system administrators

26

Sensitivity level

● Состоит из уровня конфиденциальности (префикс "s") и категории (префикс "c")

● Используется для Multi-Level Security (MLS) и Multi-Category Security (MCS)

● MLS реализует модель Белла — Лападулы

● MCS дополнительно ограничивает домен только своей категорией

Page 27: SELinux for system administrators

27

Модель Белла — Лападулы

Модель Белла — Лападулы — модель контроля и управления доступом, в которой невозможно создание информационных потоков от субъектов с более высоким уровнем доступа к субъектам с более низким уровнем доступа.

Page 28: SELinux for system administrators

28

Схема модели Белла — Лападулы

Unclassified

Confidential

Secret

Top SecretW

riteR

ead

no read up / no write down

Page 29: SELinux for system administrators

29

Пример Multi-Level Security (MLS)

# seinfo --sensitivity -x

Sensitivities: 1 s0 level s0:c0.c1023

Page 30: SELinux for system administrators

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

31

SELinux политика

● Определяет поведением системы

● Существуют разные реализации политик (англ. policy type или policy store)

● SELinux Policy Store содержит одну политику

● Только одна политика активна

● Смена политики требует рестарт системы

Page 32: SELinux for system administrators

32

Пример SELinux policy store

● strict

● targeted

● minimum

● mcs

● mls

Page 33: SELinux for system administrators

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

34

Policy deny_unknown

● Разрешенные операции (read, write, open, lock и др.) определены как в ядре Linux, так и в SELinux политике

● В новых версиях ядра Linux могут появиться операции, которых нет в политике

● Policy deny_unknown определяет, что делать в случае появления неизвестных операций

● Возможные варианты: allow, deny, reject

Page 35: SELinux for system administrators

35

Max kernel policy version

● Описывает максимальную версию SELinux политики, которую поддерживает ядро Linux

● При добавлении в ядро нового SELinux функционала версия увеличивается

Page 36: SELinux for system administrators

36

Kernel policy versions

Page 37: SELinux for system administrators

37

SELinux модули

● Изначально SELinux политика состояла из одного бинарного файла

● Современная SELinux политика состоит из базового модуля base.pp и отдельных модулей для приложений

● SELinux модули можно загружать / выгружать / отключать / включать без рестарта системы

Page 38: SELinux for system administrators

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

39

SELinux booleans

SELinux booleans — это «переключатели», которые при «включении» и «выключении» меняют поведение правил SELinux политики. Booleans используются разработчиками SELinux политики для создания условных правил (англ. conditional rules).

Page 40: SELinux for system administrators

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

41

Часть 2. Режимы работы SELinux и логирование

Page 42: SELinux for system administrators

42

Краткое содержание части 2

● Режимы работы SELinux

● Отключение SELinux

● Изменение режима SELinux

● Permissive домены

● SELinux логирование и аудит

Page 43: SELinux for system administrators

43

Режимы SELinux

● Enforcing — SELinux включен и политика безопасности соблюдается. Все нарушения логируются и запрещаются.

● Permissive — SELinux включен, но политика безопасности не соблюдается. Все нарушения логируются, но не запрещаются.

● Disabled — SELinux отключен. Для смены режима требуется рестарт системы.

Page 44: SELinux for system administrators

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

45

Отключение SELinux

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

Page 46: SELinux for system administrators

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

47

Изменение режима SELinux

● Команда setenforce переключает режим SELinux между permissive (0) и enforcing (1). Изменения вступают в силу сразу и действуют до перезагрузки системы.

● При старте системы режим работы зачитывается из конфигурационного файла /etc/selinux/config

● Boolean secure_mode_policyload запрещает изменение режима SELinux до перезагрузки

Page 48: SELinux for system administrators

48

Пример изменения режима SELinux

# getenforceEnforcing

# setenforce 0

# getenforcePermissive

# setenforce 1

# getenforceEnforcing

Page 49: SELinux for system administrators

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

50

SELinux параметры ядра

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

● selinux=0 — отключить SELinux

● enforcing=0 — включить SELinux permissive режим

● enforcing=1 — включить SELinux enforcing режим

Page 51: SELinux for system administrators

51

Permissive домены

● Начиная с Linux 2.6.26 (policy version 23) SELinux поддерживает permissive домены

● Вместо отключения SELinux для всей системы предпочтительно использовать permissive режим для отдельных доменов

Page 52: SELinux for system administrators

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

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

54

Access Vector Cache (AVC)

● Access Vector Cache (AVC) — это часть системы безопасности SELinux в ядре отвечающая за проверку и соблюдение SELinux правил

● SELinux решения кешируются в AVC

● Если результат решения есть в кеше, то он используется. Иначе проверяется SELinux политика и результат кеширует.

Page 55: SELinux for system administrators

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

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

57

Dontaudit правила

● Разработчики SELinux политики могут добавлять в политику dontaudit правила, чтобы не логировать некоторые ошибки и не засорять логи

● Dontaudit правила можно временно отключить для расследования SELinux запретов

Page 58: SELinux for system administrators

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

59

Расследование SELinux запретов

● Утилиты aureport, ausearch

● Проверить DAC

● Permissive режим

● Выключить Dontaudit

Page 60: SELinux for system administrators

60

Часть 3. Контекст файлов и домен процессов

Page 61: SELinux for system administrators

61

Краткое содержание части 3

● SELinux контекст файлов и директорий

● Регулярные выражения контекста

● Установка контекста файлов

● Настраиваемые типы

● Type transition

● SELinux контекст процессов

● Domain transition

Page 62: SELinux for system administrators

62

SELinux контекст файлов и директорий

● Контекст файлов и директорий хранится в расширенных атрибутах (англ. extended attributes) файловой системы

● Если файловая система не поддерживает extended attributes, то контекст определяется при монтирования файловой системы

● Если SELinux не может определить контекст файла или директории, то используется контекст по умолчанию file_t

Page 63: SELinux for system administrators

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

64

Регулярные выражения контекста

● SELinux политика содержит описание контекста файлов и директорий в виде регулярных выражений

● Список регулярных выражений хранится в директории /etc/selinux/<store>/contexts/files

● Контекст файлов и директорий на диске может отличаться от регулярного выражения. Существуют утилиты для проверки и смены контекста.

Page 65: SELinux for system administrators

65

Формат регулярного выражения контекста

● Регулярное выражение

● SELinux класс (тип) файла

● SELinux контекст

Page 66: SELinux for system administrators

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

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

68

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

Выражение B более точное, если:

● Стока A содержит регулярное выражение, а строка B не содержит

● Количество символов до регулярного выражения в строке A меньше, чем количество символов до регулярного выражения в строке B

● Количество символов в строке A меньше, чем количество символов в строке B

● В строке A не указан тип файла, а в строке B указан

Page 69: SELinux for system administrators

69

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

Локальные выражения (добавленные через semanage fcontext) имеют более высокий приоритет, чем выражения в SELinux политике!

Page 70: SELinux for system administrators

70

Установка контекста файлов

Для установки SELinux контекста файла процесс должен иметь:

● DAC права на изменение атрибутов файла

● MAC (SELinux) права relabelfrom и relabelto

Page 71: SELinux for system administrators

71

Утилиты для установки контекста

● chcon

● chcat

● restorecon

● fixfiles (RHEL)

● rlpkg (Gentoo)

● setfiles

● setfattr

Page 72: SELinux for system administrators

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

73

Настраиваемые типы

● Настраиваемые типы (англ. customizable types) — это SELinux типы, которые предназначены для динамического назначения на файлы без изменения политики

● Не сбрасываются утилитами restorecon, fixfiles, setfiles без ключа -F

● Перечислены в файле /etc/selinux/<store>/contexts/customizable_types

Page 74: SELinux for system administrators

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

75

Наследование контекста

● При создании файла SELinux контекст наследуется от родительской директории

● Исключение составляют SELinux-aware приложения и type transition правила

Page 76: SELinux for system administrators

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

77

Type transition

● Type transition — это правила SELinux политики, которые изменяют SELinux контекст объекта в зависимости от условий.

● Named file transition — это type transition правила, которые учитывают имя объекта.

Page 78: SELinux for system administrators

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

79

SELinux контекст процессов

● У процессов есть контекст!

● SELinux тип процесса = SELinux домен

● Если не удается определить домен процесса, то домен процесса unlabeled_t

Page 80: SELinux for system administrators

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

81

Domain transition

● При создании процесса SELinux контекст наследуется от родительского процесса

● Исключение составляют SELinux-aware приложения и type transition правила

● Type transition правила для процессов называются domain transition или process transition

Page 82: SELinux for system administrators

82

Схема domain transition правил

Page 83: SELinux for system administrators

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

84

SELinux-aware приложения

SELinux-aware приложения используют SELinux API для управления контекстом создаваемых файлов и процессов (cron, login, ssh, httpd и др.)

Page 85: SELinux for system administrators

85

SELinux API

SELinux предоставляет API для приложений, например

● setcon

● setexeccon

● setfilecon

● setfscreatecon

● и др.

http://selinuxproject.org/page/LibselinuxAPISummary

Page 86: SELinux for system administrators

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

87

SELinux атрибуты типов

SELinux атрибуты типов (англ. type attributes) — это тэги назначаемые для группировки типов с целью сокращения количества SELinux правил

Page 88: SELinux for system administrators

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

89

Часть 4. SELinux пользователи и роли

Page 90: SELinux for system administrators

90

Краткое содержание части 4

● SELinux контекст пользователя

● Unconfined домены

● Linux логин, SELinux пользователь и роль

● Возможности SELinux пользователей

● Смена SELinux контекста при авторизации

● Контекст в зависимости от приложения

Page 91: SELinux for system administrators

91

SELinux контекст пользователя

При логине в систему пользователь получает SELinux контекст, который определяет права пользователя в системе.

Page 92: SELinux for system administrators

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

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

94

Unconfined домены

● По умолчанию в SELinux все запрещено!

● Большинство приложений не имеет своих политик

● Политики ограниченных приложений нужно обновлять так же часто, как и сами приложения

● Для многих приложений ограничения не требуются

Page 95: SELinux for system administrators

95

Сложность разработки SELinux доменов

Page 96: SELinux for system administrators

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

97

Linux логин, SELinux пользователь и роль

● При входе в систему процесс, через который происходит авторизация, определяет SELinux пользователя по Linux логину (учетной записи)

● По SELinux пользователю определяется SELinux роль пользователя

● SELinux роль пользователя ограничивает доступные пользователю SELinux типы

● SELinux типы ограничены SELinux политикой

Page 98: SELinux for system administrators

98

Linux логин, SELinux пользователь и роль

Page 99: SELinux for system administrators

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

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

101

Возможности SELinux пользователей

Page 102: SELinux for system administrators

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

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

104

Смена SELinux контекста пользователя

● Пользователю может быть доступно несколько SELinux ролей и типов

● Для смены SELinux роли и типа существуют утилиты newrole, sudo, run_init, runcon и др.

Page 105: SELinux for system administrators

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

106

Смена SELinux контекста при авторизации

● Приложения отвечающие за логин и авторизацию пользователя: login, ssh, kdm, gdm и др.

● Вместо модификации всех приложений используется PAM модуль pam_selinux

● pam_selinux использует SELinux API и устанавливает SELinux контекст для следующего execve вызова

Page 107: SELinux for system administrators

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

108

Контекст в зависимости от приложения

● SELinux контекст по умолчанию зависит от приложения используемого для авторизации

● В файле targeted/contexts/default_contexts хранится контекст по умолчанию в зависимости от контекста приложения

● В директории targeted/contexts/users хранится контекст по умолчанию в зависимости от SELinux пользователя и контекста приложения

● Результат можно проверить утилитой getseuser https://github.com/SELinuxProject/selinux/wiki/Tools

Page 109: SELinux for system administrators

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

110

Часть 5. Управление сетевыми соединениями

Page 111: SELinux for system administrators

111

Краткое содержание части 5

● SELinux поддержка для TCP и UDP

● SELinux поддержка для netfilter

Page 112: SELinux for system administrators

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

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

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

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

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

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

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

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

120

Часть 6. Работа с SELinux политиками

Page 121: SELinux for system administrators

121

Управление SELinux политикой

● Изменения режима работы SELinux

● Переключение booleans

● Изменение контекста файлов и директорий

● Изменение контекста пользователей

● Изменение контекста сетевых соединений

● Изменение контекста процессов

● SELinux модули

Page 122: SELinux for system administrators

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

123

Пример system-config-selinux

Page 124: SELinux for system administrators

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

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

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

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

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

129

Пример создания SELinux модуля rsync

Задача – настроить два сервера MariaDB Master / Standby с репликацией данных через rsync демон.

Page 130: SELinux for system administrators

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

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

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

133

Пример selinux-polgengui

Page 134: SELinux for system administrators

134

Часть 7. SELinux в продакшн среде

Page 135: SELinux for system administrators

135

SELinux в продакшн среде

● Включен по умолчанию везде

● Управляется политикой конфигурации

● Не используется semanage

● Мониторинг

Page 136: SELinux for system administrators

136

Политика конфигурации SELinux

● Устанавливает пакеты с политиками

● setenforce 1

● Daily restorecon

● Booleans

● File contexts

● Port contexts

● SELinux users

Page 137: SELinux for system administrators

137

Мониторинг

● SELinux режим

● SELinux модули

● SELinux permissive типы

● SELinux booleans

● При срабатывании авто инцидент

Page 138: SELinux for system administrators

138

Вопросы?

Page 139: SELinux for system administrators

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

140

Спасибо за внимание!

Page 141: SELinux for system administrators

141

Алексей Чудов

Security Team Lead, System Administrator at OK.RU

https://www.linkedin.com/in/AlekseyChudov

Riga 2016