将/ home移至新磁盘,SELinux拒绝sshd访问/ home

昨天,我在Centos6 VM框中添加了一个驱动器,在驱动器上创build了一个/ home挂载点,然后将一个用户(在这个例子中是jenkins)移到它上面,从/挂载点释放空间。

这似乎工作正常,权限和标签都看起来是正确的,但今天早些时候我开始看到问题,我无法SSH作为jenkins用户从任何框中的框。 以root用户身份进入SSH并运行jenkins运行良好。 最重要的是,如果我做了service sshd stop ,然后/usr/sbin/sshd我可以直接连接到框,作为jenkins用户。

经过大量的debugging,我最终发现了/var/log/audit/audit.log SELinux拒绝,如下所示:

 type=AVC msg=audit(1428584552.564:187): avc: denied { search } for pid=1798 comm="sshd" name="/" dev=sdd1 ino=2 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir type=AVC msg=audit(1428584552.567:188): avc: denied { getattr } for pid=1798 comm="sshd" path="/home" dev=sdd1 ino=2 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir 

设置SELinux为宽容,然后允许我作为jenkins用户远程重新连接。

我对SELinux并不是很了解,但是在读完SELinux的Gentoo教程之后,我将这些错误读为sshd,尝试使用system_u:system_r:sshd_t:s0的系统上下文访问/和/ home。 相反,这些端点被标记为system_u:object_r:file_t:s0这至less是/ home目录被标记为(不太确定如何看到/的标签)。

对我来说,这些标签看起来是正确的那些目录,我不太确定为什么它试图寻找目录树上的sshd_t标签。

运行ls -laZ获取重要的部分(.ssh文件夹和authorized_keys)给了我:

 drwx------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 .ssh 

 -rw-------. jenkins jenkins unconfined_u:object_r:ssh_home_t:s0 authorized_keys 

这看起来像其他箱子,我正在检查,他们工作正常。

我需要做什么才能使SELinux合作,这样我就可以重新执行了?

编辑:我试过umounting / home,并使用restorecon试图重新标记目录感谢迈克尔汉普顿的build议,但是这并没有改变目录上的标签,如上面提到的system_u:object_r:file_t:s0标签为/ home与其他运行良好的盒子相比看起来是正确的。

有没有办法在尝试访问此目录时更改sshd的系统上下文?

你不看正确的目录。

您的AVC否认特别针对//home的上下文进行投诉,而不是对其中的任何文件进行投诉。

这让我怀疑你不仅仅是那些错误标记的目录条目。

这是我将如何恢复:

  1. 卸载/home 。 这是必要的,因为我们要恢复父文件系统中的挂载点上的文件上下文以及子文件系统中的文件上下文。
  2. 还原/home安装点的文件上下文。

     restorecon -v /home 
  3. 重新安装/home

  4. 为整个系统恢复文件上下文,只是为了确保。 这可以通过以下两种方式之一来完成:

    • touch /.autorelabel并重新启动。 系统将在启动过程中重新标记。
    • restorecon -r -v /并在完成时重启。 我通常使用这个方法,因为它给了你一个被改变的文件上下文的完整列表。

一旦你重新标记和重新启动,你应该安全返回到SELinux执行。