Linux系统安全及应用(二):PAM安全认证


文章目录


4Linux中的PAM安全认证

介绍

  • PAM(Pluggable Authentication Modules),可插拔式认证模块
  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式
  • 配置文件每一行配置定义了一个认证过程,这些认证过程按照从上往下的顺序依次执行
  • PAM 通过模块化的设计,使得系统管理员可以灵活地配置和定制认证过程,以满足不同的安全需求

su命令的安全隐患

安全隐患

默认情况下,任何用户都允许使用 su 命令

其他用户有机会反复尝试其他用户(如root) 的登录密码,带来安全风险

解决办法

使用 PAM 认证模块限制 su 命令的使用

为了加强 su 命令的使用控制,借助于PAM认证模块,只允许极个别用户使用 su 命令切换用户身份,减少安全风险

PAM认证原理和构成

  • 认证流程

    流程大致为:

    Service(服务)→PAM(配置文件)→pam_*.so

    PAM模块的认证流程一般遵循以下步骤顺序:

    1. 确定服务程序
    2. 加载相应的PAM配置文件PAM(位于/etc/pam.d下)
    3. 调用认证模块(位于/lib64/security下)进行安全认证

用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证,不同的应用程序所对应不同的PAM模块。

  • 查看某个程序是否支持PAM认证,可以用ls命令

    bash 复制代码
    ls /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验证模块的返回结果出来方式:

  1. required:验证失败时仍然继续,但返回 Fail 。
  2. requisite:验证失败则立即结束整个验证过程,返回 Fail 。
  3. sufficient:验证成功则立即返回,不再继续,否则继续执行其他认证。
  4. optional:用于会话控制(session),不直接用于验证,只显示信息。

PAM 配置文件结构说明

  1. 第一列:PAM 模块类型
    • auth :用于用户身份验证,比如输入密码并验证是否是 root 用户。
    • account:检查用户账号的属性,例如是否允许登录、账号是否过期、用户数量是否达到上限等。
    • password:处理用户密码的更新,例如修改密码。
    • session:管理用户会话,例如记录登录信息、挂载文件系统等。
  2. 第二列:PAM 控制标记
    • required:该标记的模块必须成功才能继续认证。如果失败,认证过程不会立刻停止,而是执行该类型的所有模块后返回失败信息。这种方式隐藏了哪个模块失败,以增强安全性。
    • requisite :类似 required,但如果此模块失败,认证过程立即停止并返回失败信息。
    • sufficient:如果此模块成功,立即返回成功,不再执行后续的相同类型的模块。如果失败,不影响最终结果。
    • optional:无论此模块成功与否,认证过程都将继续。通常用于非关键的认证操作。
    • include :在当前配置文件中包含其他 PAM 配置文件的内容。例如,可以调用 /etc/pam.d/system-auth 来处理系统认证。
  3. 第三列:PAM 模块
    • 指定使用的 PAM 模块。通常位于 /lib64/security/ 目录下,如果在其他路径,需要提供绝对路径。
    • 同一个模块可以出现在不同类型中,每个类型调用该模块时的行为可能不同。
  4. 第四列: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

在上表中,不同用户经过不同模块的认证后,最终结果为 passfail,这取决于每个模块的认证结果和控制标记的作用。


相关推荐
AI慧聚堂几秒前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器3 分钟前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye14 分钟前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_4336184418 分钟前
shell 编程(三)
linux·运维·服务器
鸭梨山大。24 分钟前
Jenkins 任意文件读取(CVE-2024-23897)修复及复现
安全·中间件·jenkins
企业管理8MSaaS25 分钟前
如何选择适合Scrum团队的项目管理系统?
云计算·scrum
苹果醋326 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
企业管理8MSaaS28 分钟前
如何在 Scrum 管理中化解团队冲突?
云计算·scrum
两张不够花28 分钟前
Jenkins 持续集成部署
运维·jenkins
Tlzns40 分钟前
Linux网络——UDP的运用
linux·网络·udp