SELinuxservice — различия между версиями
Andy (обсуждение | вклад) (→Применение SELinux на примере Apache) |
Andy (обсуждение | вклад) (→Общая информация) |
||
Строка 143: | Строка 143: | ||
sambagui_selinux (8) - Security Enhanced Linux Policy for the sambagui processes | sambagui_selinux (8) - Security Enhanced Linux Policy for the sambagui processes | ||
[root@vm-02 ~]# | [root@vm-02 ~]# | ||
+ | </syntaxhighlight> | ||
+ | Сразу откроем порты в файрволе: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | [root@vm-01 ~]# firewall-cmd --add-service=http --permanent | ||
+ | success | ||
+ | [root@vm-01 ~]# firewall-cmd --reload | ||
+ | success | ||
+ | [root@vm-01 ~]# firewall-cmd --list-all | ||
+ | public (active) | ||
+ | target: default | ||
+ | icmp-block-inversion: no | ||
+ | interfaces: eth0 eth1 | ||
+ | sources: | ||
+ | services: dhcpv6-client dns http ssh | ||
+ | ports: 3260/tcp | ||
+ | protocols: | ||
+ | masquerade: yes | ||
+ | forward-ports: | ||
+ | sourceports: | ||
+ | icmp-blocks: | ||
+ | rich rules: | ||
+ | |||
+ | [root@vm-01 ~]# | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Версия 16:52, 18 января 2018
Содержание
Конфигурирование SELinux для поддержки сервиса
Предварительные требования
- Виртуальная машина с двумя сетевыми интерфейсами
- Установленные пакеты:
bash-completion
,policycoreutils
,policycoreutils-python
,policycoreutils-devel
,setroubleshoot-server
Общая информация
SELinux
представляет собой систему принудительного контроля доступа и позволяет разделить
пользовательские данные от сервисов которые были скомпрометированы. SELinux
позволяет
определить какой процесс, к каким сущностям (файлы, директории, порты, процессы, пользователи) может иметь доступ. Уровень доступа к сущностям
носит название контекст
. Терминология SELinux
:
Название элемента | Описание |
---|---|
Policy | Набор правил, определяющих какой источник может иметь доступ к какой цели |
Source domain | Объект, пытающийся получить доступ к цели. Обычно пользователь или процесс |
Target domain | Сущность, к которой пытается получить доступ источник. Обычно файл или порт |
Context | Метка безопасности, использующаяся для классификации объектов в SELinux |
Rule | Конкретная часть политики, которая определяет какой источник имеет какие правила доступа к какой цели. |
Lables | Тоже самое, что и контекст, определяет какой источник имеет какие правила доступа к какой цели. |
В системе SELinux
может находится в 3 состояниях:
enforcing
- Политики SELinux
включены и применяются.
permissive
- Политики SELinux
включены, однако, вместо их применения, печатаются предупреждения. Данное поведение рекомендовано для отладки и поиска ошибок в файле /var/log/audit/audit.log
disabled
- Политики SELinux
не применяются. Не рекомендовано к использованию, ибо ведет к несдаче экзамена.
Данные настройки можно внести в конфигурационный файл /etc/sysconfig/selinux
:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
При условии работоспособности SELinux
, в командной строке его можно переключать между режимами enforcing
и permissive
при помощи команд getenforce
/setenforce
. Например:
[root@vm-02 ~]# getenforce
Enforcing
[root@vm-02 ~]# setenforce 0
[root@vm-02 ~]# getenforce
Permissive
[root@vm-02 ~]# setenforce 1
[root@vm-02 ~]# getenforce
Enforcing
[root@vm-02 ~]#
Так же, информацию о работоспособности SELinux
и загруженных политиках, можно получить при помощи команды sestatus
:
[root@vm-02 ~]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
Process contexts:
Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context: system_u:system_r:init_t:s0
/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023
File contexts:
Controlling terminal: unconfined_u:object_r:user_devpts_t:s0
/etc/passwd system_u:object_r:passwd_file_t:s0
/etc/shadow system_u:object_r:shadow_t:s0
/bin/bash system_u:object_r:shell_exec_t:s0
/bin/login system_u:object_r:login_exec_t:s0
/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty system_u:object_r:getty_exec_t:s0
/sbin/init system_u:object_r:bin_t:s0 -> system_u:object_r:init_exec_t:s0
/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
[root@vm-02 ~]#
Для получения информации о контексте, в утилитах ps
, ls
имеется ключ -Z
:
[root@vm-02 ~]# ps --pid 1287 auwwZ
LABEL USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
system_u:system_r:postfix_master_t:s0 root 1287 0.0 0.2 91700 2108 ? Ss 2017 0:07 /usr/libexec/postfix/master -w
system_u:system_r:getty_t:s0-s0:c0.c1023 root 2239 0.0 0.0 110004 796 tty1 Ss+ 2017 0:00 /sbin/agetty --noclear tty1
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 18697 0.0 0.3 116524 3248 pts/0 Ss 13:06 0:00 -bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 19190 0.0 0.1 130184 1440 pts/0 R+ 17:19 0:00 ps --pid 1287 auwwZ
[root@vm-02 ~]# ls -lahiZ /srv/repo/
Packages/ repodata/
[root@vm-02 ~]# ls -lahiZ /srv/repo/
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 .
drwxr-xr-x. root root system_u:object_r:var_t:s0 ..
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 Packages
dr-xr-xr-x. root root system_u:object_r:iso9660_t:s0 repodata
[root@vm-02 ~]#
Каждый контекст состоит из 3 меток:
Название | Описание |
---|---|
User | Может быть узнаваем по суффиксу _u . Никакого отношения к учетным записям пользователей не имеет. Настройка для сдачи RHCSA/RHCE не нужна.
|
Role | Может быть узнаваема по суффиксу _r . В более тонком управлении политиками SELinux конкретным пользвателям SELinux , могут быть присвоены конкретные роли SELinux . Настройка для сдачи RHCSA/RHCE не нужна.
|
Type | Может быть узнаваем по суффиксу _t . Разные типы контекстов применяются к разным демонам и файлам в операционной системе. Манипуляция данным типом меток требуется для сдачи экзаменов RHCSA/RHCE
|
Для изменения типов контекстов следует использовать только утилиту semanage
. Изменения, произведенные утилитой chcon
, которая иногда встречается в документации, не переживают перемаркировку (relabeling) файловой системы, после которой происходит восстановление оригинального контекста из политики.
Для получения man
страниц с описаниями типов контекстов следует запустить следующую команду:
[root@vm-02 ~]# sepolicy manpage -ap /usr/share/man/man8
/usr/share/man/man8/NetworkManager_selinux.8
/usr/share/man/man8/abrt_selinux.8
/usr/share/man/man8/abrt_dump_oops_selinux.8
/usr/share/man/man8/abrt_handle_event_selinux.8
....
[root@vm-02 ~]# mandb
Purging old database entries in /usr/share/man...
Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man8'. Wait...mandb: warning: /usr/share/man/man8/afs_selinux.8*: competing extensions
mandb: warning: /usr/share/man/man8/apm_selinux.8*: competing extensions
mandb: warning: /usr/share/man/man8/ccs_selinux.8*: competing extensions
....
4 man subdirectories contained newer manual pages.
865 manual pages were added.
0 stray cats were added.
0 old database entries were purged.
[root@vm-02 ~]# man -k _selinux | grep samba
samba_net_selinux (8) - Security Enhanced Linux Policy for the samba_net processes
samba_selinux (8) - Security Enhanced Linux Policy for the smbd processes
samba_unconfined_net_selinux (8) - Security Enhanced Linux Policy for the samba_unconfined_net processes
samba_unconfined_script_selinux (8) - Security Enhanced Linux Policy for the samba_unconfined_script processes
sambagui_selinux (8) - Security Enhanced Linux Policy for the sambagui processes
[root@vm-02 ~]#
Сразу откроем порты в файрволе:
[root@vm-01 ~]# firewall-cmd --add-service=http --permanent
success
[root@vm-01 ~]# firewall-cmd --reload
success
[root@vm-01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client dns http ssh
ports: 3260/tcp
protocols:
masquerade: yes
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@vm-01 ~]#
Применение SELinux на примере Apache
Установка и настройка вебсервера
Устанавливаем вебсервер:
[root@vm-01 ~]# yum install -y httpd
Создадим тестовый виртуальный хост:
[root@vm-01 ~]# cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/test.conf
И приведем его к следующему виду:
# Virtual Hosts
#
# Required modules: mod_log_config
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost 192.168.1.1:80>
ServerAdmin webmaster@test.example.com
DocumentRoot "/content"
ServerName test.example.com
ServerAlias www.test.example.com
ErrorLog "/var/log/httpd/test.example.com-error_log"
CustomLog "/var/log/httpd/test.example.com-access_log" common
</VirtualHost>
Создадим директорию /content
и в нем файл index.html
следующего содержания:
[root@vm-01 ~]# mkdir /content
[root@vm-01 ~]# echo "This is the test configuration file" >> /content/index.html
[root@vm-01 ~]# cat /content/index.html
This is the test configuration file
[root@vm-01 ~]#
Манипуляции с контекстом SELinux
Теперь, необходимо присвоить правильный контекст директории, дабы наша страница отображалась корректно. Следующая последовательность действий описана в
man 8 semanage-fcontext
. Поскольку наш контент не подразумевает каких-то выполняемых файлов, либо файлов изменяемых пользователем, то вводим следующие команды:
[root@vm-01 ~]# ls -lahiZ /content/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 .
dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@vm-01 ~]# semanage fcontext -a -t httpd_sys_content_t "/content(/.*)?"
[root@vm-01 ~]# restorecon -vR /content
restorecon reset /content context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /content/index.html context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@vm-01 ~]# ls -lahiZ /content/
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 .
dr-xr-xr-x. root root system_u:object_r:root_t:s0 ..
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@vm-01 ~]#