понедельник, июля 06, 2009

SELinux Lockdown, 4: Создание домена пользователя SELinux

оригинал - SELinux Lockdown Part Four: Customized SELinux User Domain

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

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

Самый простой способ - взять за основу для нового пользовательского домена SELinux (SELinux User Domain) существующий, а не создавать новый с чистого листа. В этой статье будет показано как создать свой пользовательский домен SELinux на основе ограниченного профиля user_t. Также рассматриваются варианты сопоставления данного пользовательского домена с заданным пользователем SELinux, чтобы данному окружению сопоставить пользователей Linux, как это было описано в главе SELinux Users.

Требуется: добавить ограниченного пользователя в систему с требованиями, которые почти идентичны пользователю SELinux user_u. Особенность заключается в том, что этот пользователь должен иметь возможность просматривать содержимое точки монтирования /var.

Чтобы совершить задуманное необходимо создать новое окружение пользователя SELinux на основе пользовательского домена user_t и установить его в модуль политики SELinux (SELinux Policy Module). Мы можем расширить данный модуль политики, позволив просматривать содержимое директории /var, и мы можем создать сопоставление нового пользовательского домена и нового пользователя SELinux. Чтобы вручную сопоставить новый домен и нового пользователя SELinux, вместо добавления сопоставления непосредственно в сам модуль политики, мы можем использовать команду semanage.

Нам потребуется доступ к исходным текстам политики SELinux (SELinux Source Policy) для использования их в качестве подсказки. В этом примере будут использоваться исходные тексты политики SELinux, свободно доступные по адресу http://oss.tresys.com/projects/refpolicy/browser/trunk/. Хотя в нашем случае использование upstream-версии эталонной политики от Tresys (Tresys Reference Policy) будет достаточным, следует отметить, что в большинстве случаев нужно использовать специфичные для своего дистрибутива исходные тексты политики SELinux.

Сначала посмотрим исходный текст пользовательского домена user_t в тексте политики от Tresys: unprivuser.te

Наш новый пользовательский домен (User Domain) с названием myuser_t будет основан на модуле политики user_t. Для соответствия специфики политики дистрибутива Fedora нужно внести несколько незначительных изменений:

mkdir ~/myuser; cd ~/myuser;
echo "policy_module(myuser, 0.0.1)" > myuser.te;
echo "role myuser_r;" >> myuser.te;
echo "userdom_unpriv_user_template(myuser)" >> myuser.te;


Приведенной выше политикой создается новый ограниченный пользовательский домен SELinux, почти идентичный user_t, сопоставленный по умолчанию пользователю SELinux user_u.

Добавим политику, разрешающую просматривать содержимое точки монтирования /var:

echo "files_list_var(myuser_t)" >> myuser.te;

Сопоставим программно наш пользовательский домен SELinux myuser_t новому пользователю SELinux с названием myuser_u:

echo "gen_user(myuser_u, user, myuser_r, s0, s0)" >> myuser.te;

Заметим, что политика выше аналогична выполнению вручную следующей команды semanage:

sudo semanage user -a -L s0 -r s0-s0 -R myuser_r -P user myuser_u

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

make -f /usr/share/selinux/devel/Makefile

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

checkmodule -M -m -o myuser.mod myuser.te
semodule_package -o myuser.pp -m myuser.mod


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

sudo semodule -i myuser.pp

В завершении следует определить для нашего нового SElinux пользователя контекст безопасности SELinux (SELinux Security Contexts) по умолчанию, чтобы программы входа знали какой домен пользователя использовать:

cp /etc/selinux/targeted/contexts/users/user_u /etc/selinux/targeted/contexts/users/myuser_u
sed -i 's/user/myuser/g' /etc/selinux/targeted/contexts/users/myuser_u


Теперь мы можем просто добавить нового Linux пользователя и сопоставить его нашему свежему SELinux пользователю myuser_u командой useradd и опцией -Z или командой semanage и опцией -m.

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

Справка: man semodule, man semanage, man checkmodule, man semodule_package

Комментариев нет: