pam_usb
pam_usb(原始仓库的活跃分支)为 Linux 提供使用普通 USB 闪存驱动器的硬件认证。
它适用于任何支持 PAM 的应用程序,例如 su 和 显示管理器。
安装
配置
设置 pam_usb 需要以下步骤,前提是 pam_usb 已经安装
- 设置设备和用户
- 为系统认证配置 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 设备插入/移除时被触发有两个先决条件
- 锁定和/或解锁事件配置必须添加到 pam_usb 配置文件中;
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 感知应用程序也可能是必需的。