Настройка selinux centos 7

Обновлено: 07.07.2024

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

У SELinux есть три режима:

  1. Enforcing — запрет доступа на основании правил политики.
  2. Permissive — ведение лога действий, нарушающих политику, которые в режиме enforcing были бы запрещены.
  3. Disabled — полное отключение SELinux.

По умолчанию настройки находятся в / etc / selinux / config

Чтобы узнать текущий режим запустите

Для изменения режима на permissive запустите следующую команду

или, для изменения режима с permissive на enforcing, выполните

Если вам нужно полностью отключить SELinux, то это можно сделать только через файл конфигурации

Для отключения измените параметр SELINUX следующим образом:

Каждый файл и процесс помечается контекстом SELinux, в котором содержится дополнительная информация, такая как пользователь, роль, тип и т.д. Если вы впервые включаете SELinux, то сначала нужно настроить контекст и метки. Процесс назначения меток и контекста известен как маркировка. Чтобы начать маркировку, в файле конфигурации изменим режим на permissive.

После установки режима permissive, создадим в корне пустой скрытый файл с именем autorelabel

и перезагрузим компьютер

Примечание: мы используем режим permissive для маркировки, поскольку использование режима enforcing может привести к краху системы во время перезагрузки.

Не беспокойтесь, если загрузка застрянет на каком-то файле, маркировка занимает некоторое время. После завершения маркировки и загрузки вашей системы вы можете перейти к файлу конфигурации и установить режим enforcing, а также запустить:

Теперь вы успешно включили SELinux на своем компьютере.

Возможно, у вас возникли какие-то ошибки во время маркировки или во время работы системы. Чтобы проверить, работает ли ваш SELinux правильно и не блокирует ли он доступ к какому-либо порту, приложению и т. д. нужно посмотреть логи. Лог SELinux находится в / var / log / audit / audit . log , но вам не нужно читать его целиком, чтобы найти ошибки. Можно использовать утилиту audit2why для поиска ошибок. Запустите следующую команду:

Политика SELinux — это набор правил, которыми руководствуется механизм безопасности SELinux. Политика определяет набор правил для конкретного окружения. Сейчас мы изучим как настраивать политики, чтобы разрешить доступ к запрещенным сервисам.

1. Логические значения (переключатели)

Переключатели (booleans) позволяют изменять части политики во время работы, без необходимости создания новых политик. Они позволяют вносить изменения без перезагрузки или перекомпиляции политик SELinux.

Пример
Предположим, мы хотим предоставить общий доступ к домашнему каталогу пользователя по FTP на чтение и запись, и мы уже расшарили его, но при попытке доступа мы ничего не видим. Это связано с тем, что политика SELinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы FTP-сервер мог обращаться к домашним каталогам. Посмотрим, есть ли для этого какие-либо переключатели, выполнив

Когда вы устанавливаете CentOS 7, функция SELinux включена по умолчанию. Из-за этого некоторые приложения в вашей системе могут фактически не поддерживать этот механизм безопасности. Поэтому, чтобы такие приложения функционировали нормально, вам необходимо отключить SELinux.

Бывают ситуации, когда вам необходимо включить SELinux обратно, по той или иной причине. В этом вам поможет эта инструкция.

2. Проверка статуса.

Проверим состояние SELinux с помощью команды sestatus , как показано ниже:

Ответ:


Система отключена. Будем включать обратно.

3. Установка программы.

Установим пакеты, если они не установлены:

Создадим технический файл:

В следующий раз, когда вы перезагрузите систему, она автоматически заменит файловую систему для SElinux.

Обычно это происходит при маркировке файловой системы для SELinux в первый раз или при переключении между различными типами политик, например, при переходе от целевой к строгой политике.

4. Изменение файла конфигурации.

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

Установим любимый текстовый редактор:

затем запустим редактирование вот так:

или вот так (если первый файл конфигурации пустой):

Примечание! disabled отключает SELinux, enforcing — включает.

Затем измените директиву SELinux= disabled :


на SELinux= enforcing , как показано на рисунке ниже:


Затем сохранитесь и выйдите из файла. Чтобы изменения вступили в силу, вам необходимо перезагрузить систему.

Перезапустим операционную систему:

5. Проверка работы программы.

После перезагрузки системы проверим состояние работы SELinux (развернуто):

Security-Enhanced Linux (SELinux) - это новый метод контроля доступа в Linux на основе модуля ядра Linux Security (LSM). SELinux включен по умолчанию во многих дистрибутивах на основе Red Hat, использующих пакетную базу rpm, например, Fedora, CentOS и т д.

В этой статье будет рассмотрена настройка SELinux, мы не будем трогать создание новых политик, а постараемся подойти к системе с другой стороны, посмотреть чем она может быть полезна обычному пользователю Linux, рассмотрим основы её работы, включение, отключение и изменение состояний. В качестве системы для выполнения примеров использовалась CentOS 8.

Основы SELinux

SELinux представляет собой систему маркировки, каждый процесс имеет метку. Каждый файл, каталог или даже пользователь в системе имеет метку. Даже портам и устройствам и именам хостов в системе присвоены метки. SELinux определяет правила доступа процесса к объектам с определенными метками. Это и называется политикой. За соблюдением правил следит ядро. Иногда это еще называется обязательный контроль доступа (Mandatory Access Control, MAC)

Владелец файла не имеет полной свободы действий над атрибутами безопасности. Стандартные атрибуты контроля доступа, такие как группа и владелец ничего не значат для SELinux. Полностью все управляется метками. Значения атрибутов могут быть установлены и без прав root, но на это нужно иметь специальные полномочия SELinux.

Теперь поговорим немного о политиках. Мы определяем метку для процессов определенного типа, а также на объекты файловой системы тоже определенного типа. Вот представьте, себе систему, в которой объекты (процессы) это кошки и собаки. Это типы процессов. И у нас есть объекты, к которым они хотят иметь доступ - еда. Но еда у них разная еда_котов и еда_собак. Нужно чтобы объекты имели доступ только к своей еде.

У собаки есть разрешение есть свою пищу, а у кошки - свою. В политиках SELinux это будет выглядеть вот так:

разрешить кошке корм_кошек есть

разрешить собаке корм_собак есть

Теперь ядро будет следить, чтобы соблюдались эти правила. В системе SELinux все по умолчанию запрещено, таким образом, если собака попытается съесть кошачий корм, ядро не позволит это сделать.

SELinux может вызвать у системных администраторов большое количество проблем, многие её просто отключают, таким образом, решив проблему и уменьшив безопасность. Как уже говорилось выше, по умолчанию SELinux блокирует все и вся. Это подходит под описание строгой политики. Но чтобы облегчить системным администраторам работу, были разработаны другие стандартные политики. Во многих дистрибутивах используется целевая политика (targeted), она охватывает около 200 сетевых служб и процессов, все же остальные программы запускаются и работают свободно, к ним никакие модели SELinux не применяются.

SELinux может работать в трех режимах - отключен, система полностью отключена и не работает, режим ограничений Enforcing - программа активирована и блокирует все не соответствующие политикам действия и третий режим Permissive - только фиксировать нарушения.

Политики SELinux бывают тоже нескольких типов. Политика targeted, которую мы рассматривали выше относится к типу Type Enforcment (TE) политик, в которых управление доступом к файлам осуществляется на основе ролей. Сюда же относится политика strict. Есть ещё политики Multi-Level Security (MLS), в которых добавлены дополнительные категории, они сложные и ненужны рядовому пользователю, поэтому начинающим можно пока забыть об их существовании. Надо понять, что подсистема SELinux разработана военными для военных, поэтому обычным пользователям все её возможности вряд-ли понадобятся. В этой статье мы будем обсуждать именно политику targeted.

Теория в общих чертах рассмотрена. А теперь перейдем к практической части.

Настройка SELinux

1. Состояние

После перезагрузки вы можете посмотреть посмотреть состояние SELinux:

Здесь мы видим, что система включена SELinux status: enabled, Текущий режим Current mode - enforcing, то есть система будет блокировать неразрешенные действия. Используемая сейчас политика - targeted. Эта политика используется для того, чтобы правила SELinux распространялись только на определённые службы.

3. Режим работы

Сейчас давайте включим активный режим, для этого выполните команду:

sudo setenforce 1

Отключить активный режим можно передав в ту же команду 0:

sudo setenforce 0

Посмотреть используемый сейчас режим тоже можно подобной командой:

Вся основная настройка SELinux выполняется через файл /etc/selinux/config. Здесь можно как полностью отключить selinux, так и настроить используемую политику безопасности.

sudo vi /etc/selinux/config

Этот параметр означает режим работы SELinux, вы можете указать здесь один из трех параметров enforce, permissive и disabled

Используйте disabled чтобы полностью отключить SELinux или любой другой, чтобы включить SELinux обратно. Этот режим будет применяться по умолчанию при старте системы.

4. Выбор политики

Настройка SELinux политик выполняется тоже в этом файле. За политику отвечает параметр SELINUXTYPE:

Вы можете ссылаться на любую политику, расположенную в каталоге /etc/selinux. Могут использоваться три основные политики:

  • targeted - защищает основные системные сервисы, например, веб-сервер, DHCP, DNS, но не трогает все остальные программы.
  • strict - самая строгая политика, управляет не только сетевыми службами, но и программами пользователя.
  • mls - содержит не только правила, но и различные уровни безопасности. Она позволяет реализовать многоуровневую систему безопасности на основе SELinux.

Также можно добавить свои политики. Для применения политики необходимо перезагрузить компьютер, и желательно чтобы SELinux во время этой перезагрузки был в режиме аудита (permissive). Также, чтобы система обновила все метки в файловой системе, возможно, придется создать пустой файл в корне:

sudo vi /.autolabel

5. Просмотр контекста

Каждый файл и каждый процесс имеет свою SELinux метку, которую принято называть контекстом. Какая метка будет присвоена тому или иному файлу или процессу определяется политикой, в нашем случае это targeted. Посмотреть контекст SELinux можно с помощью команды ls:

Синтаксис у строки контекста такой:

имя_пользователя:имя_объекта: тип_или_домен :уровень_доступа

В политике targeted имя пользователя и имя объекта практически не используются, уровень доступа - относится к MLS политикам и на него тоже можно внимания не обращать. А смотреть стоит на третье поле. Для файлов или папок оно называется типом, а для процессов доменом. Например, у папки /bin тип bin_t.

6. Изменение контекста

По умолчанию папка веб-сервера находится по пути /var/www/html. У неё контекст такой, как мы обсудили ранее:

Если вы захотите перенести эту папку в другое место, то надо будет сменить контекст для новой папки. Для этого используется команда chcon, надо указать только тип:

Однако, можно указать контекст полностью:

Это изменение сохранится после перезагрузки, но после обновления меток файловой системы оно будет стёрто. Чтобы этого избежать надо добавить правило в политику.

7. Модификация политики

semanage fcontext -a -t httpd_sys_content_t "/home/losst/httdocs(/.*)?"

Если надо поменять контекст только для одного файла, то маску использовать не обязательно:

semanage fcontext -a -t httpd_sys_content_t "/home/losst/httdocs/index.html"

Сама собой эта команда в файловой системе ничего не меняет надо создать файл /.autolabel и перезагрузить компьютер или выполнить команду restorecon для нужной папки:

restorecon -R -v /home/losst/httdocs

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

semanage fcontext -C -l

8. Логи

Или для более удобного просмотра можно использовать утилиту sealert. Для её установки выполните:

sudo yum install setroubleshoot

Затем можно смотреть:

sealert -a /var/log/audit/audit.log

9. Модули

Политика targeted модульная. Она состоит из множества модулей, для различных программ. Чтобы посмотреть все активные на данный момент модули выполните:

Для просмотра всех установленных модулей выполните:

В прошлом пункте было показано, как с помощью утилиты sealert посмотреть возможные решения проблемы доступа. Самое частое решение - создать свой модуль для политики на основе лога. Утилита audit2allow анализирует лог файл, находит там сведения об объектах, к которым нет доступа, а затем разрешает этот доступ в новом модуле. В предыдущем примере утилита sealert посоветовала такую команду:

После этого в текущей папке появится пакет модуля с расширением .pp, который можно уже установить с помощью утилиты semodule:

10. Флаги

Кроме того, поведение политики можно настраивать с помощью флагов. Обычно, флаги, которые надо включить рекомендует та же утилита sealert. Все флаги определены в модулях политики. Посмотреть какие флаги доступны сейчас и их состояние можно с помощью команды:

Выводы

Теперь вы знаете как включить, отключить SELinux, а также как поменять политику или режим работы программы. Мы рассмотрели работу с контекстом, модулями политики, а также флагами. Этого вполне достаточно чтобы понимать как настроить SELinux на вашем сервере. Все остальное выходит за рамки нашей небольшой статьи.


И сегодня она попала в поток «Администрирование». Сегодня мы не будем писать модули или настраивать RBAC, а пойдем по пути наименьшего сопротивления и просто захарденим обычный LAMP-сервер при помощи готовой политики, включив необходимые настройки.

Если кто забыл, за аббривиатурой LAMP скрывается Linux, Apache, Mysql, PHP, т.е. это большая часть всех VDS, которые покупают люди для хранения своих личных блогов. Надеюсь, что этот поможет всем им стать немного безопаснее :)

Предположения

Итак, предполагаем, что:

Подготовка

Если LAMP у вас уже установлен и настроен — можете пропустить
Установим стандартный комплект софта для LAMP:

Минимально настроим софт:

[www]
listen = 127.0.0.1:9009
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.status_path = /status
request_terminate_timeout = 10s
request_slowlog_timeout = 1s
slowlog = /var/log/php-fpm/www-slow.log
security.limit_extensions = .php
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 128M
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
<IfModule mod_userdir.c>
UserDir enabled
UserDir www
</IfModule>
<Directory "/home/*/www">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes
Require method GET POST OPTIONS
DirectoryIndex index.html index.htm index.php
<FilesMatch "\.php$">
<If "-f %">
SetHandler "proxy:fcgi://127.0.0.1:9009"
</If>
</FilesMatch>
</Directory>

Запустим все необходимые сервисы:

Добавим какого-нибудь пользователя, например phpbb:

И создадим простой тестовый файл с phpinfo():

]$ echo "<?php phpinfo(); ?>" > www/info.php

Перейдем по ссылке…



… и получим именно то, что получают все :)

Разбираемся с ошибками

В отличие от других мануалов, где следующим шагом идет «отключите SELinux», мы сейчас узнаем, почему так получилось и что можно сделать.

Для начала — установим консольные утилиты для управления политиками SELinux:

А потом — включим нужные нам модули ( командой semodule ):

Давайте посмотрим, с какими именно проблемами столкнулся apache при открытии этой страницы?

Лечение указано в выводе audit2allow, установка переменных выполняется командой setsebool (или semanage boolean).

Обновляем страницу и получаем:



Смотрим логи:

[Tue Feb 28 21:15:04.555595 2017] [proxy:error] [pid 21586] (13)Permission denied: AH00957: FCGI: attempt to connect to 127.0.0.1:9009 (*) failed
[Tue Feb 28 21:15:04.555892 2017] [proxy_fcgi:error] [pid 21586] [client 192.168.56.101:57974] AH01079: failed to make connection to backend: 127.0.0.1

Новый порт добавляется при помощи команды semanage port:

Обновляем страницу и видим:


Что-то посложнее

Давайте теперь усложним задачу и поставим phpbb на этот хост.

]$ unzip phpBB-3.2.0.zip
[phpbb@lamp

]$ mv phpBB3/* www/
[phpbb@lamp

Попробуем создать для себя базу:

[phpbb@lamp www]$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)

Поищем, как разрешить пользователю соединяться с базой?

DT allow user_t mysqld_var_run_t: dir < getattr search open >; [ selinuxuser_mysql_connect_enabled ]
DT allow user_t mysqld_db_t: dir < getattr search open >; [ selinuxuser_mysql_connect_enabled ]
DT allow user_t mysqld_t: unix_stream_socket connectto; [ selinuxuser_mysql_connect_enabled ]
DT allow user_t mysqld_t: unix_stream_socket connectto; [ selinuxuser_mysql_connect_enabled ]
DT allow user_t mysqld_var_run_t: sock_file < write getattr append open >; [ selinuxuser_mysql_connect_enabled ]
DT allow user_t mysqld_var_run_t: sock_file < write getattr append open >; [ selinuxuser_mysql_connect_enabled ]

Отлично, включаем selinuxuser_mysql_connect_enabled и продолжаем:

Создаем базу и пробуем зайти в инсталляшку phpbb:



Устанавливаем phpBB дальше, удаляем install и получаем работающий форум:


Меняем контекст конфига обратно:

Вместо послесловия

Не написав ни одной строчки кода, используя только знания из man-файлов и стандартную политику SELinux по-умолчанию, можно за 30 минут настроить безопасное окружения для стандартных сервисов. И это не только про LAMP: стандартная политика содержит 403 готовых модуля. Этого хватит для решения большинства задач, которые когда-либо встанут перед администратором. Не выключайте SELinux, не заставляйте Дэна плакать.

Что такое SELinux?

В операционную систему при помощи SELinux внедряется, так называемая, мандатная модель управления доступом (Mandatory Access Control), сокращённо MAC. Данная модель управления представляет собой способ разграничения контроля доступа с определённым набором привилегий. В дистрибутиве Linux MAC реализована поверх того, что мы называем моделью избирательного управления доступом (Discretionary Access Control), сокращённо DAC.

Другими словами, SELinux позволяет произвести точную настройку требований контроля доступа, с помощью которой определяется степень влияния пользователя на описанный настройкой процесс. Это в полной мере может предотвратить получение злоумышленником доступа ко всем объектам и процессам системы.

Чтобы понять работу системы, мы произведём настройку конфигурации SELinux на сервере, работающем на операционной системе CentOS Stream.

Установка SELinux

В этом разделе мы установим различные пакеты, используемые в SELinux. Они призваны помочь в создании, управлении и анализе политик SELinux. Сначала необходимо проверить, какие пакеты уже установлены в вашей системе:

Если ваша CentOS Stream развёрнута только что, то в системе должны быть установлены следующие пакеты:

Инсталлированные пакеты SELinux

Теперь, необходимо запустить установку следующих пакетов и их зависимостей:

Данная инсталляция содержит следующие пакеты:

Состояния SELinux

В нём значение переменной SELINUX измените с disabled на enabled . После чего перезагрузите сервер:

После перезагрузки подключитесь к вашему VPS и проверьте статус SELinux:

Проверка статуса SELinux

Режимы SELinux

Во включенном состоянии SELinux может быть запущен в режимах enforcing и permissive .

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

В режиме permissive SELinux не блокирует доступ к объектам, не имеющим разрешений от политик SELinux. Вместо этого, система регистрирует любые отказы в доступе, используя /var/log/audit/audit.log .

Проверить, в каком режиме SELinux функционирует сейчас, можно командой:

Проверка режима SELinux

Переключаться между режимами можно, используя команду setenforce:

Также, режим permissive можно активировать при помощи инструкции:

Активированный режим виден при выводе набора текущих настроек командой sestatus .

Контекст SELinux

А теперь посмотрите, как выглядит контекст этого каталога:

Контекст домашнего каталога

Для корневого каталога системы контекст будет выглядеть примерно так:

Контекст корневого каталога

Мы видим, что содержимое контекста для каждого файла или каталога описано следующим синтаксисом:

А вот, как будет выглядеть в нашей системе контекст для процесса systemd , например:

Контекст процесса - Введение в SELinux под CentOS Stream

Логичекие параметры SELinux

Включение и выключение логических позиций в SELinux может производиться без пересборки политик SELinux.

Во-первых, вы можете увидеть список логических переменных при помощи команды getsebool -a . Для вывода этого списка используйте фильтр grep :

Вывод логических параметров с фильтром httpd_can - Введение в SELinux под CentOS Stream

Проверить изменения можно при помощи предыдущей инструкции:

Вывод логических параметров с фильтром httpd_can - Введение в SELinux под CentOS Stream

Заключение

Читайте также: