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) 等等

  1. 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

  1. 2. pam_listfile.so 基于自定义文件允许或拒绝访问资源限制
  2. ```shell
  3. [root@k8s-master pam.d]# vim /etc/pam.d/sshd
  4. #允许文件/root/users进行ssh登录 注意,“onerr=fail”表示当文件“/etc/passwd”不存在时,默认为fail。
  5. auth required pam_listfile.so item=user sense=allow file=/root/users onerr=fail
  6. [root@k8s-master pam.d]# vim /etc/pam.d/su
  7. #允许文件/root/users进行su账号切换 注意,“onerr=fail”表示当文件“/etc/passwd”不存在时,默认为fail。
  8. auth required pam_listfile.so item=user sense=allow file=/root/users onerr=fail
  1. 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表示每周的每一天

  1. [root@k8s-master pam.d]# vim /etc/security/time.conf
  2. sshd;*;*;SaSu0800-1800 #表示sshd服务的所有终端的所有用户只能在8-18点可以正登陆。
  3. [root@k8s-master pam.d]# vim /etc/pam.d/sshd
  4. #设置sshd登录 规则
  5. account required pam_time.so
  1. 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 #解锁

```

  1. pam_limits.so 功能:限制用户会话过程中对各种资源的使用情况。缺省情况下该模块的配置文件是“/etc/security/limits.conf ”或“/etc/security/limits.d/*.conf”
  2. pam_cracklib 强制使用强密码(用户密码安全配置)PAM配置文件:/etc/pam.d/system-auth-ac