Linux-PAM 模块用法总结

发布时间:2026/8/1 22:58:36

Linux-PAM 模块用法总结 明月不知君已去夜深还照读书窗。导航壹 - PAM 简介认证流程文件配置贰 - 参考查询叁 - 模块介绍pam_nologin.so、pam_rootok.so、pam_wheel.so【特权用户/组】pam_access.so、pam_listfile.so、pam_time.so、pam_limits.so【访问控制】pam_motd.so、pam_issue.so、pam_echo.so【消息提醒】pam_faildelay.so、pam_faillock【登录安全】pam_pwquality.so、pam_pwhistory.so【密码安全】pam_permit.so、pam_deny.so、pam_env.so、pam_exec.so、pam_userdb.so【杂七杂八】肆 - 杂项壹 - PAM 简介PAM可插拔认证模块是 Linux/Unix 系统中的一个认证框架它为各种需要身份认证的应用程序提供了一种统一且灵活的认证方式让调用者不必大费周章地更改自己程序的代码 只需修改相应的 PAM 配置文件便可实现程序所需的各种身份验证需求。因此了解它的认证流程以及配置文件的修改规则显得极为重要。认证流程在 PAM 的认证流程中主要有 31 个阶段分别是auth身份验证、account账户管理、session会话管理、password密码管理。各阶段的功能作用如下表类别主要作用触发时机典型任务auth验证身份凭据登录初期检查密码、多因素认证account检查账户状态身份确认后是否过期、时间限制session管理会话过程登录/退出时挂载目录、记录日志password管理密码变更改密码时检查复杂度、更新数据库各阶段的流程顺序如下图文件配置每个调用 PAM 认证的应用程序都会在/etc/pam.d/目录下对应着一个相应名称命名的 PAM 配置文件这些配置文件中的描述规则都是以type control module-path module-arguments这样的格式书写着。其中type验证类别auth、acconut、session、password。【对应着 PAM 认证的四个阶段】control流程控制required、requisite、sufficient、optional。【控制着每一行的规则在成功与否之后的下一步动作是继续还是返回】module-path模块路径默认是/usr/lib/x86_64-linux-gnu/security/*.so目录下各种已安装模块的名称。module-arguments模块参数每个模块所支持的功能各有不同所以各自支持的参数及用法自然也是大同小异。注意一个配置文件中通常都会存在着多行相同验证类别如 auth的规则以及包含另外一个 PAM 配置文件规则如 common-auth 或 system-auth的情况而且各规则之间的配置顺序可能并不是严格按照auth - acconut - session - password这样的顺序进行那么 PAM 系统在进行身份验证流程的时候是如何去对这些配置文件中的规则进行匹配的呢其实它是依据验证类别来看的。例如当进行 ssh 认证的时候首先进行的便是 auth 阶段那么这时候 PAM 系统便会将/etc/pam.d/sshd文件中有关 auth 以及包含文件中的 auth 规则全部按照先后顺序摘出来然后再逐一执行这些规则。当 auth 阶段的流程结束且用户身份验证通过时便会进入到下一个阶段account下一阶段的流程依旧如 auth 那样。最终直到流程全部都走完本次的 PAM 验证也就结束了。【当然如果规则匹配在中途提前就结束了那么也就不需要将流程全部都走完便可以结束本次的 PAM 验证了。】贰 - 参考查询了解了 PAM 的工作流程接下来就需要对其在操作系统中的文件分布情况进行一个摸底。以下以 kali 系统为例/etc/pam.d/调用 PAM 的第三方程序的配置文件聚集地。/etc/security部分 PAM 模块的参数配置文件亦或是规则文件。/usr/lib/x86_64-linux-gnu/security/PAM 模块默认的位置。PAM 系统主要的文件就是上面这些了此外还可借助一些命令进行扩展延伸。如man pam_查看 PAM 各模块的功能、类型及用法示例。apt search libpam-搜索其它 PAM 模块。dpkg -L libpam-modules查看 PAM 基础安装包所释放的文件。叁 - 模块介绍注意各模块所支持的功能、类型并不一定适用于所有应用因此各应用在使用之前需依据参考示例去不断实验以确定该模块是否适合自己。此外模块的有效与否有时也与配置项的前后位置以及流程控制指令required 等有关必要时需要适当调整一下。特权用户/组pam_nologin.so功能阻止非 root 用户登录。类型auth、accountaccount required pam_nologin.so #/etc/pam.d/sshd 启用此模块之后若系统中存在 /etc/nologin 文件则非 root 用户便无法登录系统。在登录被拒绝之后还会给对方提示 /etc/nologin 文件中的内容当该文件不存在时非 root 用户便可以正常登录。pam_rootok.so功能检测当前用户是否是 root 用户。【注所以它通常用于用户已登录系统之后的授权再认证场景对于 sshd 那样的登录场景并不适用。】类型auth、account、passwordauth sufficient pam_rootok.so #/etc/pam.d/su 启用此模块之后root 用户可以使用 su 免密切换到其它用户。pam_wheel.so功能限制用户在知晓其它用户凭证之后可以随意切换身份。类型auth、accountauth required pam_wheel.so #/etc/pam.d/su 启用此模块之后只有加入 wheel 组的用户才能使用 su 切换用户而在未启用之前任何用户都可以使用 su 切换。 auth sufficient pam_wheel.so trust #/etc/pam.d/su 启用此模块之后加入 wheel 组的用户可以免密使用 su 切换到其它用户。 auth sufficient pam_wheel.so trust group test #/etc/pam.d/su 启用此模块之后加入 test 组的成员可以免密使用 su 切换用户身份。 auth sufficient pam_wheel.so deny group test #/etc/pam.d/su 启用此模块之后禁止加入 test 组的用户使用 su 切换用户身份。访问控制pam_access.so功能基于用户、组、来源主机、终端等条件来限制用户是否可以访问系统。类型auth、account、session、passwordaccount required pam_access.so #/etc/pam.d/sshd 启用此模块之后需配合规则文件 /etc/security/access.conf 来灵活限制哪些用户才能登录或禁止登录系统。 account required pam_access.so #/etc/pam.d/su 启用此模块之后可以限制哪些用户使用 su哪些用户禁止使用 su。以下便是规则文件/etc/security/access.conf的示例展示。1其规则设置的方式和交换机上的 ACL 非常相似。2比 sshd 配置文件中的 DenyUsers 指令更加的灵活。#只允许 ubuntu 用户登录其它用户均阻止登录。 : ubuntu : ALL - : ALL : ALLpam_listfile.so功能基于一个文件名单来限制用户是否可以访问系统。【注效果类似黑/白名单】类型auth、account、session、passwordauth required pam_listfile.so onerrsucceed itemuser sensedeny file/tmp/userlist.txt #/etc/pam.d/sshd 启用此模块之后相当于为 sshd 服务制定了一个登录用户黑名单只要在名单上的用户便无法登录本系统名单之外正常登录。 注意apply 参数是配合 item [tty|rhost|shell] 使用的多数时候用不到。pam_time.so功能基于时间范围来限制用户是否可以访问系统。类型accountaccount requisite pam_time.so #/etc/pam.d/sshd 启用此模块之后需配合规则文件 /etc/security/time.conf 来灵活限制哪些用户才能登录或禁止登录系统。以下便是规则文件/etc/security/time.conf的示例展示。#控制 test 用户只有在每天的 12 点到 24 点之间才能使用 ssh 登录或使用 su 切换到 test 身份。 su|sshd;*; test; Al1200-2359pam_limits.so功能操作系统资源限制。支持限制的资源有进程数量、文件大小、打开文件数、同时登录数、所有用户最大登录数等等类型sessionsession required pam_limits.so #/etc/pam.d/sshd 启用此模块之后需配合文件 /etc/security/limits.conf 来限制系统中各种资源的使用情况。以下便是文件/etc/security/limits.conf的示例展示。#限制 test 用户的同时在线会话不超过 4 个 test soft maxlogins 4 #限制系统中所有的用户的会话总数不超过 10 个 * hard maxsyslogins 10soft 和 hard 的区别是soft 类型的限制可以通过 ulimit 命令去动态调整而 hard 类型的限制则是硬性的无法被手动调高。如果用户不懂的使用 ulimit 调整的话soft 和 hard 其实效果是一样的。消息提醒pam_motd.so功能以命令行的方式登录系统之后的消息提醒。类型sessionsession optional pam_motd.so motd/run/motd.dynamic #/etc/pam.d/sshd 启用此模块之后当用户每次登上系统的时候便会显示指定文件中的静态消息。由于 /run/motd.dynamic 是由 /etc/update-motd.d/*.sh 中的脚本生成的动态内容因此也可以间接地理解为每次登录所显示的消息是动态消息。pam_issue.so功能以命令行的方式登录系统之前的消息提醒。类型authauth required pam_issue.so issue/etc/issue #/etc/pam.d/login 启用此模块之后当用户在控制台以非图形化的方式登录之前便会展现 /etc/issue 文件中描述的登录提示信息。注意此模块似乎仅对本地控制台登录文件/etc/pam.d/login有效在/etc/pam.d/sshd中使用时并未能生效。而要想让 sshd 服务也达到同样的效果似乎只能借助 sshd 内置的 Banner 指令来实现了。pam_echo.so功能各认证阶段均可使用的消息提醒。【注但似乎只是对 password 类型的使用较为友好在其它类型上效果似乎不佳。】类型auth、account、session、passwordpassword optional pam_echo.so file/path/test.txt #/etc/pam.d/passwd 启用此模块之后当用户使用 passwd 修改密码时便会弹出提示信息。登录安全pam_faildelay.so功能登录失败时延时返回失败消息。类型authauth optional pam_faildelay.so delay3000000 #/etc/pam.d/sshd 启用此模块之后当用户登录输入错误的账户密码时会延时 3 秒才返回登录失败的消息。若账户密码正确则直接登录无延时。pam_faillock.so功能多次登录失败时暂时锁住账户。类型auth、account#include common-auth auth required pam_faillock.so preauth auth sufficient pam_unix.so auth [defaultdie] pam_faillock.so authfail #/etc/pam.d/sshd 启用此模块之后需配合文件 /etc/security/faillock.conf 来限制用户的登录。【注意该模块的配置较为特殊需要 2 条指令配合使用。】以下便是参数文件/etc/security/faillock.conf的示例展示。#非 root 用户在 30 秒内登录失败 4 次之后将会被锁住直到 30 秒之后此账户才会被解锁。【若想提前解锁用户需以 root 身份在后台执行 faillock --user testuser --reset 解锁】 deny 4 fail_interval 30 unlock_time 30 local_users_only密码安全pam_pwquality.so功能修改密码时对新密码按照规范要求进行检查。类型passwordpassword required pam_pwquality.so #/etc/pam.d/passwd 启用此模块之后可配合此模块的参数文件 /etc/security/pwquality.conf 加强新密码强度的管控。通过此参数文件管理员可规范的密码要求有密码长度、字典检查、用户名包含等功能。pam_pwhistory.so功能记录并检查用户历史密码防止用户在修改密码时重复使用旧密码。类型passwordpassword required pam_pwhistory.so #/etc/pam.d/passwd 启用此模块之后当用户修改密码时该模块会先检查新密码是否已存在 /etc/security/opasswd 文件中若不存在且密码质量也还行便可修改成功并将此新密码记录在 opasswd 文件之中。杂七杂八pam_permit.so功能无条件允许。类型auth、account、session、passwordauth sufficient pam_permit.so #/etc/pam.d/sshd 在首行启用此模块之后便可以让所有用户以任意密码登录系统。pam_deny.so功能无条件拒绝。类型auth、account、session、passwordauth requisite pam_deny.so #/etc/pam.d/sshd 在首行启用此模块之后便可以让所有用户无法登录系统。pam_env.so功能用户环境变量的多样性加载。类型auth、sessionsession required pam_env.so readenv1 #/etc/pam.d/sshd 在启用此模块之后便可以让所有用户有了额外的路径位置可以加载全局变量分别是 /etc/security/pam_env.conf 和 /etc/environment。注该模块可同时存在多行也就意味着用户加载环境变量的位置又变多了一些。pam_exec.so功能在认证或会话阶段执行外部命令或脚本并根据脚本返回值决定是否允许继续。类型auth、account、session、passwordauth optional pam_exec.so seteuid log/tmp/log.txt /bin/id #/etc/pam.d/sshd 在启用此模块之后只要进入认证阶段不管用户认证成功与否后台也会自动执行此命令并将命令执行时间和命令输出结果追加在 log 文件中。pam_userdb.so功能让 PAM 可以使用一个简单的数据库文件来验证用户名和密码而不是依赖/etc/passwd或/etc/shadow。【注这类用户也被叫做虚拟用户这对于 FTP 这类的服务来说非常有用。】类型auth、accountauth sufficient pam_userdb.so icase db/etc/dbtest #/etc/pam.d/vsftpd 在启用此模块之后便会使用 /etc/dbtest 文件作为账户密码验证的根据。肆 - 杂项PAM 仓库https://github.com/linux-pam/linux-pam有趣的 PAM 利用仓库一、仓库二。

相关新闻