0

0

如何配置PAM模块 认证流程

P粉602998670

P粉602998670

发布时间:2025-08-15 12:01:01

|

299人浏览过

|

来源于php中文网

原创

pam认证流程的配置需先明确四类模块和控制标志的作用,1. auth负责身份验证,2. account检查账户状态,3. password管理密码策略,4. session处理会话操作,每类模块按配置文件中定义的顺序执行,控制标志required、requisite、sufficient和optional决定模块失败或成功时的流程走向,实际配置中常通过include引入common-*文件以提高可维护性,例如auth include common-auth,典型应用如sshd服务依次执行密码验证、账户检查、密码策略和会话建立,启用登录失败锁定可通过pam_tally2.so设置deny和unlock_time参数,配置时应备份原文件、逐步测试、避免滥用sufficient标志,并结合/var/log/auth.log排查问题,最终实现灵活且安全的认证控制。

如何配置PAM模块 认证流程

配置PAM(Pluggable Authentication Modules,可插拔认证模块)是Linux系统中管理用户认证的重要方式。它允许系统管理员灵活地控制登录、sudo、ssh等服务的认证流程,而无需修改应用程序本身。下面介绍如何理解和配置PAM模块的认证流程。


一、PAM 认证流程的基本结构

PAM通过配置文件定义认证流程,这些文件通常位于

/etc/pam.d/
目录下,每个服务(如
sshd
login
sudo
)都有一个独立的配置文件。

PAM 的认证流程由四类模块控制:

  1. auth:负责用户身份验证(如密码验证、双因素认证)。
  2. account:检查账户状态(是否过期、是否允许登录时间等)。
  3. password:管理密码更新策略(如强度检查、过期提醒)。
  4. session:在用户登录前后执行操作(如记录日志、挂载家目录)。

每一行配置代表一个模块调用,格式如下:

类型  控制标志  模块路径  模块参数

例如:

auth    required    pam_unix.so

二、控制标志(Control Flags)的作用

控制标志决定当模块执行成功或失败时,PAM如何继续处理后续模块。常见值包括:

  • required:必须成功,但失败不会立即返回,继续执行后续模块,最终整体失败。
  • requisite:必须成功,一旦失败立即返回,不执行后续模块。
  • sufficient:如果成功且前面没有requisite失败,则直接返回成功,不再执行后续模块;失败则继续。
  • optional:通常用于session或非关键检查,结果一般不影响整体认证。
  • include:包含另一个服务的配置(如
    include common-auth
    )。
实际配置中常用 include 来复用通用配置,如 Debian/Ubuntu 系统中的 common-auth、common-account 等文件。

三、典型配置示例与流程分析

/etc/pam.d/sshd
为例:

# 验证用户身份
auth    required    pam_unix.so
auth    optional    pam_ssh.so

# 检查账户有效性
account required    pam_unix.so
account required    pam_access.so

# 密码策略(在修改密码时起作用)
password  required    pam_unix.so

# 会话管理
session   required    pam_unix.so
session   optional    pam_systemd.so

认证流程执行顺序如下:

  1. auth 阶段

    • 先调用
      pam_unix.so
      验证密码,必须成功。
    • 再调用
      pam_ssh.so
      (如适用),失败也无妨。
  2. account 阶段

    企业网站管理系统源码2.0
    企业网站管理系统源码2.0

    这是一款比较精美的企业网站管理系统源码,功能比较完整,比较适合新手学习交流使用,也可以作为毕业设计或者课程设计使用,感兴趣的朋友可以下载看看哦。功能介绍:该源码主要包括前台和后台两大部分,具体功能如下:网站前台模块:主要包括企业简介、新闻中心、产品展示、公司证书、工程业绩、联系我们、客户系统、人才招聘等信息的浏览,以及客户留言的功能。网站后台模块1、常规管理:企业简介、链接管理、投票管理、系统设置

    下载
    • 检查用户是否被锁定、是否在允许登录的时间段内。
    • pam_access.so
      可基于
      /etc/security/access.conf
      控制登录来源。
  3. password 阶段

    • 修改密码时触发,确保符合复杂度要求。
  4. session 阶段

    • 登录成功后建立会话,比如记录
      wtmp
      日志、启动 systemd 用户实例。

四、常用PAM模块及其用途

模块 用途
@@######@@ 标准的用户名/密码认证,基于 @@######@@ 和 @@######@@
@@######@@ SSH密钥认证支持
@@######@@ 通过LDAP进行集中认证
@@######@@ Google两步验证(TOTP)
@@######@@ 或 @@######@@ 登录失败次数限制
@@######@@ 基于规则控制谁可以从哪里登录
@@######@@ 用户首次登录时自动创建家目录

例如,启用自动创建家目录:

pam_unix.so

五、配置建议与注意事项

  • 备份原始配置:修改前备份
    /etc/passwd
    下的文件,避免锁死自己。
  • 逐步测试:每次只改一处,用测试账户验证,避免影响生产登录。
  • 避免滥用 sufficient:容易绕过安全检查,例如错误配置可能导致仅用SSH密钥就跳过密码。
  • 日志排查:查看
    /etc/shadow
    pam_ssh.so
    排错。
  • 使用 include 提高可维护性:大多数发行版使用
    pam_ldap.so
    文件统一管理。

例如,在

pam_google_authenticator.so
中常见写法:

pam_tally2.so

然后在

pam_faillock.so
中统一配置密码认证策略。


六、启用登录失败锁定示例(以 pam_tally2 为例)

编辑

pam_access.so
(Ubuntu/Debian):

pam_mkhomedir.so

这表示:连续失败3次后锁定账户10分钟。

查看失败次数:

session required pam_mkhomedir.so skel=/etc/skel umask=077

手动解锁:

/etc/pam.d/

基本上就这些。PAM的核心是“模块化+流程控制”,理解四类模块和控制标志后,就能根据安全需求定制认证流程。虽然配置灵活,但改错可能导致无法登录,务必谨慎操作。

/var/log/auth.log
journalctl
common-*
/etc/pam.d/sshd
auth      include common-auth
account   include common-account
password  include common-password
session   include common-session
common-auth
/etc/pam.d/common-auth
auth  required  pam_tally2.so deny=3 unlock_time=600
pam_tally2 --user=username
pam_tally2 --user=username --reset

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

308

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

740

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号