PAM 的全称为“可插拔认证模块(Pluggable Authentication Modules)”。
设计的初衷是将不同的底层认证机制集中到一个高层次的API中,从而省去开发人员自己去设计和实现各种繁杂的认证机制的麻烦。如果没有 PAM ,认证功能只能写在各个应用程序中,一旦要修改某个认证方法,开发人员可能不得不重写程序,然后重新编译程序并安装;有了 PAM ,认证的工作都交给 PAM ,程序主体便可以不再关注认证问题了:“ PAM 允许你进来,那你就进来吧”
PAM拥有四种工作类别:
account 在用户能不能使用某服务上具有发言权,但不负责身份认证。比如,account 这个 type 可以检查用户能不能在一天的某个时间段登录系统、这个用户有没有过期、以及当前的登录用户数是否已经饱和等等。通常情况下,在登录系统时,如果你连 account 这个条件都没满足的话,即便有密码也还是进不去系统的。
auth 验证“你的确是你”的 type 。一般来说,询问你密码的就是这个 type。假如你的验证方式有很多,比如一次性密码、指纹、虹膜等等,都应该添加在 auth 下。auth 做的另外一件事情是权限授予,比如赋给用户某个组的组员身份等等
password 主要负责和密码有关的工作。修改密码的时候有时会提示“密码不够长”、“密码是个常用单词”之类的,就是在这里设置的。在这里还设置了保存密码时使用了哪种加密方式(比如现在常用的 SHA-512)。请注意,这里的密码不局限于 /etc/shadow 中的密码,有关认证 token 的管理都应该在此设置:如果你使用指纹登录 Linux,在设置新指纹时,如果希望首先验证这是人的指纹而不是狗的指纹,也应该放在这里。
session 一个“忙前忙后”的 type,它要在某个服务提供给用户之前和之后做各种工作。比如用户登录之前要将用户家目录准备好,或者在用户登录之后输出 motd) 等等
- pam_access.so 设置登录系统的黑白名单. 默认配置文件为“/etc/security/access.conf ”,通常作用于登陆程序,如su,login,gdm,sshd等等
```shell
[root@k8s-master pam.d]# vim /etc/security/access.conf
拒绝所有root登录 除了10.172.190.26/32这个地址
-:root:ALL EXCEPT 10.172.190.26/32拒绝10.0.0.0/24地址的 所有root登录行为
-:root:10.0.0.0/24
[root@k8s-master pam.d]# vim /etc/pam.d/login
设置终端登录 规则
account required pam_access.so
[root@k8s-master pam.d]# vim /etc/pam.d/sshd
设置sshd登录 规则
account required pam_access.so
[root@k8s-master pam.d]# vim /etc/pam.d/su
设置su登录 规则
account required pam_access.so
2. pam_listfile.so 基于自定义文件允许或拒绝访问资源限制```shell[root@k8s-master pam.d]# vim /etc/pam.d/sshd#允许文件/root/users进行ssh登录 注意,“onerr=fail”表示当文件“/etc/passwd”不存在时,默认为fail。auth required pam_listfile.so item=user sense=allow file=/root/users onerr=fail[root@k8s-master pam.d]# vim /etc/pam.d/su#允许文件/root/users进行su账号切换 注意,“onerr=fail”表示当文件“/etc/passwd”不存在时,默认为fail。auth required pam_listfile.so item=user sense=allow file=/root/users onerr=fail
- pam_time.so 基于时间的访问控制
配置格式:services;devices;users;times
service条目可以通过”/etc/pam.d”内的文件获取;
devices可以使用!ttyp表示控制台,ttyp用来表示远程设备,tty*用来表示所有设备
users列表可以使用符号|分隔;
times每个时间范围由2个字符缩写,前面的用来指示规则应用日期,
后面一个用来指示在哪几个小时之间Mo\Tu\We\Th\Fr\Sa\Su,Wk表示工作日,Wd表示周末,A1表示每周的每一天
[root@k8s-master pam.d]# vim /etc/security/time.confsshd;*;*;SaSu0800-1800 #表示sshd服务的所有终端的所有用户只能在8-18点可以正登陆。[root@k8s-master pam.d]# vim /etc/pam.d/sshd#设置sshd登录 规则account required pam_time.so
- pam_tally2.so 登录统计
```shell
[root@k8s-master pam.d]# vim /etc/pam.d/sshd
表示当用户输入次数超过2次时,锁定用户60秒,因此这里的“even_deny_root ”表示包括root用户,“root_unlock_time”表示root用户锁定的时间,“unlock_time”表示其他用户锁定的时间。
auth required pam_tally2.so deny=2 even_deny_root root_unlock_time=60 unlock_time=60 [root@k8s-master pam.d]# pam_tally2 -u root #查询错误登录次数 [root@k8s-master pam.d]# pam_tally2 —reset -u root #解锁
```
- pam_limits.so 功能:限制用户会话过程中对各种资源的使用情况。缺省情况下该模块的配置文件是“/etc/security/limits.conf ”或“/etc/security/limits.d/*.conf”
- pam_cracklib 强制使用强密码(用户密码安全配置)PAM配置文件:/etc/pam.d/system-auth-ac
