不同的密码取决于插入的设备

Hau*_*ing 6 linux password login pam udev

我想为我的帐户设置不同的密码:当(例如)插入某个 U 盘时,将使用一个简单的密码。这个想法是:如果我离开我的电脑,那么我带着我的手杖,然后应该禁用简单的密码。

我的总体思路是:

  1. 用 udev 检测棒,也许检测它上面的某些数据(用 udev 运行的脚本)并做出相应的反应(例如,创建一个在棒被拔出时被删除的文件)。这应该很容易。
  2. 让 PAM 检查此文件是否存在并相应地选择密码数据库。

主要问题可能是(即,如果我正确理解了问题的结构):可以pam_unix2配置为使用另一个影子文件吗?我刚刚看了看手册页,pam_unix2似乎这是不可能的,因为这个模块让 glibc NSS 做出这个决定。

Gil*_*il' 3

pam_unix 和 pam_unix2 都使用 libc 来查找密码哈希,并且 Glibc 具有位置/etc/nsswitch.conf/etc/shadow硬编码。它甚至不会像重新编译pam_unix或那样简单pam_unix2:两者都通过正常的 NSS 机制来验证密码,他们只使用他们的知识/etc/passwd/etc/shadowNIS 来更改密码。

但是,您可以使用该pam_pwdfile模块。我从未使用过它,但描述看起来正是你所追求的。

该 PAM 模块允许您使用结构相似的任意命名的文本文件来/etc/passwd验证用户身份。

或者,您可以使用pam_userdb,它以 Berkeley DB 格式检查数据库中的密码,并将文件名作为参数传递。

现在,要检测 USB 记忆棒是否存在,您需要另一个 PAM 模块。pam_listfile看起来很适合这份工作。安排一个 udev 规则来安装您的 USB 密钥,并且仅在特定位置安装该 USB 密钥,例如/media/authentication-key;创建一个包含users.txt允许使用较短密码的用户名列表的文件。如果您想在 PAM 堆栈中进行更复杂的测试,可以使用`pam_exec

这是一个堆栈,假设/etc/shadow包含强密码和/etc/passwd.weak弱密码。警告:未经测试,而且我对 PAM 并不熟悉,因此请仔细查看。

auth [success=ignore default=1] pam_listfile.so file=/media/authentication-key/users.txt iter=user sense=allow onerr=fail
auth [success=1 default=bad] pam_unix.so
auth [success=ok default=bad] pam_pwdfile.so pwdfile=/etc/passwd.weak
auth requisite pam_deny.so
Run Code Online (Sandbox Code Playgroud)