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