【问题标题】:Changing password, python, linux更改密码,python,linux
【发布时间】:2011-04-18 17:31:17
【问题描述】:

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

【问题讨论】:

  • 因为,我喜欢它,它是可编译的,并且已经在 python 中占据了很大一部分,这只是一部分。我正在努力学习那种语言。
  • 我建议在 'ubuntu' 之外标记这个 'linux' - 对于这个问题,任何答案都(大部分)适用于所有 linux 发行版。

标签: python linux change-password


【解决方案1】:

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

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

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

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

一般来说,如果可能的话,我会推荐第一种方法——直接修改 /etc/shadow 是充满危险的——如果你弄乱了 /etc/shadow 文件,你将无法登录。如果你走这条路,大量备份文件

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      x = commands.getstatusoutput("passwd root")
      

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

      【讨论】:

        猜你喜欢
        • 2012-10-22
        • 1970-01-01
        • 2013-02-27
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多