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


相关推荐
正在努力的小河42 分钟前
Linux设备树简介
linux·运维·服务器
荣光波比44 分钟前
Linux(十一)——LVM磁盘配额整理
linux·运维·云计算
小张快跑。44 分钟前
Tomcat下载、安装及配置详细教程
java·服务器·tomcat
小晶晶京京1 小时前
day35-负载均衡
运维·网络·网络协议·学习·负载均衡
LLLLYYYRRRRRTT1 小时前
WordPress (LNMP 架构) 一键部署 Playbook
linux·架构·ansible·mariadb
轻松Ai享生活1 小时前
crash 进程分析流程图
linux
牛奶咖啡132 小时前
云计算核心技术之容器技术
云计算·容器技术·容器引擎·容器的主要应用场景·docker核心技术·容器编排工具·k8s的运行架构和重要概念
没有不重的名么2 小时前
Tmux Xftp及Xshell的服务器使用方法
服务器·人工智能·深度学习·机器学习·ssh
wdxylb2 小时前
云原生俱乐部-杂谈1
服务器·云原生
网络研究院3 小时前
网络安全和基础设施安全局 (CISA) 表示微分段不再是可选的
网络·安全·web安全·零信任·微分段