【问题标题】:How can I pass a password to the "su" command?如何将密码传递给“su”命令?
【发布时间】:2009-01-16 15:25:31
【问题描述】:

我有一个程序将密码作为输入,然后执行 shell 以在 UNIX 中执行“su”(切换用户)命令。但是,我不知道如何将密码变量传递给 UNIX su 命令。我必须使用的语言非常有限(UniBasic)。

有什么想法吗?

【问题讨论】:

    标签: unix authentication passwords


    【解决方案1】:

    好吧,最好的方法是使用 setuid-root 二进制文件,它要求输入密码,然后执行所需的任何命令,但它需要你说不拥有的知识。我建议改为查看sudo(1)

    【讨论】:

    • 我将使用 setuid-root 选项。谢谢!
    【解决方案2】:

    您可以 ssh 到 localhost 作为另一个用户来执行您想要的任何命令。或者,使用 sudo 并编辑 /etc/sudoers 以使 sudo 不要求输入密码。但是,可能存在安全隐患。

    编辑:请在您投反对票时告诉我原因。我的回答可能并不完美,但至少它有效。我自己为一些只能以奇怪的用户名运行的许可软件这样做。

    【讨论】:

    • 我不知道为什么这被否决,似乎是一个非常好的解决方法。
    【解决方案3】:

    您确实想将密码指定为命令行参数。不是因为@unwind 的回答(脚本可以设为私有),而是因为如果有人运行进程列表,您可以看到命令参数,因此可以看到有问题的密码。

    【讨论】:

    • +1 因为它让我想起了多少次我看到人们询问有关在命令行上设置密码的问题。这么多人应该吊销他们的 UNIX/Linux 操作许可证...
    • 那么有没有合理的解决方案呢?假设我想创建一个具有 710 perms 的私有脚本,它作为另一个用户名执行非常特定的任务(在我的例子中,将 postgres 作为 postgres 启动)。最好的方法是什么?
    【解决方案4】:

    我的 Linux 服务器上的 su 版本不支持这样的选项。我检查了sudo,但也没有。他们希望自己进行提示,以确保以安全的方式完成并(我猜)阻止人们将密码逐字写入脚本等。

    【讨论】:

    • sudo 可以配置为不询问密码。
    【解决方案5】:

    您还可以查看 'expect' 实用程序,该实用程序旨在将复杂的用户输入脚本写入程序,该程序不够灵活,无法从标准输入以外的地方接收此输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多