![为什么服务器上的 ssh/sshd 尝试访问 /home/我移动用户主目录后,是否会出现 /.ssh 问题?](https://linux22.com/image/1426353/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%20ssh%2Fsshd%20%E5%B0%9D%E8%AF%95%E8%AE%BF%E9%97%AE%20%2Fhome%2F%E6%88%91%E7%A7%BB%E5%8A%A8%E7%94%A8%E6%88%B7%E4%B8%BB%E7%9B%AE%E5%BD%95%E5%90%8E%EF%BC%8C%E6%98%AF%E5%90%A6%E4%BC%9A%E5%87%BA%E7%8E%B0%20%2F.ssh%20%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我移动了我的用户主目录,usermod -m -d /path/to/new/home/username
它似乎运行良好。
但是,在我的 [已移动] 主目录中,我有一个“.ssh”文件夹,该文件夹设置为允许我使用公钥身份验证从另一台主机连接,而无需密码。从“客户端”工作站连接时,此(无密码公钥身份验证)工作正常,前我移动了我的主目录。
man sshd
表示authorized_keys
文件位置是默认的~/.ssh/authorized_keys
,并且我的sshd_config
不会覆盖它,因为它AuthorizedKeysFile
根本没有设置指令。
每当我从“客户端”连接到主机时,它都会要求输入密码。它不应该这样,它应该直接让我登录,这要归功于公钥认证。我怀疑sshd
主机仍然认为我的主目录是/home/<user>
,或者在最坏的情况下,坚持将我的用户名添加到某个假定的前缀中,而该前缀不再有效。
有趣的是,如果我生成另一个并使用(与其他命令行相同的命令行,只是添加了)sshd -de -p 23
连接到此端口上的主机,它会识别主机上的新主目录路径并直接登录。ssh -p 23 ...
-p 23
我尝试使用sshd
和重新加载service sshd reload
并重新启动service sshd restart
,最后甚至重新启动了主机。在sshd
要求我输入密码方面没有任何变化。
我从哪里开始调试?我在 CentOS 6.5 x86-64 上。
更新
我现在有强烈的迹象表明这与 SELinux 有关。显然,新主目录的安全上下文是错误的,但这几乎就是我所发现的全部。SELinux 是在没有询问我的情况下安装在系统上的,我对此一无所知(我也不应该知道,因为我没有碰过它,但依靠它来usermod -m -d ...
完成它应该做的工作)。
答案1
一种解决方案是修改您的 SELinux 配置,以便 SELinux 了解此上下文中所需的上下文:
semanage fcontext -a -s unconfined_u -t ssh_home_t '/path/to/your/new/home/\.ssh(/.*)?'
这是受到输出的启发semanage fcontext -l | grep ssh
,我的系统显示/root
也是按照这种方式进行管理的。
请注意,我选择了unconfined_u
SELinux 用户 - 如果您打算使用其他用户,例如,如果此主页用于服务,则选择其他用户可能是明智的system_u
。