pam(4)-pam_nologin.so
pam_nologin.so
是 Linux PAM(Pluggable Authentication Modules)框架中的一个模块,用于根据系统状态限制用户登录。它主要通过检查 /etc/nologin
文件是否存在来决定是否允许用户(通常是非 root
用户)登录。如果该文件存在,模块会阻止登录并显示文件中定义的消息,通常用于系统维护或关闭期间限制访问。
功能
- 限制登录:当
/etc/nologin
文件存在时,阻止普通用户登录。 - **仅允许
root
**:默认情况下,root
用户可以绕过此限制,继续登录。 - 自定义消息:如果
/etc/nologin
文件包含文本,登录被拒绝时会显示该文本作为提示。
使用场景
- 系统维护:管理员在进行系统更新或维护时,创建
/etc/nologin
文件以阻止普通用户登录。 - 系统关闭前:在系统计划关闭前,通知用户并限制新登录。
- 安全控制:临时限制访问以应对潜在威胁。
工作原理
- 应用程序(如
login
、sshd
)调用 PAM 的auth
或account
栈时,触发pam_nologin.so
。 - 模块检查
/etc/nologin
文件是否存在:- 如果文件不存在,认证通过,允许登录。
- 如果文件存在:
- 检查当前用户是否为
root
。 - 如果是普通用户,返回失败并显示
/etc/nologin
中的消息。 - 如果是
root
,根据模块参数决定是否允许登录。
- 检查当前用户是否为
- 将结果返回给 PAM 框架,由控制标志决定后续流程。
配置示例
在 PAM 配置文件中(例如 /etc/pam.d/sshd
或 /etc/pam.d/login
),常见用法如下:
auth required pam_nologin.so
- 类型:通常用于
auth
(认证阶段)或account
(账户检查阶段)。 - 控制标志:
required
表示此模块必须通过,否则登录失败。 - 模块:
pam_nologin.so
。
/etc/nologin
文件
- 如果文件不存在,模块不起作用,允许所有用户登录。
- 如果文件存在且为空,用户会被拒绝登录,默认提示为类似“系统维护中,请稍后再试”。
- 如果文件中包含自定义文本,例如:
系统将于 2025-03-22 凌晨进行维护,请稍后尝试登录。
用户在登录失败时会看到该消息。
参数
pam_nologin.so
支持以下可选参数:
no_root
:禁止root
用户登录(默认情况下root
可以登录)。successok
:即使/etc/nologin
不存在,也返回成功(用于特定逻辑调整)。debug
:启用调试输出,记录到系统日志。
示例:
auth required pam_nologin.so no_root
注意事项
- 行为差异:
- 在某些系统(如 Debian 或 Ubuntu),
pam_nologin.so
默认允许root
登录,除非指定no_root
参数。
- 在某些系统(如 Debian 或 Ubuntu),
- 与其他模块的交互:
- 如果与其他认证模块(如
pam_unix.so
)组合使用,需注意执行顺序,确保pam_nologin.so
在适当位置检查。
- 如果与其他认证模块(如
- SSH 和其他服务:
- 对于
sshd
,需要在/etc/pam.d/sshd
中配置此模块,否则不会生效。
- 对于
典型应用
假设系统配置如下:
/etc/pam.d/login
中包含auth required pam_nologin.so
。- 创建
/etc/nologin
文件,内容为“系统维护中”。
结果:
- 普通用户尝试登录时会看到“系统维护中”并被拒绝。
root
用户仍可登录(除非使用no_root
参数)。
总结
pam_nologin.so
是一个简单而有效的工具,用于在特定情况下限制用户登录,特别适合系统管理员在维护或紧急情况下使用。其配置简单,主要依赖 /etc/nologin
文件的状态,易于集成到现有 PAM 策略中。