pam_usb

来自 ArchWiki

pam_usb原始仓库的活跃分支)为 Linux 提供使用普通 USB 闪存驱动器的硬件认证。

它适用于任何支持 PAM 的应用程序,例如 su显示管理器

安装

安装 pam_usbAUR 软件包。

配置

设置 pam_usb 需要以下步骤,前提是 pam_usb 已经安装

  1. 设置设备和用户
  2. 为系统认证配置 PAM

设置设备和用户

将 USB 设备连接到计算机后,使用 pamusb-conf 将其添加到配置文件

# pamusb-conf --add-device MyDevice
Please select the device you wish to add.
* Using "SanDisk Corp. Cruzer Titanium (SNDKXXXXXXXXXXXXXXXX)" (only option)
Which volume would you like to use for storing data ?
* Using "/dev/sda1 (UUID: <6F6B-42FC>)" (only option)
Name            : MyDevice
Vendor          : SanDisk Corp.
Model           : Cruzer Titanium
Serial          : SNDKXXXXXXXXXXXXXXXX
Volume UUID     : 6F6B-42FC (/dev/sda1)
Save to /etc/pamusb.conf ?
[Y/n] y
Done.

请注意,MyDevice 可以是您想要的任何任意名称。此外,您可以添加任意数量的设备。

接下来,配置您希望能够使用 pam_usb 进行身份验证的用户

# pamusb-conf --add-user root
      
Which device would you like to use for authentication ?
* Using "MyDevice" (only option)
User            : root
Device          : MyDevice
Save to /etc/pamusb.conf ?
[Y/n] y
Done.

检查配置

您可以随时运行 pamusb-check 来检查一切是否正常工作。此工具将模拟身份验证请求(需要连接您的设备,否则将失败)。

# pamusb-check root
* Authentication request for user "root" (pamusb-check)
* Device "MyDevice" is connected (good).
* Performing one time pad verification...
* Verification match, updating one time pads...
* Access granted.

设置 PAM 模块

要将 pam_usb 添加到系统身份验证过程中,我们需要编辑 /etc/pam.d/system-auth

默认的 PAM 配置文件应包含以下行

auth    [success=2 default=ignore]        pam_unix.so try_first_pass nullok_secure

将其更改为

auth    sufficient                    pam_usb.so
auth    [success=2 default=ignore]    pam_unix.so nullok_secure

sufficient 关键字表示如果 pam_usb 允许身份验证,则不会询问密码。如果身份验证失败,则将使用默认的基于密码的身份验证作为后备方案。

如果您将其更改为 required,则意味着需要 USB 闪存驱动器和密码才能授予系统访问权限。

现在您应该能够使用插入的相关 USB 设备进行身份验证。

$ su
* pam_usb v.SVN
* Authentication request for user "root" (su)
* Device "MyDevice" is connected (good).
* Performing one time pad verification...
* Verification match, updating one time pads...
* Access granted.

启用事件管理

pam_usb 提供对锁定解锁事件的支持,这些事件可以触发用户定义的命令列表以及自定义环境变量。例如,它可以用于指示 pam_usb 在移除配置的 USB 设备后自动锁定当前会话,通过锁定事件。

配置的事件在配置的 USB 设备插入/移除时被触发有两个先决条件

  1. 锁定和/或解锁事件配置必须添加到 pam_usb 配置文件中;
  2. pamusb-agent 必须正在运行。

以上两个主题都在 pam_usb 的 wiki 中进行了完整描述。

以下是给定用户的事件配置示例。请注意,它还负责将 DISPLAY 和 dbus 环境变量详细信息传递给事件发生时要执行的命令。<env><cmd> 元素内容都应根据目标环境进行更改

/etc/security/pam_usb.conf abstract
...
<user id="auser">
    <device>MyUSBKey</device>
    <agent event="lock">
      <cmd>xfce4-screensaver-command --lock</cmd>
      <env>DISPLAY=:0.0</env>
      <env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>
    </agent>
    <agent event="unlock">
      <cmd>xfce4-screensaver-command --deactivate</cmd>
      <env>DISPLAY=:0.0</env>
      <env>DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus</env>
    </agent>
</user>
...

请注意,虽然 pam_usbAUR 软件包安装了 pamusb-agent,但它不会配置系统来管理或自动启动它,这必须在安装后手动作为服务或简单地作为会话程序来处理,例如通过 Xfce 的会话和启动应用程序自动启动控制面板。

故障排除

su 无法使用 pam_usb

如果您设置了

/etc/pam.d/system-auth
auth          sufficient   pam_usb.so

并且 su 提示输入密码,但不使用 pam_usb,请将相同的行添加到 /etc/pam.d/su 的开头。这对于其他 pam 感知应用程序也可能是必需的。

参见