我正在尝试获取加密的系统用户密码,以便将其与另一个 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 模块(example here)一起使用时,我得到了异常“抱歉,当前不支持影子密码”,这是正常的,因为我的 pw_passwd = 'x'。
是否有另一种正确的方法来获取散列密码,或者我应该为/etc/shadow 编写我自己的解析器?
最佳答案
试试 spwd module
平台:Unix
2.5 版的新内容。
此模块提供对 Unix 影子密码数据库的访问。它适用于各种 Unix 版本。
您必须有足够的权限才能访问影子密码数据库(这通常意味着您必须是根用户)。
影子密码数据库条目被报告为类似元组的对象,其属性对应于 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
的读取权限才能正常工作
关于python,从影子中获取加密的用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552520/