加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

redhat – RHEL6:Tomcat作为无限制的Java用户运行

发布时间:2020-12-13 16:50:21 所属栏目:Linux 来源:网络整理
导读:我开始将RHEL6配置为强化的Tomcat服务器并应用SE Linux策略进行访问控制.在安装RHEL6和Tomcat6(独立,没有httpd)之后,我注意到Tomcat进程是以unconfined_java_t的形式运行的.我如何将Tomcat限制在一个选择的域中? 解决方法 从RHEL6开始,默认的SELinux用户映
我开始将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中,也不在上游).您可以从复制文件开始,然后从那里进行实验.

当然,这不是一件容易的事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读