SELinux:从 /etc/passwd 运行自定义 shell 二进制文件

SELinux:从 /etc/passwd 运行自定义 shell 二进制文件

- - - 问题 - - - -

我的系统上运行的是 CentOS 7.6。我想在 /etc/passwd 文件中调用自定义 shell 而不是标准 shell。

我启用了 SELinux,并且由于某种原因 sshd_t 域没有转换到我的自定义 shell 保存的新自定义域。

像这样的东西:

在 /etc/passwd 中:

root:x:0:0:root:/root:/bin/myshell

SELinux 域转换:

myshell.fc

/bin/myshell                             gen_context(system_u:object_r:myshell_exec_t,s0)

myshell.te

role unconfined_r types myshell_t;
role_transition unconfined_r myshell_t system_r;
domtrans_pattern(unconfined_t, myshell_exec_t, myshell_t)

默认用户是unconfined_u:unconfined_r:unconfined_t。

我还进行了从 unconfined_r 到 system_r 的角色转换。

- - 问题 - - -

由于某种原因 sshd_t 没有转换到 myshell_t 域。用户是root。

这是角色更改日志消息:

type=USER_ROLE_CHANGE msg=audit(1559079004.637:339116): pid=24478 uid=0 auid=0 ses=823 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='pam: default-context=system_u:unconfined_r:unconfined_t:s0 selected-context=system_u:unconfined_r:unconfined_t:s0 exe="/usr/sbin/sshd" hostname=X.X.X.X addr=X.X.X.X terminal=ssh res=success'

type=AVC msg=audit(1559067681.085:327703): avc:  granted  { execute } for  pid=17593 comm="sshd" name="myshell"  scontext=system_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:myshell_exec_t:s0 tclass=file

它确实执行了二进制文件,但转换没有发生。可能是因为角色不同,但我确实有角色转换——但不确定为什么它不起作用。

答案1

这里有两个方面,我先讲第一个方面:

  1. 标签 /bin/myshell 类型 shell_exec_t: echo '(filecon "/usr/bin/myshell" file (system_u object_r shell_exec_t ((s0)(s0))))' > myshell.cil && semodule -i myshell.cil
  2. 创建用户 joe 并将其与现有 user_t 受限 shell 域关联: useradd -Z user_u joe

ssh joe@localhost 'id -Z'

创建新的受限用户有点复杂,但要点是 sshd、login 等登录程序使用 pam_selinux 来确定运行登录 shell 的上下文,并且它们手动转换,而不是自动转换。 /etc/selinux/TYPE/contexts/users/ 中的文件用于与 /etc/selinux/TYPE/contexts 中的其他文件一起使用

相关内容