如何通过PAM模块在手机APP中实现扫码授权登录敏感资产配置?

2026-05-06 14:121阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计754个文字,预计阅读时间需要4分钟。

如何通过PAM模块在手机APP中实现扫码授权登录敏感资产配置?

无法指定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 段靠前位置):

auth [success=ok default=bad] pam_exec.so expose_authtok /usr/local/bin/validate-scan-token.sh

脚本 /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分钟。

如何通过PAM模块在手机APP中实现扫码授权登录敏感资产配置?

无法指定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 段靠前位置):

auth [success=ok default=bad] pam_exec.so expose_authtok /usr/local/bin/validate-scan-token.sh

脚本 /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