2011-04-18 137 views
1

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

+1

为什么使用python? – 2011-04-18 17:31:59

+1

因为,我喜欢它,它的可编译性,并且已经在python中扮演重要角色,这只是一部分。我试图学习那种语言。 – Riki137 2011-04-18 17:38:31

+0

除了'ubuntu'之外,我还会推荐标记这个'linux' - 对于这个问题,任何答案都应该(大部分)适用于所有Linux发行版。 – 2011-04-18 18:02:10

回答

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是关闭带有“:”分隔符的csv文件,但有一些细微差别。

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

一般来说,如果可能的话,我会推荐第一条路径 - 直接修改/ etc/shadow充满危险 - 如果搞乱/ etc/shadow文件,您将无法登录。你走这条路,备份文件很多

2

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

0

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

x = commands.getstatusoutput("passwd root") 

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