【问题标题】:How to programmatically(python) authenticate username/password using OS users如何以编程方式(python)使用操作系统用户验证用户名/密码
【发布时间】:2011-11-14 18:13:06
【问题描述】:

我正在编写一个允许用户登录的 python 程序。我不想实现自己的身份验证,而是希望利用 OS(linux) 机制。也就是说,当用户尝试通过输入用户名/密码对(应该是有效的操作系统用户)来登录我的应用程序时,我需要通过操作系统对这对进行身份验证。怎么做 ?它可能需要 subprocess 模块,但我试过没有运气。

【问题讨论】:

    标签: python linux authentication login


    【解决方案1】:

    这应该可以通过让您的脚本读取 /etc/passwd/etc/shadow 文件来实现,这些文件包含有关 Linux 系统上的用户名和密码的详细信息。请注意,脚本必须具有对文件的读取权限,这取决于具体情况可能会也可能不会。

    这里有两篇很好的文章解释了这些文件的格式,它们应该告诉你为了让你的脚本阅读和理解它们需要知道的一切:

    顺便说一下,当谈到加密密码时,它意味着它已经使用DES算法进行了加密。您可能需要使用 pyDes 或 DES 算法的其他 python 实现,以便您的脚本创建一个加密密码,它可以与 /etc/shadow 中的密码进行比较。

    【讨论】:

    • DES 不是散列,/etc/shadow 密码(通过crypt)的散列可能不同。另外,阅读/etc/shadow 通常需要root权限
    • 哎呀,修正了我关于 DES 不是哈希的答案。在第二个链接中讨论了使用另一种算法的可能性,以及/etc/shadow 中如何指出这一点。正如我在回答开始时所说,根据具体情况,此解决方案可能不是一个合理的解决方案。
    • 在 Linux 下,Python 的 crypt 模块可用于验证 /etc/shadow 中的哈希值,无论采用何种格式,因为 crypt.crypt 将调用 PAM 使用的底层 OS 例程。同样,spwd 模块可用于读取/etc/shadow
    【解决方案2】:

    尝试通过Python PAM 或类似方式使用PAM

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2018-06-20
      • 2015-09-14
      • 1970-01-01
      • 2012-03-21
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多