i3 - 具有 2 因素身份验证的锁定屏幕

Wal*_*ter 4 i3 2-factor-authentication

我正在运行 i3 窗口管理器并在我的系统上进行 2 因素身份验证。看来 i3 和 i3lock 不支持 2 因素身份验证的附加提示,而只是将我输入的密码作为验证码输入管道。

这显然不起作用,除了修改我的 pam 配置和禁用 2 因素身份验证(对于 i3lock),是否有更好的方法让我也可以利用 i3lock 的 2 因素身份验证?

小智 5

i3lock 支持 PAM,这意味着它支持 2FA,但它可能不支持用户输入的视觉提示。大多数 Yubico 产品提供不同类型的 2FA。例如,请参见此处

登录时最常见的 2FA 方法是 U2F 和挑战响应 (OTP)。i3lock 适用于两者。

不同的 2FA 方法需要用户在登录时执行不同的步骤:

  • U2F要求用户在USB刷机提示后按下USB上的物理键。
  • Challenge-Response (OTP) 只需要将 Yubikey 插入计算机。(这是 Windows 和 Mac 上默认登录 2FA 的工作原理)

为 i3lock 设置 Yubikey U2F

  1. 构建您的 pam 模块(例如pam_u2f.so)并将其放置在正确的位置(例如/lib/security)。如果您有 yubikey,请按照Yubico 的指南进行操作
  2. /etc/pam.d/i3lock如果它不存在,则创建。这是默认文件,它只需要一个密码。
#
# PAM configuration file for the i3lock screen locker. By default, it includes
# the 'login' configuration file (see /etc/pam.d/login)
#

auth    include     login
Run Code Online (Sandbox Code Playgroud)

您现在有以下使用 Yubikey 进行身份验证的选项,尽管第一个(密码回退)只是单因素身份验证。

选项 1:带有密码回退的 Yubikey

添加以下行之前auth include login行。

auth    sufficient      pam_u2f.so nouserok cue
Run Code Online (Sandbox Code Playgroud)

如果您按回车键,这将解锁您的计算机,这将触发 i3lock 中的 PAM 身份验证(提示将挂起“验证”),然后按下应该闪烁的 Yubikey。

您也可以在没有插入 yubikey 的情况下,通过输入正确的密码来解锁您的计算机。 如果已插入,模块将等待 yubikey 失败,这将需要您拔掉它,或者等待它超时(访问计算机的无聊方式!)。

选项 2:需要 Yubikey 和密码

添加以下行auth include login行。

auth    required      pam_u2f.so nouserok cue
Run Code Online (Sandbox Code Playgroud)

如果您输入正确的密码,按回车键,然后按 Yubikey(它应该闪烁)以提供所需的第二个因素,这将解锁您的计算机。

为 i3lock 设置 Yubikey Challenge-Response

  1. 构建 pam 模块。请参阅Yubico 的指南步骤 2 和 4。
  2. /etc/pam.d/i3lock如果它不存在,则创建。(参见 U2F 的第 2 步)

选项 1:带有密码回退的 Yubikey

添加以下行之前auth include login行。

auth    sufficient      pam_yubico.so mode=challenge-response
Run Code Online (Sandbox Code Playgroud)

当用户在锁定屏幕上按下 Enter 键时,这会触发 PAM,如果插入 Yubikey,计算机将解锁。

与 U2F 的选项 1 类似,您也可以通过在未插入 yubikey 的情况下输入正确的密码来解锁计算机。

选项 2:需要 Yubikey 和密码

添加以下行auth include login行。

auth    required      pam_yubico.so mode=challenge-response
Run Code Online (Sandbox Code Playgroud)

这需要插入 yubikey 和正确的密码。

调试

如果您被锁定,请登录虚拟终端 (TTY)。你可以得到一个与ctrl+ alt+f2组合键。然后,您可以killall i3lock通过查看journalctl -x.