4

我正在尝试获取加密的系统用户密码,以便将其与另一个 sha512 加密的密码进行比较。我试过 pwd,但似乎这个模块不处理用户密码,或者使用的系统对它来说“太现代了”(debian 挤压)。这是我得到的:

import pwd
username = 'root' #or another user
pwd_struct = pwd.getpwnam(username)
print pwd_struct

>>>pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')

其中 pw_passwd='x' 而不是 sha512 字符串。

打算将此与 python crypt 模块一起使用(例如此处),我得到了异常“对不起,目前不支持影子密码”,这是正常的,因为我的 pw_passwd = 'x'。

是否有另一种获取散列密码的正确方法,或者我应该为 /etc/shadow 使用自己的解析器?

4

2 回答 2

2

试试spwd 模块

平台:Unix

2.5 版中的新功能。

该模块提供对 Unix 影子密码数据库的访问。它适用于各种 Unix 版本。

您必须有足够的权限才能访问影子密码数据库(这通常意味着您必须是 root)。

影子密码数据库条目报告为类似元组的对象,其属性对应于 spwd 结构的成员(属性字段见下文):

>>> import spwd
>>> spwd.getspnam('root')
spwd.struct_spwd(sp_nam='root', sp_pwd='!', sp_lstchg=15238, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1)

请记住,您需要具有读取权限/etc/shadow才能使其正常工作

于 2012-11-25T16:08:45.740 回答
0

在 google 上搜索术语“python”和“shadow”会返回 spwd 库作为第一个结果。

由于引入影子密码是为了防止普通用户对密码文件进行暴力攻击,因此您只能使用 root 等特权用户帐户访问影子密码。

于 2012-11-25T16:13:05.567 回答