pam_oath
OATH 工具包为身份验证系统提供一次性密码 (OTP) 组件。它包含一个 PAM 身份验证模块,支持基于事件的 HOTP 算法 (RFC 4226) 和基于时间的 TOTP 算法 (RFC 6238) 等技术。OTP 生成器应用程序适用于 Android、iOS、Blackberry 和其他设备。与 Google Authenticator 类似,该身份验证机制集成到 Linux PAM 系统中。本指南介绍此机制的安装和配置。
安装
安装 oath-toolkit 软件包。
设置 OATH
OATH 种子是一个十六进制数字,每个用户应该是唯一的。要为用户生成新的种子,您可以使用以下命令行
$ openssl rand -hex 10
12345678909876543210
每个用户需要有一个 OATH,并在配置文件 /etc/users.oath
中链接到它。在作为 Root 用户 的情况下,创建文件并插入用户种子
/etc/users.oath
# Option User Prefix Seed HOTP/T30/6 user - 12345678909876543210
如果您需要 HOTP,请使用此配置
/etc/users.oath
# Option User Prefix Seed HOTP user - 12345678909876543210
确保该文件只能由 Root 用户访问
# chmod 600 /etc/users.oath # chown root /etc/users.oath
设置 PAM
要仅为特定服务(如 OpenSSH)启用 OATH,您可以编辑文件 /etc/pam.d/sshd
并在文件开头添加以下行
auth sufficient pam_oath.so usersfile=/etc/users.oath window=30 digits=6
如果您只输入正确的 OATH 代码,这将允许身份验证。如果您想将 OATH 作为一项要求,并让 PAM 堆栈的其余部分继续处理,请使用以下行代替
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6
为了使 SSH 登录工作,请确保在 /etc/ssh/sshd_config
文件中启用以下选项
ChallengeResponseAuthentication yes UsePAM yes
重启 sshd.service
以启用更改。
如果您想强制执行 OATH 请求-响应,即使存在可用的公钥身份验证和密码身份验证,也请在 /etc/ssh/sshd_config
中添加以下内容
AuthenticationMethods publickey,keyboard-interactive:pam KbdInteractiveAuthentication yes PasswordAuthentication yes
/etc/pam.d/login
。使用 OATH 密码登录
对于使用 TOTP 登录
$ oathtool -v --totp -d 6 12345678909876543210
SHA512
时存在错误,但开发人员尚未修复它。请参阅 Gitlab 上的未解决问题。如果您使用 HOTP 登录
$ oathtool -v -d 6 12345678909876543210
将 12345678909876543210
替换为您用户对应的种子。它将输出类似以下内容
Hex secret: 1ab4321412aebc Base32 secret: DK2DEFASV26A==== Digits: 6 Window size: 0 Start counter: 0x0 (0) 820170
最后面的数字字符串现在可以用作登录代码,但更有趣的是 Base32 密钥,因为它可以转换为 QR 码以便轻松传输密钥。安装软件包 qrencode 以运行以下命令进行转换
$ qrencode -o user.png 'otpauth://totp/user@machine?secret=DK2DEFASV26A===='
相应地更改用户、机器和 DK2DEFASV26A====
。完成后,您可以使用您喜欢的图像查看器应用程序可视化您的 QR 码。或者,您可以直接在终端上生成 QR 码,使用
$ qrencode -t UTF8 'otpauth://totp/user@machine?secret=DK2DEFASV26A===='
使用 Aegis Authenticator 或 FreeOTP+,然后截取该 user.png
(或类似 ASCII 艺术的图像)的屏幕截图,并在需要时使其显示 OTP 密码,这是非常简单的。
user.png
文件中的 QR 码也拥有该密钥。您需要格外小心此文件,它们应仅存储在加密介质上(您的手机需要使用加密以获得任何合理的安全级别)。如果不是,甚至要限制在像 Samsung Knox 这样的沙箱中,以防止第三方应用程序可能访问它们。