Продолжаю выкладывать перевод цикла статей по использованию 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
Комментариев нет:
Отправить комментарий