更改密码,python,linux

时间:2011-04-18 17:31:18

标签: python linux change-password

如何通过python脚本更改ubuntu root用户的密码?感谢。

3 个答案:

答案 0 :(得分:5)

有两种主要方法可以解决这个问题 -

一个是从python调用passwd命令行工具(例如通过stdlib的subprocess模块)。如果您的脚本没有以root用户身份运行,则需要使用“su”或“sudo”命令进行换行以提升为root权限。将预期数据写入stdin应该已足够,但如果您发现需要根据sudo / passwd提示的确切内容执行不同的操作,pexpect模块可能会有所帮助。

第二种是直接写入存储密码哈希值的/etc/shadow文件。这将肯定要求您的脚本以root身份运行,以便在/ etc / shadow上具有读/写权限。 Stdlib提供用于访问/ etc / shadow的spwd模块,但它是只读的,因此您必须滚动自己的读取器/写入器... csv模块可能有用,/ etc / shadow close 是一个带有“:”分隔符的csv文件,但有一些细微差别。

如果选择第二条路线,则需要能够生成替换密码的新哈希值,并将其插入影子文件中。 linux上最快的方法是使用stdlib crypt模块,但你必须处理salt生成,并设置适当的密码哈希前缀(“$ 5 $”,“$ 6 $”等)。或者,Passlib库中的host_context对象可以为您处理大部分内容(免责声明:我是该库的作者)。

一般情况下,如果可能的话,我建议使用第一条路径 - 直接修改/ etc / shadow会带来危险 - 如果你弄乱/ etc / shadow文件,你将无法登录。如果你走这条路,备份很多文件

答案 1 :(得分:2)

您可以使用Python脚本修改/etc/passwd/etc/shadow),这需要root权限sudo python modify.py /etc/passwd(其中modify.py是您将更改密码的脚本)

答案 2 :(得分:0)

您可以使用commands模块将输出传输到终端。

x = commands.getstatusoutput("passwd root")

但是,您必须尝试输入“旧密码:”和“新密码:”的值。在命令完成之前不会分配变量x,并且在输入旧密码和新密码之前命令不会完成。如果你只是第二次使用命令模块,那么它只会产生一个新的子进程。因此,就像其他人所说的那样,只需使用open函数写入/ etc / shadow。