SELinux 不允许oddjobd-mkhomedir 在非标准位置创建用户主目录

Abh*_*bhi 9 selinux

我们正在使用 SSSD 来验证 CentOS 服务器上的用户。当默认主目录为 /home 时,oddjobd-mkhomedir 工作得很好,但在特定服务器上,我们必须将默认主目录更改为 /data,它位于 SAN 安装上。

现在,每次用户尝试登录时,他们都会被放入带有以下消息的 bash shell。

Creating home directory for first.last.

Could not chdir to home directory /data/X.Y.local/first.last: No such file or directory

-bash-4.1$
Run Code Online (Sandbox Code Playgroud)

每次尝试时,我都会看到以下 AVC 拒绝消息:

type=AVC msg=audit(1492004159.114:1428): avc:  denied  { create } for  pid=2832 
comm="mkhomedir" name="x.y.local"
scontext=system_u:system_r:oddjob_mkhomedir_t:s0-s0:c0.c1023
tcontext=system_u:object_r:default_t:s0 tclass=dir
Run Code Online (Sandbox Code Playgroud)

确保更改 /data 的上下文。

 drwxr-xr-x. root root system_u:object_r:home_root_t:s0 data
Run Code Online (Sandbox Code Playgroud)

如果 /data 与 /home 具有相同的上下文,为什么 SELinux 限制oddjobd 创建 /data/XYlocal/first.last ?

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted
Run Code Online (Sandbox Code Playgroud)

[更新]

不确定这是否是解决此问题的正确方法,但在添加以下三个条目后,用户现在可以登录并进入其主目录。对于新用户的目录是根据下面定义的上下文创建的。

semanage fcontext -a -t home_root_t /data
semanage fcontext -a -t user_home_dir_t /data/x.y.local
semanage fcontext -a -t user_home_t "/data/x.y.local(/.*)?"
Run Code Online (Sandbox Code Playgroud)

这是解决这个问题的正确方法吗?

Pat*_*ick 4

最后一部分semanage fcontext是永久将上下文设置为 yes 的正确方法。不过,您需要运行restorecon才能使其生效。

restorecon -Rv /data
Run Code Online (Sandbox Code Playgroud)

restorecon将考虑 中的任何内容/etc/selinux/targeted/contexts/files/file_contexts.local,其中应该包含您刚刚使用添加的自定义 fcontextssemanage

要临时设置这些上下文,请参考chcon命令:

chcon -Rv -t home_root_t /data 
Run Code Online (Sandbox Code Playgroud)