繁体   English   中英

更改密码,Python,Linux

[英]Changing password, python, linux

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

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

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

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

如果选择第二种方法,则需要能够生成新的替换密码哈希,并将其插入到影子文件中。 在Linux上最快的方法是使用stdlib crypt模块,但是您必须注意生成盐,并设置适当的密码哈希前缀(“ $ 5 $”,“ $ 6 $”等)。 另外,Passlib库中的host_context对象可以为您解决大部分问题(免责声明:我是该库的作者)。

通常,如果可能的话,我建议第一种方法-直接修改/ etc / shadow充满危险-如果弄乱了/ etc / shadow文件,将无法登录。 , 大量备份文件

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

您可以使用命令模块将输出通过管道传输到终端。

x = commands.getstatusoutput("passwd root")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM