PAM 安全框架导致ssh无法登陆的排查方法

Linux系统
1780
linux
linux 举报
2020-06-07

Linux系统中通过pam框架的设置可以提高服务器的安全性,使服务器的登陆访问控制在有限的范围内,降低服务器别攻击登陆的风险。

 

Linux系统中和ssh相关的pam配置文件主要有三个

文件

功能说明

/etc/pam.d/login

管理终端对应的配置文件

/etc/pam.d/sshd

ssh远程登陆对应的配置文件

/etc/pam.d/system-auth

全局配置文件

 

/etc/pam.d/login主要用来限制管理终端登陆,能使用管理终端登陆的一般都是真正能够接触到服务器的管理员,一般很少针对此文件进行配置,采用默认的即可。

 

/etc/pam.d/system-auth全局配置文件,限制太多,我们想要实现的只是针对于远程登录的安全配置,用此文件范围太大,也不合适。

 

/etc/pam.d/sshd只针对ssh远程登录的配置文件,通过此文件的配置可以提高ssh登录的安全性,当然如果对这些内容并不了解也会导致配置之后系统无法正常登录使用的状况。

 

【异常排查方法】

排查思路:

思路就一点,看日志文件的报错信息。ssh的日志文件位置/var/log/secure

 

1、登录白名单配置

异常现象:

在进行远程登录时,即使密码输入正确,但是仍然无法登录系统

查看日志文件中有如下报错信息

pam_listfile(sshd:auth): Refused user test for service sshd

 

通过日志可以看到,是pam_listfile的配置内容拒绝了test用户通过sshd登录系统。

 

排查方法:

查看/etc/pam.d/sshd文件中是否有如下内容

auth required pam_listfile.so item=user sense=allow file=/etc/ssh/whitelist onerr=fail

注意:如果要配置白名单,此配置项必须添加到配置文件的第一行,否则不生效。

参数说明

item:设置访问控制的对象类型,可选值包括 tty|user|rhost|ruser|group|shell;

sense:定义了当在配置文件中找到符合条件的项目时的控制方式。可选值:allow|deny。即 allow 代表白名单方式,而 deny代表黑名单方式。

file:用于指定配置文件的全路径名称。

onerr:定义了出现错误(比如无法打开配置文件)时的缺省返回值。

 

查看配置中指向的白名单文件

[root@test ~]# vim /etc/ssh/whitelist

root

zxj

 

可以看到白名单文件中并没有进行登录的用户test,所以无法登录系统。

 

解决方法:

a、将需要登录的用户添加到白名单文件中

b、删除白名单配置行或者注释白名单配置行

 

备注:黑名单和白名单设置格式类似,参考以下内容配置即可

auth required pam_listfile.so item=user sense=deny file=/etc/ssh/denylist

onerr=succeed

 

2、禁止UID小于500的系统用户登录系统

异常现象:

在进行远程登录时,即使密码输入正确,但是仍然无法登录系统

查看日志文件中有如下报错信息

pam_succeed_if(sshd:auth): requirement "uid >= 500" not met by user "root"

 

通过日志可以看到pam_succeed_if配置项要求UID不小于500

 

排查方法:

查看/etc/pam.d/sshd文件中是否有如下内容

auth required pam_succeed_if.so uid >= 500

 

解决方法:

a、修改配置项为如下内容

auth required pam_succeed_if.so uid <= 500

b、删除或注释盖此配置行

 

3、多次连续错误输入密码,触发系统 PAM 认证模块策略限制,导致用户被锁定

异常现象:

在进行远程登录时,即使密码输入正确,但是仍然无法登录系统

查看日志文件中有如下报错信息

PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.11 user=test

pam_tally2(sshd:auth): user test (502) has time limit [57s left] since last failure.

 

通过日志可以看到pam_tally2配置项显示用户test有较多的认证失败,自从上次登录失败后还需57s才能登录,再往上查看日志,有显示Failed password for test from 192.168.1.11 port 59851 ssh2表示test用户密码输入错误,可以判断当前用户test已经被锁定

 

排查方法:

查看/etc/pam.d/sshd文件中是否有如下内容

auth required pam_tally2.so deny=3 lock_time=60 unlock_time=10 even_deny_root root_unlock_time=10

 

参数说明

deny=5 表示连续 5 次错误输入密码,则账户会被锁定。

lock_time=30 表示锁定 30 秒。

unlock_time=10 表示账户被锁后,10秒后自动解锁。

even_deny_root 表示 root 用户在认证出错时,同样也会被锁定。

注意: 该策略启用后,一旦用户被锁定,只能等待解锁,或者使用单用户模式重新引导系统尝试解锁用户。

root_unlock_time=10 表示如果是 root 用户被锁定,则锁定 10 秒。

 

解决方法:

执行pam_tally2 --user test --reset手动解锁被锁定的用户

 

4、认证模块文件路径异常

异常现象:

在进行远程登录时,即使密码输入正确,但是仍然无法登录系统

查看日志文件中有如下报错信息

Module is unknown

 

通过日志可以看到报错信息是模块无法识别

排查方法:

以pam_namespace.so模块为例

查看/etc/pam.d/sshd文件中模块路径配置信息是否有如下内容:

session required /lib/security/pam_namespace.so

 

其中/lib路径为32位系统路径,64位系统中应该为/lib64

解决方法:

a、修改配置项为以下内容

session required /lib64/security/pam_namespace.so

b、直接使用默认路径

session required pam_namespace.so


倒序看帖 只看楼主
热点关注
You need Perl 5 安装openssl时报错提示需要安装perl 5
shell 脚本中常见的 if [ $? -ne 0 ]; 意思
shell 中 if [ “x${var}“ == “x“ ] 中 x的作用
shell脚本每行后面多了一个^M的原因和解决办法
服务停止、启动、重启一体化脚本,万能语言启动脚本
shell参数判断
在后台用进程名运行bash脚本
shell脚本每行后面多了一个^M的原因和解决办法
定时检测服务,检测down掉后重启。系统检测到DMSERVER运行正常
挂载磁盘的时候遇到一个问题,挂载完磁盘之后重启服务器挂载的盘丢失了.
中标麒麟系统Your trial is EXPIRED and no VALID licens
termux 开启ssh并用用户名和密码登陆
extman-1.1自带了图形化显示日志的功能;此功能需要rrdtool的支持,您需要安装此些模块才可能正常显示图形日志。
postfix的相关个别参数设置
postfix中recipient/client/sender/helo四者的区别