问题描述:
近日服务器ssh无法通过远程连接上去,连接时服务器的SELiunx发起警报sshd被拦截
问题排查:
1.重启sshd服务
systemctl restart sshd
2.查看sshd的运行状态
systemctl status sshd
sshd.service failed
发现sshd进程启动失败,但从这里看不出失败的原因
3.查看linux系统日志
cat /var/log/messages
翻到最末尾端,发现一条有用的信息:
/usr/sbin/sshd: error while loading shared libraries: cannot create cache for search path: Cannot allocate memory
Unit sshd.service entered failed state.
sshd.service failed.
SELinux is preventing /usr/sbin/sshd from using the execmem access on a process. For complete SELinux messages. run sealert -l 8d238acb-0553-4daf-98f1-ba2a20c90eec
根据上面那条SELinux拦截的信息看出
SELinux正在阻止/usr/sbin/sshd对进程使用execmem访问
可以根据他提示的执行命令查看完整的拦截消息:
“sealert -l 8d238acb-0553-4daf-98f1-ba2a20c90eec”
也可以用下面的办法:
在网上搜索了一下
auditd 会把 SELinux 的信息都记录在 /var/log/auditd/auditd.log 中。
用命令输出一下auditd.log里包含denied的信息
cat /var/log/audit/audit.log | grep denied
查看到一条信息如下:
type=AVC msg=audit(1601087029.552:15377): avc: denied { execmem } for pid=30125 comm="sshd" scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tclass=process
在网上搜到相似的问题,这个问题是因为{ execmem }权限不够,导致sshd被SELinux拦截
具体的权限查看:
ls -alZ
解决办法:
修复一下ssh目录的权限
使用restorecon来恢复ssh主目录中所有文件的SELinux配置信息
restorecon -r -v /root/.ssh
修复完成后,使用xshell测试连接成功。