【OpenSSH升级】无论密码输入正确与否总是登录失败
创始人
2025-05-31 10:55:01
0

# 问题:如果远程通过ssh访问,无论密码输入正确与否总是失败
通过journalctl -xe -u sshd查看日志有
error: Received disconnect from 192.168.18.202 port 52219:13: The user canceled authentication.  [preaut>
Disconnected from authenticating user root 192.168.18.202 port 52219 [preauth]
error: Could not get shadow information for root
Failed password for root from 192.168.18.202 port 52248 ssh2


# 分析:
具体因为啥还得查看/var/log/audit/audit.log查看selinux日志分析:

type=AVC msg=audit(1297958384.484:13923): avc:  denied  { read } for  pid=5219 comm="sshd" name="shadow" dev=dm-0 ino=4115 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:shadow_t:s0 tclass=file

ll -Z /etc/shadow
----------. 1 root root system_u:object_r:shadow_t:s0 1068 Mar 20 10:39 /etc/shadow

# 原因:
默认情况下,sshd使用PAM检查密码。sshd使用的PAM模块之一是pam_unix。这个模块首先尝试直接读取/etc/shadow。如果权限被拒绝,则执行/sbin/unix_chkpwd。unix_chkpwd接受用户名和密码,并向pam_unix指示密码是否与用户名匹配。
这里的问题是,由于“PAM”在这里被禁用,sshd试图直接访问shadow文件。因为没有selinux规则允许这样的直接访问,所以selinux拒绝这样做。目标策略只允许unix_chkpwd (chkpwd_t)和unix_update (updpwd_t)程序读取/etc/shadow。允许sshd直接读取影子文件被认为存在潜在的安全风险。

# 解决方案:
方案一:(太过粗放霸道)
通过setenforce关闭selinux即可,或者编辑 /etc/selinux/config 文件,修改如下设置:
SELINUXTYPE=disabled
重启服务器,用以永久禁用SELinux。

方案二:(创建selinux策略,放行sshd直接读shadow)
参考链接:https://access.redhat.com/solutions/46137

# vi /etc/ssh/ssh_password
module ssh_password 1.0;require {type sshd_t;type shadow_t;class file { read open };
}#============= sshd_t ==============
allow sshd_t shadow_t:file { read open };# cd /etc/ssh/
# checkmodule -M -m -o ssh_password.mod ssh_password
# semodule_package -o ssh_password.pp  -m ssh_password.mod
# ll ssh_password*
-rw-r--r--. 1 root root 187 Mar 20 12:07 ssh_password
-rw-r--r--. 1 root root 926 Mar 20 12:08 ssh_password.mod
-rw-r--r--. 1 root root 942 Mar 20 12:08 ssh_password.pp
# semodule -i ssh_password.pp
# semodule -l |grep ssh
rssh
ssh
ssh_password

方案三:启动UsePAM yes,由pam_unix去读取shadow文件。
1、升级openssh之前,备份原有配置文件

mv /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
mv /etc/pam.d/sshd /etc/pam.d/sshd_bak

2、升级完成之后备份新的配置文件,恢复原来的配置

mv /etc/pam.d/sshd /etc/pam.d/sshd_new
mv /etc/ssh/sshd_config /etc/ssh/sshd_config_newmv /etc/ssh/sshd_config_bak /etc/ssh/sshd_config
mv /etc/pam.d/sshd_bak /etc/pam.d/sshd 

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...