简介
1 . PAM (Pluggable AuthenticationModules, 嵌入式模块)
PAM 可以说是一套应用程序接口 (Application Programming Interface, API),他提供了一连串的验证机制,只要使用者将验证阶段的需求告知 PAM 后, PAM 就能够回报使用者验证的结果 (成功或失败)。
2 . 可以在写程序的时候将 PAM 模块的功能加入,就能够利用 PAM 的验证功能
3 . PAM 用来进行验证的数据称为模块 (Modules),每个 PAM 模块的功能都不太相同。举例来说, 还记得我们在本章使用 passwd 指令时,如果随便输入字典上面找的到的字串,passwd 就会回报错误信息了!这是为什么呢?这就是 PAM 的 pam_cracklib.so 模块的功能!他能够判断该密码是否在字典里面! 并回报给密码修改程序,此时就能够了解你的密码强度了。
4 . 所以,当你有任何需要判断是否在字典当中的密码字串时,就可以使用 pam_cracklib.so 这个模块来验证! 并根据验证的回报结果来撰写你的程序呢语法
当你执行 passwd 后,这支程序调用 PAM 的流
程是:
1 . 使用者开始执行 /usr/bin/passwd 这支程序,并输入密码;
2 . passwd 调用 PAM 模块进行验证;
3 . PAM 模块会到 /etc/pam.d/ 找寻与程序 (passwd) 同名的配置文件;
4 . 依据 /etc/pam.d/passwd 内的设置,引用相关的 PAM 模块逐步进行验证分析;
5 . 将验证结果 (成功、失败以及其他讯息) 回传给 passwd 这支程序;
6 . passwd 这支程序会根据 PAM 回传的结果决定下一个动作 (重新输入新密码或者通过验
证!)
从上头的说明,我们会知道重点其实是 /etc/pam.d/ 里面的配置文件,以及配置文件所调用的PAM 模块进行的验证工作! 既然一直谈到 passwd 这个密码修改指令,那我们就来看看/etc/pam.d/passwd 这个配置文件的内容是怎样吧[root@CentOS kevin]# cat /etc/pam.d/passwd #%PAM-1.0 auth include system-auth account include system-auth password substack system-auth -password optional pam_gnome_keyring.so
区分为三个字段:
(1)第一个字段:验证类型(Type)(四种)
auth:authentication(认证)
account:account(账号)
session:session(会话)
password:password(密码)
(2)第二个字段:验证的控制标准(control flag)
required:成功或失败都会继续后面的流程
requisite:验证失败则立刻回报失败标志,并终止后续的验证流程,验证成功则继续后续流程
sufficient:验证成功回传成功标志,并终止后续流程,验证失败则继续后续流程
optional:主要用于显示信息
常用模块
[root@CentOS kevin]# cat /etc/pam.d/login #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth include system-auth account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth -session optional pam_ck_connector.so [root@CentOS kevin]# cat /etc/pam.d/system-auth #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so
上面这个表格当中使用到非常多的 PAM 模块,每个模块的功能都不太相同,详细的模块情报可以在你的系统中找到:
/etc/pam.d/*:每个程序个别的 PAM 配置文件;
/lib64/security/*:PAM 模块文件的实际放置目录;
/etc/security/*:其他 PAM 环境的配置文件;
/usr/share/doc/pam-*/:详细的 PAM 说明文档。
- login的PAM验证机制流程:
(1)验证阶段 (auth):首先,(a)会先经过 pam_securetty.so 判断,如果使用者是 root时,则会参考 /etc/securetty 的设置; 接下来(b)经过 pam_env.so 设置额外的环境变量;再(c)通过 pam_unix.so 检验密码,若通过则回报 login 程序;若不通过则(d)继续往下以 pam_succeed_if.so 判断 UID 是否大于 1000 ,若小于 1000则回报失败,否则再往下 (e)以 pam_deny.so 拒绝连线。
(2)授权阶段 (account):(a)先以 pam_nologin.so 判断 /etc/nologin 是否存在,若存在则不许一般使用者登陆; (b)接下来以 pam_unix.so 及 pam_localuser.so 进行帐号管理,再以 (c) pam_succeed_if.so 判断 UID 是否小于 1000 ,若小于 1000 则不记录登录信息。(d)最后以 pam_permit.so 允许该帐号登陆。
(3)密码阶段 (password):(a)先以 pam_pwquality.so 设置密码仅能尝试错误 3 次;(b)接下来以 pam_unix.so 通过 sha512, shadow 等功能进行密码检验,若通过则回报login 程序,若不通过则 (c)以 pam_deny.so 拒绝登陆。
(4)会议阶段 (session):(a)先以 pam_selinux.so 暂时关闭 SELinux;(b)使用pam_limits.so 设置好使用者能够操作的系统资源; (c)登陆成功后开始记录相关信息在登录文件中; (d)以 pam_loginuid.so 规范不同的 UID 权限;(e)打开pam_selinux.so 的功能。
总之,就是依据验证类别 (type) 来看,然后先由 login 的设置值去查阅,如果出现“ includesystem-auth ” 就转到 system-auth 文件中的相同类别,去取得额外的验证流程就是了。然后再到下一个验证类别,最终将所有的验证跑完! 就结束这次的 PAM 验证啦! - 其他相关文件
(1)除了前一小节谈到的 /etc/securetty 会影响到 root 可登陆的安全终端机, /etc/nologin 会影响到一般使用者是否能够登陆的功能之外,我们也知道 PAM 相关的配置文件在 /etc/pam.d ,说明文档在 /usr/share/doc/pam-(版本) ,模块实际在 /lib64/security/ 。那么还有没有相关的 PAM 文件呢? 是有的,主要都在 /etc/security 这个目录内!我们下面介绍几个可能会用到的配置文件喔!limits.conf我们在第十章谈到的 ulimit 功能中, 除了修改使用者的 ~/.bashrc 配置文件之外,其实系统管理员可以统一借由 PAM 来管理的! 那就是 /etc/security/limits.conf 这个文件的设置了。这个文件的设置很简单,你可以自行参考一下该文件内容。 我们这里仅作个简单的介绍:
(2)/var/log/secure, /var/log/messages
如果发生任何无法登陆或者是产生一些你无法预期的错误时,由于 PAM 模块都会将数据记载在 /var/log/secure 当中,所以发生了问题请务必到该文件内去查询一下问题点!举例来说,我们在 limits.conf 的介绍内的范例二,就有谈到多重登陆的错误可以到 /var/log/secure 内查阅了! 这样你也就知道为何第二个 pro1 无法登陆啦。
鸟哥的linux私房菜学习笔记《二十八》PAM模块
最新推荐文章于 2024-01-05 16:22:47 发布