Writing PAM Module that Will Read Password From File and Log the User In
我正在尝试编写一个 pam 模块,该模块将从文件中读取密码,然后让用户无需输入密码即可登录。
[编辑:文件将存储在外部设备中。 (试图满足两因素身份验证)。这听起来可能很不安全,但文件将使用适当的加密算法进行加密。密钥交换和加密/解密不是问题]
当连接外部设备时,用户只会在登录屏幕(KDM)上输入他的用户名,然后我的 PAM 模块将从设备获取所需的密码,然后登录用户。
我是 PAM 主题的新手,我做了一些研究,但找不到它是否可能(如果是的话)。
如果你能指出解决这个问题的方法,我将不胜感激。
我写的PamUUID模块和Pawe提到的pamusb模块差不多?哈伊丹。将正确的 USB 驱动器插入计算机即可授予用户访问权限。
该模块非常简单,因此您可以针对您的应用程序对其进行编辑。主要是pam_uuid.c文件,可以通过编写对应的pam_uuid.h来配置,非常方便。通过在笔中搜索与 UUID 对应的设备来检测笔。在配置文件中,您只需列出 UUID 用户关联。
答案就在这里:
1
2
3
4 if ((!pwd->pw_passwd[0] && (flags & PAM_DISALLOW_NULL_AUTHTOK)) ||
(crypt_password = crypt(password, pwd->pw_passwd)) == NULL ||
strcmp(crypt_password, pwd->pw_passwd) != 0)
pam_err = PAM_AUTH_ERR;
如果匹配,则返回成功。
就是这样。
您的问题的 1:1 翻译将使用 PAM 项将密码从您的模块传递到其他模块(例如,就像 try_first_pass / use_first_pass,请参阅 Linux-PAM 源代码)。这应该比较容易,有很多代码示例。
您可以尝试做的只是识别正确的 USB 密钥。曾经有一个名为 pam_usb 的模块可以做到这一点,请参阅 http://sourceforge.net/projects/pamusb/ 和 https://github.com/aluzzardi/pam_usb
所以基本上你根本不需要密码。
你说真正的密码是在一个文件中加密的。用什么钥匙?还有谁可以访问密码文件(加密与否无关紧要)?还有谁可以物理访问登录屏幕?
每个可以物理访问您的登录屏幕的人只需要知道用户名即可登录。
这可以通过现有的