文章目录
- 4Linux中的PAM安全认证
-
- 介绍
- su命令的安全隐患
- PAM认证原理和构成
- PAM安全认证流程
- [PAM 配置文件结构说明](#PAM 配置文件结构说明)
- [PAM 控制标记的补充说明](#PAM 控制标记的补充说明)
- [PAM 实例](#PAM 实例)
4Linux中的PAM安全认证
介绍
- PAM(Pluggable Authentication Modules),可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
- 配置文件每一行配置定义了一个认证过程,这些认证过程按照从上往下的顺序依次执行
- PAM 通过模块化的设计,使得系统管理员可以灵活地配置和定制认证过程,以满足不同的安全需求
su命令的安全隐患
安全隐患
默认情况下,任何用户都允许使用 su 命令
其他用户有机会反复尝试其他用户(如root) 的登录密码,带来安全风险
解决办法
使用 PAM 认证模块限制 su 命令的使用
为了加强 su 命令的使用控制,借助于PAM认证模块,只允许极个别用户使用 su 命令切换用户身份,减少安全风险
PAM认证原理和构成
-
认证流程
流程大致为:
Service(服务)→PAM(配置文件)→pam_*.so
PAM模块的认证流程一般遵循以下步骤顺序:
- 确定服务程序
- 加载相应的PAM配置文件PAM(位于/etc/pam.d下)
- 调用认证模块(位于/lib64/security下)进行安全认证
用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证,不同的应用程序所对应不同的PAM模块。
-
查看某个程序是否支持PAM认证,可以用ls命令
bashls /etc/pam.d | grep su # 检查 su 是否支持 PAM 认证
-
查看su的PAM配置文件
可以通过查看
/etc/pam.d/su
文件了解具体的 PAM 认证过程。文件中的每一行代表一个独立的认证过程,通常分为以下三个字段:- 认证类型(auth, account, password, session)
- 控制类型(required, requisite, sufficient, optional)
- PAM 模块及其参数(如 pam_wheel.so)
PAM安全认证流程
控制类型(Control Flags)
用于指定PAM验证模块的返回结果出来方式:
- required:验证失败时仍然继续,但返回 Fail 。
- requisite:验证失败则立即结束整个验证过程,返回 Fail 。
- sufficient:验证成功则立即返回,不再继续,否则继续执行其他认证。
- optional:用于会话控制(session),不直接用于验证,只显示信息。
PAM 配置文件结构说明
- 第一列:PAM 模块类型
- auth :用于用户身份验证,比如输入密码并验证是否是
root
用户。 - account:检查用户账号的属性,例如是否允许登录、账号是否过期、用户数量是否达到上限等。
- password:处理用户密码的更新,例如修改密码。
- session:管理用户会话,例如记录登录信息、挂载文件系统等。
- auth :用于用户身份验证,比如输入密码并验证是否是
- 第二列:PAM 控制标记
- required:该标记的模块必须成功才能继续认证。如果失败,认证过程不会立刻停止,而是执行该类型的所有模块后返回失败信息。这种方式隐藏了哪个模块失败,以增强安全性。
- requisite :类似
required
,但如果此模块失败,认证过程立即停止并返回失败信息。 - sufficient:如果此模块成功,立即返回成功,不再执行后续的相同类型的模块。如果失败,不影响最终结果。
- optional:无论此模块成功与否,认证过程都将继续。通常用于非关键的认证操作。
- include :在当前配置文件中包含其他 PAM 配置文件的内容。例如,可以调用
/etc/pam.d/system-auth
来处理系统认证。
- 第三列:PAM 模块
- 指定使用的 PAM 模块。通常位于
/lib64/security/
目录下,如果在其他路径,需要提供绝对路径。 - 同一个模块可以出现在不同类型中,每个类型调用该模块时的行为可能不同。
- 指定使用的 PAM 模块。通常位于
- 第四列:PAM 模块的参数
- 传递给模块的参数,可以根据所使用的模块配置多个参数,参数之间用空格分隔。
PAM 控制标记的补充说明
- required :该标记的模块必须成功才能通过认证,即所有带
required
标记的模块都必须成功,否则认证失败。但错误信息会在所有此类型模块执行完成后返回。 - requisite:如果此模块失败,认证过程立即停止并返回错误信息,不再执行后续模块。
- sufficient:只要此模块成功,认证立即返回成功结果,并跳过后续模块。如果失败,认证过程继续但不影响最终结果。
- optional:无论此模块成功与否,认证过程都将继续,因此不影响最终认证结果。
PAM 实例
以下是 PAM 认证过程中,使用不同控制标记对用户进行身份验证的示例:
模块类型 | 控制标记 | 模块 | 用户1 | 用户2 | 用户3 | 用户4 |
---|---|---|---|---|---|---|
auth | required | 模块1 | pass | fail | pass | pass |
auth | substack | 模块2 | pass | pass | fail | pass |
auth | required | 模块3 | pass | pass | pass | fail |
结果 | pass | fail | pass | pass |
在上表中,不同用户经过不同模块的认证后,最终结果为 pass
或 fail
,这取决于每个模块的认证结果和控制标记的作用。