首页 文章

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

提问于
浏览
1

我正在尝试编写一个pam模块,它将从文件中读取密码,然后让用户登录而不输入密码 .

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

当连接外部设备时,用户只能在登录屏幕(KDM)上输入他的用户名,然后我的PAM模块将从设备获得所需的密码,然后登录用户 .

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

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

3 回答

  • 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

  • 0

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

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

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

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

  • 0

    答案在这里:

    • 编写自定义pam模块 . (可以在互联网上找到大量的例子)

    • 根据需要读取数据 . (从文件或其他任何你喜欢的功能读取)

    • 比较下面显示的散列密码和here

    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;

    如果匹配,返回成功 .

    这就对了 .

相关问题