摘自:https://blog.csdn.net/lws123253/article/details/89354606
首先了解一下,什么是linux的pam认证呢?
pam认证机制:简单来说就是linux系统采取的这一种对不同用户以及系统中的不同服务进行的安全认证机制。
认证流程:linux系统首先确定所需认证的服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。
举个例子,我们登陆的时候,会向 PAM 发出验证要求的通知, PAM 经过一连串的验证后,将验证的结果回报给该程序,然后该程序就能够利用验证的结果来进行可登陆或显示其他无法使用的信息。
现在我们取 /etc/pam.d/passwd这个配置文件的内容来看一看:
我们看到有三列数据,它们分别代表了 :验证类别、控制标志、PAM 模块与该模块的参数。
你会发现在我们上面的表格当中第二列出现的是“include”这个关键词,他代表的是会调用后面的文件来作为这个类别的验证, 所以,上述的每一行都要调用/etc/pam.d/system-auth 那个文件来进行验证。
现在我们重点讲一下第一个字段验证类别和第二个字段控制标志。
验证类别:
验证类别主要分为四种:
- auth:是 authentication (认证) 的缩写,所以这种类别主要用来检验使用者的身份验证,这种类别通常是需要口令来检验的, 所以后续接的模块是用来检验用户的身份。
- account:账户模块接口,检查指定账户是否满足当前验证条件,检查账户是否到期等。
- session:会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效
- password:密码模块接口,用于更改用户密码,以及强制使用强密码配置
控制标志:
required:若成功则带有 success (成功) 的标志,若失败则带有 failure 的标志,但不论成功或失败都会继续后续的验证流程。 由于后续的验证流程可以继续进行,因此相当有利于数据的登录 (log) ,这也是 PAM 最常使用 required 的原因。
requisite:若验证失败则立刻返回 failure 的标志,并终止后续的验证流程。若验证成功则带有 success 的标志并继续后续的验证流程。 这个项目与 required 最大的差异,就在于失败的时候还要不要继续验证下去。由于 requisite 是失败就终止, 因此失败时所产生的 PAM 信息就无法透过后续的模块来记录了。
sufficient:若验证成功则立刻回传 success 给原程序,并终止后续的验证流程;若验证失败则带有 failure 标志并继续后续的验证流程。 这玩意儿与 requisits 刚好相反!
optional :该模块返回的通过/失败结果被忽略。当没有其他模块被引用时,标记为optional模块并且成功验证时该模块才是必须的。
常用模块:
pam_securetty.so: 限制系统管理员 (root) 只能够从安全的 (secure) 终端机登陆;例如 tty1, tty2 等就是传统的终端机装置名称。那么安全的终端机配置呢? 就写在 /etc/securetty 这个文件中。你可以查阅一下该文件, 就知道为什么 root 可以从 tty1~tty7 登陆,但却无法透过 telnet 登陆 Linux 主机了! pam_nologin.so: 这个模块可以限制一般用户是否能够登陆主机之用。当 /etc/nologin 这个文件存在时,则所有一般使用者均无法再登陆系统了!若 /etc/nologin 存在,则一般使用者在登陆时, 在他们的终端机上会将该文件的内容显示出来!所以,正常的情况下,这个文件应该是不能存在系统中的。 但这个模块对 root 以及已经登陆系统中的一般账号并没有影响。 pam_selinux.so: SELinux 是个针对程序来进行细部管理权限的功能。由于 SELinux 会影响到用户运行程序的权限,因此我们利用 PAM 模块,将 SELinux 暂时关闭,等到验证通过后, 再予以启动! pam_console.so: 当系统出现某些问题,或者是某些时刻你需要使用特殊的终端接口 (例如 RS232 之类的终端联机设备) 登陆主机时, 这个模块可以帮助处理一些文件权限的问题,让使用者可以透过特殊终端接口 (console) 顺利的登陆系统。 pam_loginuid.so: 我们知道系统账号与一般账号的 UID 是不同的!一般账号 UID 均大于 500 才合理。 因此,为了验证使用者的 UID 真的是我们所需要的数值,可以使用这个模块来进行规范! pam_env.so: 用来配置环境变量的一个模块,如果你有需要额外的环境变量配置,可以参考 /etc/security/pam_env.conf 这个文件的详细说明。 pam_unix.so: 这是个很复杂且重要的模块,这个模块可以用在验证阶段的认证功能,可以用在授权阶段的账号许可证管理, 可以用在会议阶段的登录文件记录等,甚至也可以用在口令升级阶段的检验!非常丰富的功能! 这个模块在早期使用得相当频繁喔! pam_cracklib.so: 可以用来检验口令的强度!包括口令是否在字典中,口令输入几次都失败就断掉此次联机等功能,都是这模块提供的! 这玩意儿很重要!