跳转到主要内容

使用ctypes,py3的Python PAM模块

项目描述

python-pam

Python pam模块支持py3(和py2)的Linux类型系统(!windows)

命令行示例

[david@Scott python-pam]$ python pam/pam.py
Username: david
Password:
Auth result: Success (0)
Pam Environment List item: XDG_SEAT=seat0
Pam Environment item: XDG_SEAT=seat0
Missing Pam Environment item: asdf=None
Open session: Success (0)
Close session: Success (0)

内联示例

[david@Scott python-pam]$ python
Python 3.9.7 (default, Oct 10 2021, 15:13:22)
[GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pam
>>> p = pam.authenticate()
>>> p.authenticate('david', 'correctpassword')
True
>>> p.authenticate('david', 'badpassword')
False
>>> p.authenticate('david', 'correctpassword', service='login')
True
>>> p.authenticate('david', 'correctpassword', service='unknownservice')
False
>>> p.authenticate('david', 'correctpassword', service='login', resetcreds=True)
True
>>> p.authenticate('david', 'correctpassword', encoding='latin-1')
True
>>> print('{} {}'.format(p.code, p.reason))
0 Success
>>> p.authenticate('david', 'badpassword')
False
>>> print('{} {}'.format(p.code, p.reason))
7 Authentication failure
>>>

身份验证和权限

请注意,python-pam和所有执行身份验证的工具遵循以下两个规则

  • 您有root(或特权访问权限):您可以检查任何账户的密码是否有效
  • 您没有root权限:您只能检查运行工具的用户的用户名是否有效

如果您需要验证多个用户,您必须使用在某个阶段具有特权访问权限的身份验证堆栈。在Linux系统中,一个示例是使用SSSD。

典型的Linux安装使用/etc/shadowpam_unix.so进行验证,这将启动/usr/bin/unix_chkpwd以验证密码。这两个都是有意编写来满足上述两个规则的。您可以通过以下方式测试unix_chkpwd的功能

good替换为正确的密码,将david替换为您适当的用户名。

~$ mkfifo /tmp/myfifo

~$ (echo -ne 'good\0' > /tmp/myfifo & /usr/bin/unix_chkpwd david nullok < /tmp/myfifo ) ; echo $?
0

~$ (echo -ne 'bad\0' > /tmp/myfifo & /usr/bin/unix_chkpwd david nullok < /tmp/myfifo ) ; echo $?
7

~$ (echo -ne 'good\0' > /tmp/myfifo & /usr/bin/unix_chkpwd someotheruser nullok < /tmp/myfifo ) ; echo $?
9

项目详情


下载文件

下载适用于您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分发

python-pam-2.0.2.tar.gz (11.4 kB 查看散列)

上传时间

构建分发

python_pam-2.0.2-py3-none-any.whl (10.7 kB 查看散列)

上传时间 Python 3

由支持