如何通过 python 脚本更改 ubuntu root 用户的密码?谢谢。
3 回答
有两种主要方法可以解决这个问题 -
一种是从 python 调用passwd命令行工具(例如通过 stdlib 的subprocess模块)。如果您的脚本没有以 root 身份运行,则需要使用“su”或“sudo”命令进行包装以提升到 root 权限。将预期数据写入标准输入就足够了,但是如果您发现需要根据 sudo/passwd 提示的内容执行不同的操作,那么pexpect模块可能会有所帮助。
第二个是直接写入存储密码哈希的/etc/shadow文件。这肯定需要您的脚本以 root 身份运行,以便在 /etc/shadow 上具有读/写权限。Stdlib 提供用于访问 /etc/shadow 的spwd模块,但它是只读的,因此您必须滚动自己的读取器/写入器... csv模块可能有用,/etc/shadow接近于csv带有“:”分隔符的文件,但有一些细微差别。
如果您选择第二条路线,您将需要能够生成替换密码的新哈希,并将它们插入到影子文件中。linux 上最快的方法是使用 stdlib crypt模块,但您必须注意生成盐,并设置适当的密码哈希前缀(“$5$”、“$6$”等)。或者,Passlib 库中的host_context对象可以为您处理大部分内容(免责声明:我是该库的作者)。
一般来说,如果可能的话,我会推荐第一条路线 - 直接修改 /etc/shadow 充满危险 - 如果你弄乱 /etc/shadow 文件,你将无法登录。如果你走这条路线,备份文件很多。
您可以使用需要 root 权限的 Python 脚本修改/etc/passwd
( )(更改密码的脚本在哪里)/etc/shadow
sudo python modify.py /etc/passwd
modify.py
您可以使用commands模块将输出通过管道传输到终端。
x = commands.getstatusoutput("passwd root")
但是,您必须创造性地尝试输入“旧密码:”和“新密码:”的值。在命令完成之前不会分配变量 x,并且在输入旧密码和新密码之前命令不会完成。如果您只是第二次使用命令模块,那么它只会产生一个新的子进程。因此,就像其他人所说,只需使用open函数写入 /etc/shadow 即可。