Selinux basic

Материал из База знаний проекта Russian Fedora

Перейти к: навигация, поиск
ВНИМАНИЕ:
Никогда не отключайте SELinux, особенно это касается серверов в интернете !
ПРИМЕЧАНИЕ:
Марк Кокс [Mark Cox] из команды безопасности Red Hat написал: «Мы включили SELinux в установку по умолчанию не без причины; не отключайте ее! В 2005 году червь Linux/Lupper использовал дыры в некоторых PHP-приложениях. Политики SELinux, установленные по умолчанию на Red Hat и Fedora, блокировали этого червя.»

Содержание

Что такое SELinux

Security-Enhanced Linux (SELinux) был разработан Агенством национальной безопасности США и обеспечивает уровень мандатного контроля доступа . Он выходит за рамки дискреционного контроля доступа, связанные с доступом к файлам и ACL. В сущности, SELinux ограничивает ущерб, если есть нарушения безопасности. Например, если системный аккаунт связанный со службой FTP скомпрометирован, SELinux затрудняет использование этой учетной записи для взлома другие сервисов.

SELinux назначает различные контексты для каждого файла, известные как subjects(субъекты), objects(объекты), и actions(действия).

Статус SELinux

Есть три доступных режима SELinux: enforcing(принудительный), permissive(только сообщает о нарущениях) и disabled(выключен). Если SELinux настроен на принудительный режим то он может защищать систему двумя способами : targeted или Multi-Level Security (MLS). По умолчанию включен способ targeted, что обеспечивает ограничения на демоны. Для просмотра текущего режима можно использовать команды :

getenforce или sestatus

Для изменения текущего режима можно воспользоваться командой setenforce, для примера:

setenforce enforcing
setenforce permissive
ВНИМАНИЕ:
Если SELinux был выключен то для измения его состояния нужно изменить запись SELINUX в файле /etc/sysconfig/selinux на enforcing и перезапустить систему чтобы SELinux раставил метки (relabel) на все необходимые файлы.
ПРИМЕЧАНИЕ:
Перед перегрузкой нужно проверить нахождние файла .autorelabel в корне и если его там нет то командой touch /.autorelabel создать его.


Настройка SELinux для пользователей

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

semanage login -l

Если просмотр осуществлятеся от пользователя то нужна команда:

id -Z

Пример добавления (-a) специфической роли (-s) user_u для пользователя user_name:

semanage login -a -s user_u user_name

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

semanage -d user_name

Для того чтобы изменить политику SELinux для всех новых пользователей нужно изменить политику у пользователя по умолчанию. После этого все вновь создаваемые пользователи сразу будут иметь нужную вам политику. Например :

semanage login -m -S targeted -s "user_u" -r s0 __default__

Таблица выбора пользовательских ролей SELinux

Роль Имеющиеся права
guest_u Нет GUI, нет сети, нет доступа к su или sudo команд
xguest_u Есть GUI, сеть только через веб браузер Firefox
user_u Полный доступ к GUI и сети
staff_u Полный доступ к GUI, сети и выполнение команд sudo
unconfined_u Полный доступ к системе

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

semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__

Управление SELinux через переключатели

Команда показывает можно ли пользователям выполнять(on) или нельзя(off) скрипты в своей директории или в директории /tmp

getsebool allow_user_exec_content

Запрещение выполнение скриптов для пользователей:

setsebool allow_user_exec_content off

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

getsebool -a

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

semanage boolean -l

Просмотр и переопределение контекста SELinux для файлов

Таблица соответсвия пользователей и SELinux

Пользователь SELinux Соответствие
user_u обычные пользователи
system_u пользователи системы
unconfined_u неограниченные пользователи

Список текущего SELinux контекста для файла :

ls -Z

В выводе видно четыре элемента SELinux : user(пользователь), role(роль), type(тип), и уровень MLS. Причем основной контекст для файлов это тип. Например вывод :

# ls -Z /var/ftp/
drwxr-xr-x root root system_u:object_r:public_content_t pub

Если вы создали свой каталог ftp и хотите чтобы работал доступ для всех пользователей вы должны исправить на этом каталог контекст SELinux:

chcon -R -u system_u -t public_content_t /opt/ftp

Для создания на ftp сервера каталога куда можно загружать файлы используйте команду:

Чтобы клонировать права SELinux можно использовать ключ:

chcon -R --reference-/var/ftp /opt/ftp

По умолчанию контексты для файлов находятся в файле /etc/selinux/targeted/contexts/files/file_contexts Для востановления контекста по умолчанию используйте команду:

restorecon -F /каталог

Или например:

restorecon -v -R /var/www/

Разрешения SELinux на порты

Пример настройки сервера httpd на не стандартный 81 порт:

semanage port -a -t http_port_t -p tcp 81

Просмотр всех портов ограниченых через SELinux:

semanage port -l 

Процессы и SELinux

Также у каждого запущеного процесса тоже есть контескст SELinux, чтобы просмотреть его используйте команду :

ps -Z

Решение проблем связанных с SELinux

Ошибки связанные с SELinux записываются в файл /var/log/audit/audit.log. Чтобы найти и просмотреть нужную ошибку можно воспользоваться командой ausearch, например:

ausearch -m avc -c sudo

Для полного вывода информации можно воспользоваться утилитой sealeart, например:

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

Все настройки и изменения SELinux доступны и с GUI. Для этого используйте команду:

system-config-selinux

Для GUI просмотра ошибок запустите команду:

sealert -b

Написание собственой политики

ВНИМАНИЕ:
«Прежде чем дать права доступа домену, следует немного подумать. Простая прогонка сообщений об отказе через audit2allow часто приводит к чрезмерно попустительской политике. Добавляйте только те разрешения, которые считаете действительно необходимыми, и обязательно затем проверяйте, работает ли приложение правильно. Используйте dontaudit для прав доступа, которые не нужны домену.» Дэвид Капланко [David Caplanco], соавтор SELinux By Example (Prentice Hall, 2007) .

Для начала нужно установить дополнительные утилиты:

yum install -y setools-console policycoreutils-python

После этого обнулим лог:

cat /dev/null > /var/log/audit/audit.log

Запустим свое приложение и дождемся возникновения ошибки. Проанализируем ошибку и сгенерим свое правило:

cat /var/log/audit/audit.log | audit2allow -M appfirst

Можно обойтись и без чистки лога но нужно знать какую ошибку ищем, пример:

grep appfirst /var/log/audit/audit.log | audit2allow -M appfirst
ПРИМЕЧАНИЕ:
При генерации нового правила создается текстовый файл, и командой cat appfirst.te можно просмотреть добавлемое правило.

Активируем полученное правило правило:

semodule -i appfirst.pp

Проверим лог на возникновение ошибок.

seaudit-report /var/log/audit/audit.log

Дополнительные материалы