Понимание SELinux и установка команды semanage в CentOS7

Linux

Подсистема безопасности SELinux

SELinux (Security-Enhanced Linux) — это подсистема безопасности обязательного контроля доступа (MAC, Mandatory Access Control), разработанная Агентством национальной безопасности США с помощью сообщества Linux с открытым исходным кодом. Цель использования технологии SELinux в системе RHEL 7 состоит в том, чтобы ограничить каждый сервисный процесс, чтобы он получал только те ресурсы, которые должны быть получены.

Например, вы загрузили на свой компьютер программное обеспечение Meitu.Когда вы концентрируетесь на его использовании для украшения фотографий, оно молча отслеживает информацию о пароле, введенную в браузере в фоновом режиме, что, очевидно, не должно быть тем, чем оно должно заниматься. Подсистема безопасности SELinux предназначена для предотвращения таких ситуаций, она может отслеживать незаконные действия по многим аспектам: ограничивать функции сервисной программы (доменные ограничения SELinux могут гарантировать, что сервисная программа не может делать экстраординарные вещи); ограничения доступа к файловым ресурсам (SELinux контекст безопасности гарантирует, что файловые ресурсы могут быть доступны только служебной программе, которой они принадлежат).

Существует три режима настройки служб SELinux:

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

Я по умолчанию применяю здесь (вы можете просмотреть основной файл конфигурации /etc/selinux/config службы).


vi /etc/selinux/config
 
关闭:SELINUX=disabled
开启:SELINUX=1

重启
reboot
查看状态
sestatus


Измените текущий режим работы SELinux на отключенный (с помощью командыsetenforce [0|1], 0 означает отключить, 1 означает включить), эта модификация будет недействительна после перезагрузки системы

Вы можете просмотреть текущее состояние служб SELinux с помощью команды getenforce.

# setenforce 0
# getenforce 
Permissive

Функция служебной программы httpd состоит в том, чтобы предоставить пользователям доступ к содержимому веб-сайта, поэтому SELinux обязательно отключит операцию запроса пользователя на веб-сайте по умолчанию. Однако мы изменили каталог сохранения данных веб-сайта по умолчанию на /home/wwwroot, и это создало проблему. Каталог /home используется для хранения данных домашнего каталога обычных пользователей, но теперь служба веб-сайта, предоставляемая httpd, должна получать данные из домашнего каталога обычных пользователей, что явно нарушает принцип контроля SELinux.

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

# ls -Zd /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/htm
# ls -Zd /home/safiri
drwx------. safiri safiri unconfined_u:object_r:user_home_dir_t:s0 /home/safiri

Пользовательский сегментsystem_uПредставляет идентификатор системного процесса ролевой сегментobject_rРоль, представляющая файловый каталог тип сегментаhttpd_sys_content_tСистемные файлы, представляющие службы веб-сайта.

Ввиду текущей ситуации нам нужно только использовать команду semanage, чтобы изменить контекст безопасности SELinux текущего каталога веб-сайта /home/wwwroot, чтобы он совпадал с исходным каталогом веб-сайта.

команда semanage

Команда semanage используется для управления политиками SELinux в формате «semanage [параметры] [файл]». Общие параметры и функции: -l запрос, -a добавить, -m изменить, -d удалить

Добавьте новый контекст безопасности SELinux в новый каталог данных веб-сайта, чтобы этот каталог и все файлы в нем могли быть доступны сервисной программе httpd:

После настройки также необходимо использовать команду restorecon, чтобы настройки вступили в силу немедленно, параметр -Rv для выполнения рекурсивных операций над указанным каталогом и для отображения процесса модификации контекста безопасности SELinux. Наконец, снова обновите страницу, и вы сможете нормально видеть содержимое веб-страницы.

установить semanage

# yum provides semanage 

***********
*********
****省略内容****
***********
# Filename : /usr/sbin/semanage

以上命令执行成功后,再执行:
# yum -y install policycoreutils-python.x86_64

可能用到的安装seinfo/sesearch
# yum install setools-console.x86_64

обнаруженные ошибки

ValueError: Политика SELinux не управляется или доступ к хранилищу недоступен.

ValueError: SELinux policy is not managed or store cannot be accessed.

Cannot set persistent booleans without managed policy.

Я долго искал решение вышеуказанной ошибки:

blog.SIP и ОС.Not Hungry/2014/10/Maze…


In a few moments, SELinux users which have the \~arch KEYWORDS set (either globally or for the SELinux utilities in particular) will notice that the SELinux userspace will upgrade to version 2.4 (release candidate 5 for now). This upgrade comes with a manual step that needs to be performed after upgrade. The information is mentioned as post-installation message of the policycoreutils package, and basically sais that you need to execute:

~# /usr/libexec/selinux/semanage_migrate_store
The reason is that the SELinux utilities expect the SELinux policy module store (and the semanage related files) to be in /var/lib/selinux and no longer in /etc/selinux. Note that this does not mean that the SELinux policy itself is moved outside of that location, nor is the basic configuration file (/etc/selinux/config). It is what tools such as semanage manage that is moved outside that location.

I tried to automate the migration as part of the packages themselves, but this would require the portage_t domain to be able to move, rebuild and load policies, which it can't (and to be honest, shouldn't). Instead of augmenting the policy or making updates to the migration script as delivered by the upstream project, we currently decided to have the migration done manually. It is a one-time migration anyway.

If for some reason end users forget to do the migration, then that does not mean that the system breaks or becomes unusable. SELinux still works, SELinux aware applications still work; the only thing that will fail are updates on the SELinux configuration through tools like semanage or setsebool - the latter when you want to persist boolean changes.

~# semanage fcontext -l
ValueError: SELinux policy is not managed or store cannot be accessed.

~# setsebool -P allow_ptrace on
Cannot set persistent booleans without managed policy.
If you get those errors or warnings, all that is left to do is to do the migration. Note in the following that there is a warning about 'else' blocks that are no longer supported: that's okay, as far as I know (and it was mentioned on the upstream mailinglist as well as not something to worry about) it does not have any impact.

~# /usr/libexec/selinux/semanage_migrate_store
Migrating from /etc/selinux/mcs/modules/active to /var/lib/selinux/mcs/active
Attempting to rebuild policy from /var/lib/selinux
sysnetwork: Warning: 'else' blocks in optional statements are unsupported in CIL. Dropping from output.
You can also add in -c so that the old policy module store is cleaned up. You can also rerun the command multiple times:

~# /usr/libexec/selinux/semanage_migrate_store -c
warning: Policy type mcs has already been migrated, but modules still exist in the old store. Skipping store.
Attempting to rebuild policy from /var/lib/selinux
You can manually clean up the old policy module store like so:

~# rm -rf /etc/selinux/mcs/modules
So... don't worry - the change is small and does not break stuff. And for those wondering about CIL I'll talk about it in one of my next posts.