【问题标题】:su without password within a scriptsu 在脚本中没有密码
【发布时间】:2012-05-06 16:44:10
【问题描述】:

我确信这个问题之前已经回答过,但我找不到我喜欢的答案。我想编写一个 shell 脚本,以另一个用户的身份执行一个非常具体的脚本(我希望任何人都能够以 postgres 用户身份启动 postgres)。该脚本将具有 710 个权限,因此它可以由某个组执行,但不能由该组读取或写入。

现在,我很确定没有交互式密码提示就无法使用“su”。这有很多很好的理由,我不需要相信这些理由的优点(有人告诉我,比我更精明的人可以从进程列表中获取密码,这很糟糕)。

问题是,更一般地说,我将如何在不滥用 unix 安全范式的情况下完成我想做的事情?有没有办法让用户以另一个用户的身份执行一个非常具体的过程?

【问题讨论】:

    标签: security unix su


    【解决方案1】:

    这种情况正是sudo 的设计目的。

    【讨论】:

      【解决方案2】:

      您可以创建一个可执行文件(不是 shell 脚本)来启动应该以 postgres 用户身份运行的脚本。将可执行文件的所有者更改为 postgres 用户,并设置 setuid 位。

      请参阅Best practice to run Linux service as a different user 以解决 Celada 的问题。

      【讨论】:

      • 不就是只改变有效的uid,不改变真正的uid吗? Postgres 可能会关心差异。
      • 在这种情况下,我认为 sudo 是正确的答案。启动和管理 postgres 的守护进程已经存在,我只需要从正确的用户帐户调用它们。也就是说,链接的线程是一个很好的讨论。谢谢!
      【解决方案3】:

      好吧,您可以使用一个简单的脚本通过 sudo 以编程方式访问用户,然后执行您想要的所有代码。

      这是一个简单的脚本:

      if [ "$#" -ne 2 ]; then
          echo "Usage: "
          echo "  suprompt <user> <password>"
      else
          echo $2 | sudo -sS su $1 
          sudo su $1
      fi
      

      此脚本使用两个参数。第一个是你想成为的用户,第二个参数是密码。

      它会自动运行。

      您可以更改最后的语句并执行以下操作:sudo su $1 -c &lt;command&gt;

      我希望这对你有用。

      【讨论】:

      • 我确信 OP 正在寻找答案而不使用 su 并且需要密码
      • 是的,但他知道必须使用su才能访问不同的用户。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多