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