我开始将RHEL6配置为强化的Tomcat服务器并应用SE
Linux策略进行访问控制.在安装RHEL6和Tomcat6(独立,没有httpd)之后,我注意到Tomcat进程是以unconfined_java_t的形式运行的.我如何将Tomcat限制在一个选择的域中?
解决方法
从RHEL6开始,默认的SELinux用户映射如下
# semanage user -l Labeling MLS/ MLS/ SELinux User Prefix MCS Level MCS Range SELinux Roles git_shell_u user s0 s0 git_shell_r guest_u user s0 s0 guest_r root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r sysadm_u user s0 s0-s0:c0.c1023 sysadm_r system_u user s0 s0-s0:c0.c1023 system_r unconfined_r unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r user_u user s0 s0 user_r xguest_u user s0 s0 xguest_r
如果您使用的是标准目标策略(检查/ etc / selinux / config或运行sestatus以查找),则root用户正在使用unconfined_u SELinux用户映射. id -Z作为root会告诉你.
如果你检查/etc/init.d/tomcat{6,7},你会发现一个if开关,它指出必须在启用SELinux的系统中使用runuser而不是plain su.但是,此命令不会阻止tomcat java进程继承SELinux用户映射.
这是相关的,因为我将尝试显示:
抓住selinux-policy
SRPM,找到java模块的源代码(文件上下文,接口和类型强制执行):
selinux-policy-3.7.19-195.el6_4.6.src/serefpolicy-3.7.19/policy/modules/apps/java.fc selinux-policy-3.7.19-195.el6_4.6.src/serefpolicy-3.7.19/policy/modules/apps/java.if selinux-policy-3.7.19-195.el6_4.6.src/serefpolicy-3.7.19/policy/modules/apps/java.te
第一个是自我解释.它包含路径,在这种情况下,它们将标记为java_exec_t:来自标准位置和可选位置的二进制文件和库.
第二个可能是最难理解的.它定义了此策略模块中允许的域转换.一个代码段与您的问题相关:
template(`java_role_template',` gen_require(` type java_exec_t; ') type $1_java_t; domain_type($1_java_t) domain_entry_file($1_java_t,java_exec_t) role $2 types $1_java_t; domain_interactive_fd($1_java_t) userdom_manage_tmpfs_role($2,$1_java_t) allow $1_java_t self:process { ptrace signal getsched execmem execstack }; dontaudit $1_java_t $3:tcp_socket { read write }; allow $3 $1_java_t:process { getattr ptrace noatsecure signal_perms }; domtrans_pattern($3,java_exec_t,$1_java_t) corecmd_bin_domtrans($1_java_t,$3) dev_dontaudit_append_rand($1_java_t) files_execmod_all_files($1_java_t) fs_dontaudit_rw_tmpfs_files($1_java_t) optional_policy(` xserver_role($2,$1_java_t) ') ')
正如该模板上的文档所述,“此模板创建用于Java应用程序的派生域”,其中“用户域的前缀(例如,用户是user_t的前缀)”,“与用户关联的角色” domain“和”用户域的类型“都取自执行Java应用程序的SELinux用户.
最后,第三个文件包含类型强制规则和布尔定义.
现在,如果您打算使用受限制的SELinux用户运行Java应用程序,则需要编写自定义策略,因为在当前的参考策略中没有这样的事情(我认为不在RHEL6中,也不在上游).您可以从复制文件开始,然后从那里进行实验.
当然,这不是一件容易的事.