使用 Yubikey Neo 登录 2FA 和锁屏

smi*_*y84 14 lock-screen udev lightdm 14.04

我想使用我的 Yubikey Neo 登录 Ubuntu 14.04。此外,如果每次拔下 Yubikey 时都自动锁定屏幕,那将很方便。

smi*_*y84 12

首先,我们需要为挑战响应配置 Yubikey。Yubico 在https://developers.yubico.com/yubico-pam/Authentication_Using_Challenge-Response.html下提供了一个很好的 Linux 手册

现在您应该能够在登录时使用您的 yubikey 进行身份验证。缺少一个方便的部分:移除 Yubikey 时屏幕的自动锁定。

我稍微修改了 Yubico 论坛 ( http://forum.yubico.com/viewtopic.php?f=23&t=1143 ) 中的 HowTo,以与 14.04 中的 LightDM 和 Yubikey Neo 相匹配。

首先,使用命令创建一个新文件以在 Yubikey 不存在时锁定屏幕:

sudo nano /usr/local/bin/yubikey
Run Code Online (Sandbox Code Playgroud)

将以下内容写入文件:

#!/bin/bash 
# Double checking if the Yubikey is actually removed, Challenge-Response won't trigger the screensaver this way.

if [ -z "$(lsusb | grep Yubico)" ]; then
        logger "YubiKey Removed or Changed"
        # Running the LightDM lock command
        export XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0" 
        /usr/bin/dm-tool lock
fi
Run Code Online (Sandbox Code Playgroud)

与原始文件最大的不同是使用 dm-tool(用于用 lightdm 锁定屏幕)和搜索词 Yubico,因为 Yubikey Neo 在 lsusb 中的“Yubico.com”注册。

关闭并保存文件。此外,我们必须使文件可执行:

sudo chmod +x /usr/local/bin/yubikey
Run Code Online (Sandbox Code Playgroud)

接下来,我们必须找到 Yubikey 的属性以进行适当的分配。

为此,必须激活 USB 描述符。详细信息可以在Yubico 论坛上找到。

在命令中的新终端类型中

udevadm monitor --environment --udev
Run Code Online (Sandbox Code Playgroud)

现在您(取消)插入您的 yubikey 并获得一个 Id 列表。寻找

ID_VENDOR_ID
ID_MODEL_ID
ID_SERIAL_SHORT
Run Code Online (Sandbox Code Playgroud)

它们将在 udev 文件中用于识别 Yubikey。

提示:如果您重新配置棒(例如使用 CCID),供应商 ID 会发生变化

此外,创建一个文件

sudo nano /etc/udev/rules.d/85-yubikey.rules
Run Code Online (Sandbox Code Playgroud)

并输入以下内容

# Yubikey Udev Rule: running a bash script in case your Yubikey is removed 
ACTION=="remove", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0010", ENV{ID_SERIAL_SHORT}=="0001711399", RUN+="/usr/local/bin/yubikey"
Run Code Online (Sandbox Code Playgroud)

根据您的密钥更改 ID。注意:您可以通过简单的复制粘贴其他 ID 的行来添加更多 yubikey!

关闭并保存文件。最后,udev 服务必须重新加载规则:

sudo udevadm control --reload-rules
sudo service udev reload
Run Code Online (Sandbox Code Playgroud)