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,这取决于每个模块的认证结果和控制标记的作用。


相关推荐
多多*3 分钟前
OJ在线评测系统 登录页面开发 前端后端联调实现全栈开发
linux·服务器·前端·ubuntu·docker·前端框架
卑微的码蚁5 分钟前
服务器相关问题
运维·服务器
博洋科技7 分钟前
网站建设的服务器该如何选择?
运维·服务器·网站建设·保定响应式网站建设·保定h5网站建设·保定网站建设
人类群星闪耀时12 分钟前
服务器管理:从零开始的服务器安装与配置指南
运维·服务器
WSY88x13 分钟前
重塑支付安全:区块链技术引领下的积分系统革新
安全·区块链
kinlon.liu38 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
NiNg_1_2341 小时前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行1 小时前
Linux安装Docker以及Docker入门操作
运维·docker·容器
王哲晓1 小时前
Linux通过yum安装Docker
java·linux·docker
小江湖19941 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it