пятница, июня 26, 2009

SELinux Lockdown, 1: пользователи SELinux

оригинал - SELinux Lockdown Part One: SELinux Users

Начинаю выкладывать перевод цикла статей по использованию SELinux. Оригинал на английском языке опубликован в блоге Доминика Грифта (Dominick Grift).


Это первая статья в серии о затягивании конфигурации SELinux для Fedora 11.

В Fedora 11 Linux-пользователи по умолчанию сопоставляются SELinux-пользователю unconfined_u. SELinux-пользователь unconfined_u, в свою очередь, сопоставлен ролям unconfined_r и system_r и всем доступным категориям (compartments) Multi Category Security.

Обе роли unconfined_r и system_r сопоставляются доменам безопасности SELinux. Домены безопасности SELinux - это определенные окружения безопасности для процессов в системе Linux.

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

SELinux-пользователь unconfined_u имеет доступ к роли system_r, чтобы иметь возможность запускать системные процессы в своих доменах безопасности. SELinux-пользователь unconfined_u работает в домене безопасности unconfined_t через роль unconfined_r, которой он сопоставлен.

Команда semanage позволяет добавлять, изменять и удалять сопоставления между Linux- и SELinux-пользователями, так же как и другие настройки, касающиеся управления SELinux. В качестве альтернативы для изменения этих настроек можно использовать system-config-selinux, графический интерфейс к semanage.

Чтобы с помощью команды semanage посмотреть какому SELinux-пользователю по умолчанию сопоставлены Linux-пользователи наберите:

sudo semanage login -l | grep default

результат команды будет каким-то таким:

__default__ unconfined_u SystemLow-SystemHigh

В примере выше Linux-пользователи по умолчанию сопоставлены SELinux-пользователю unconfined_u.

Чтобы изменить это и сопоставить Linux-пользователей по умолчанию ограниченному SELinux-пользователю с именем user_u просто наберите:

sudo semanage login -m -s user_u "__default__"

В результате все новые Linux-пользователи будут по умолчанию сопоставляться ограниченному SELinux-пользователю user_u.

Вы можете переопределить данное сопоставление при добавлении Linux-пользователей командой useradd используя опцию -Z. Эта опция определяет какому SELinux-пользователю должен быть сопоставлен Linux-пользователь.
Например наберите:

sudo useradd -Z guest_u joe

В результате будет создан новый Linux-пользователь с именем joe, который будет сопоставлен SELinux-пользователю guest_u, вместо определенного по умолчанию SELinux-пользователя.

Также для изменения сопоставления между Linux-пользователем и SELinux-пользователем может быть использована команда usermod с опцией -Z.

Существует несколько предопределенных профилей SELinux-пользователей. Список данных профилей можно вывести командой semanage, наберите:

sudo semanage user -l

Далее я рассмотрю некоторые свойства этих предопределенных SELinux-пользователей.

SELinux-пользователь guest_u:
Этот профиль используется для пользователей, которых необходимо усиленно контролировать. SELinux-пользователь guest_u может только войти в систему используя OpenSSH. Гостевые пользователи не имеют доступа к сетевым ресурсам и программам с установленными битами setuid и setgid.

SELinux-пользователь xguest_u:
Данный профиль аналогичен guest_u за исключением того, что xguest пользователи могут входить в Xwindow и не могут входить используя OpenSSH. Другим исключением является то, что данный пользователь может получить доступ к HTTP порту, используя контролируемый SELinux экземпляр Mozilla Firefox.

SELinux-пользователь user_u:
SELinux-пользователь user_u напоминает обычного непривилегированного ограниченного (confined) SELinux-пользователя. Такой пользователь может войти в систему используя Xwindow и OpenSSH, имеет доступ к сетевым ресурсам, но не может использовать программы с установленными битами setuid и setgid.

SELinux-пользователь staff_u:
Этот SELinux-пользователь идентичен user_u, за исключением того, что staff_u может использовать программы с флагами setuid и setgid. Кроме того пользователь staff_u может также просмотреть информацию обо всех процессах в системе и имеет некоторые другие несущественные привилегии по сравнению с пользователем user_u.

SELinux-пользователь sysadm_u:
Данный пользователь придуман, чтобы ограничить используя SELinux учетную запись root, что обычно делать не рекомендуется. Он используется в Multi Level Security окружении, где нет пользователя unconfined_u.

SELinux-пользователь unconfined_u:
SELinux-пользователь unconfined_u это среда, в которой по умолчанию работают все Linux-пользователи в соответствии с целевой политикой Fedora (Fedora Targeted policy). Этот пользователь в значительной степени освобожден от ограничений, накладываемых SELinux. Исключением является механизм Memory Execution Protections (ограничение на исполнение определенных операций в памяти).

Если Вы хотите повысить безопасность вашей системы, тогда не следует сопоставлять реальных Linux-пользователей, не пользователя root, SELinux-пользователю unconfined_u. Во многих сценариях существование неограниченных пользователей создает зияющую дыру в безопасности.

Вход пользователя root должен быть запрещен. root должен иметь возможность войти с терминала только в случае крайней необходимости. В Fedora, Linux-пользователь root сопоставлен unconfined_u. Это означает, что root практически не защищается SELinux.

Чтобы повысить безопасность использования root можно сопоставить пользователя root SELinux-пользователю sysadm_u. Хотя это не сильно увеличивает безопасность по сравнению с unconfined_u и root будет иметь возможность обойти ограничения SELinux.

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

SELinux-пользователь system_u:
Этот пользователь зарезервирован для нужд системы. Обычные Linux-пользователи не должы сопоставляться с SELinux-пользователем system_u.

Как определить SELinux-пользователя по умолчанию для новых Linux-пользователей объяснили, как переопределить сопоставление по умолчанию с использованием команды useradd и опции -Z тоже объяснили.

Выше было рассказано о доступных предопределенных SELinux пользователях. Осталось показать как можно изменить сопоставление SELinux-пользователя Linux-пользователям.

Вывести список всех сопоставлений между Linux- и SELinux- пользователями:

sudo semanage login -l

Сопоставить Linux-пользователя SELinux-пользователю:

sudo semanage login -a (...)

Изменить сопоставление межд Linux-пользователем и SELinux-пользователем:

sudo semanage -m (...)

Удалить сопоставление между Linux-пользователм и SELinux-пользователем:

sudo semanage -d (...)

Вывод:
Для повышения безопасности системы настройте SELinux, чтобы по умолчанию Linux-пользователи сопоставлялись ограниченным SELinux-пользователям.
Запретите вход пользователю root в систему с использованием OpenSSH и Xwindow. Разрешите пользователю root входить только в крайних случаях, используя терминал. Либо оставьте root сопоставленным SELinux-пользователю unconfined_u или сопоставьте его пользователю sysadm_u (например, если вы решите деинсталлировать модуль SELinux unconfineduser).
Сопоставьте ваших Linux-пользователей наиболее подходящим ограниченным профилям SELinux-пользователей.
Используйте команду useradd и опцию -Z, чтобы добавлять Linux-пользователей, переопределяя сопоставление, определенное по умолчанию, передавая имя SELinux-пользователя в качестве аргумента.

Справка: man semanage, man useradd, man usermod

1 комментарий:

Анонимный комментирует...

good