如何通过PAM模块在手机APP中实现扫码授权登录敏感资产配置?
- 内容介绍
- 相关推荐
本文共计754个文字,预计阅读时间需要4分钟。
无法指定SSH或PAM,自行生成二维码或回调。需要部署一个独立的扫码服务(可置于DMZ或管理网),其负责:
- 向微信/企业微信/钉钉等平台发起 OAuth2 授权请求,返回带有效期的二维码
- 用户扫码并授权后,接收平台回调,完成身份核验(含 MFA、权限白名单、IP 限制等)
- 生成一个签名 JWT,内容至少包含:sub(映射的 Linux 用户名)、exp(建议≤120秒)、jti(防重放)、iss(服务标识)
- 用私钥签名,确保令牌不可篡改;公钥后续供 PAM 模块验签使用
SSH 登录时把令牌交给 PAM
用户不再输密码,而是通过自定义方式把 JWT 提交给服务器。常见做法有:
- 用
ssh -o "SendEnv=SCAN_TOKEN" user@host把令牌作为环境变量传入(需在/etc/ssh/sshd_config中启用AcceptEnv SCAN_TOKEN) - 封装一个简易 CLI 工具,在连接前自动拉取有效令牌并注入 SSH 连接流程
- 配合 Web 运维门户(如 PAM 的运维工作台),扫码后由前端透传令牌到后端 SSH 代理
PAM 层用 pam_exec.so 校验并映射用户
在 /etc/pam.d/sshd 中添加一行(放在 auth 段靠前位置):
脚本 /usr/local/bin/validate-scan-token.sh 要做三件事:
- 从环境变量(如
$SCAN_TOKEN)或标准输入读取 JWT - 用预置公钥验证签名和有效期,解析出
sub字段 - 检查该用户名是否在允许列表中(例如比对
/etc/pam_scan_whitelist),且未被禁用 - 校验通过后,输出
PAM_USER=xxx到标准输出(PAM 会自动识别并切换目标用户)
安全与落地注意事项
这不是“开箱即用”的功能,实际部署要关注几个关键点:
- JWT 必须短期有效(建议 90–120 秒),且服务端记录 jti 防重放,用完即弃
- 扫码服务与目标服务器之间的通信建议走内网,避免令牌暴露在公网
- Linux 用户账号需提前创建好(如
useradd -r -s /bin/bash ops_liwei),不能由 PAM 动态创建 - 建议搭配 TOTP 或短信作为备用登录方式,防止扫码服务临时不可用
- 审计日志里要保留扫码来源(如企业微信 ID)、绑定手机号、登录时间、目标资产 IP
本文共计754个文字,预计阅读时间需要4分钟。
无法指定SSH或PAM,自行生成二维码或回调。需要部署一个独立的扫码服务(可置于DMZ或管理网),其负责:
- 向微信/企业微信/钉钉等平台发起 OAuth2 授权请求,返回带有效期的二维码
- 用户扫码并授权后,接收平台回调,完成身份核验(含 MFA、权限白名单、IP 限制等)
- 生成一个签名 JWT,内容至少包含:sub(映射的 Linux 用户名)、exp(建议≤120秒)、jti(防重放)、iss(服务标识)
- 用私钥签名,确保令牌不可篡改;公钥后续供 PAM 模块验签使用
SSH 登录时把令牌交给 PAM
用户不再输密码,而是通过自定义方式把 JWT 提交给服务器。常见做法有:
- 用
ssh -o "SendEnv=SCAN_TOKEN" user@host把令牌作为环境变量传入(需在/etc/ssh/sshd_config中启用AcceptEnv SCAN_TOKEN) - 封装一个简易 CLI 工具,在连接前自动拉取有效令牌并注入 SSH 连接流程
- 配合 Web 运维门户(如 PAM 的运维工作台),扫码后由前端透传令牌到后端 SSH 代理
PAM 层用 pam_exec.so 校验并映射用户
在 /etc/pam.d/sshd 中添加一行(放在 auth 段靠前位置):
脚本 /usr/local/bin/validate-scan-token.sh 要做三件事:
- 从环境变量(如
$SCAN_TOKEN)或标准输入读取 JWT - 用预置公钥验证签名和有效期,解析出
sub字段 - 检查该用户名是否在允许列表中(例如比对
/etc/pam_scan_whitelist),且未被禁用 - 校验通过后,输出
PAM_USER=xxx到标准输出(PAM 会自动识别并切换目标用户)
安全与落地注意事项
这不是“开箱即用”的功能,实际部署要关注几个关键点:
- JWT 必须短期有效(建议 90–120 秒),且服务端记录 jti 防重放,用完即弃
- 扫码服务与目标服务器之间的通信建议走内网,避免令牌暴露在公网
- Linux 用户账号需提前创建好(如
useradd -r -s /bin/bash ops_liwei),不能由 PAM 动态创建 - 建议搭配 TOTP 或短信作为备用登录方式,防止扫码服务临时不可用
- 审计日志里要保留扫码来源(如企业微信 ID)、绑定手机号、登录时间、目标资产 IP

