编写将从文件读取密码并将用户登录的PAM模块

时间:2011-12-21 21:36:43

标签: linux pam

我正在尝试编写一个pam模块,该模块将从文件中读取密码,然后让用户无需输入密码即可登录。

[编辑:文件将存储在外部设备中。 (试图满足双因素身份验证)。这听起来可能非常不安全,但文件将使用适当的加密算法进行加密。密钥交换和加密/解密不是问题]

连接外部设备后,用户只能在登录界面(KDM)输入用户名,然后我的PAM模块将从设备获取所需密码,然后登录用户。

我是PAM主题的新手,我做了一些研究,但无法找到是否可能(如果是这样)。

如果你指出解决这个问题的方法,我将不胜感激。

4 个答案:

答案 0 :(得分:1)

我编写了PamUUID模块,该模块类似于Paweł Hajdan提到的pamusb模块。将正确的USB驱动器插入计算机即可授予用户访问权限。

该模块非常简单,因此您可以为您的应用程序对其进行编辑。主要是pam_uuid.c文件,可以通过以suckless方式编写相应的pam_uuid.h进行配置。通过在笔中搜索与UUID相对应的设备来检测笔。在配置文件中,您只需要列出UUID用户关联。

答案 1 :(得分:0)

所以基本上你根本就不想要密码。

您说真实密码是在文件中加密的。有什么关键?还有谁可以访问密码文件(加密与否无关紧要)?还有谁可以实际访问登录界面?

对您的登录屏幕具有物理访问权限的每个人都只需知道要登录的用户名。

这可以通过现有的pam_permit模块更轻松地实现。将一个插入您的配置并完成它。有关详细信息,请参阅man pam_permitman pam.d

答案 2 :(得分:0)

您的问题的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

答案 3 :(得分:0)

答案在这里:

  1. 编写自定义pam模块。 (可以在互联网上找到大量的例子)
  2. 根据需要读取数据。 (从文件或其他任何你喜欢的功能读取)
  3. 比较下面显示的散列密码和here
  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;
    

    如果匹配,则返回成功。

    就是这样。