su在脚本中没有密码

时间:2012-05-06 16:44:10

标签: security unix su

我确定此问题之前已经得到解答,但我找不到我喜欢的答案。我想写一个shell脚本,作为另一个用户执行一个非常特定的脚本(我希望任何人都可以作为postgres用户启动postgres)。该脚本将具有710个perms,因此它可以由某个组执行,但不能由该组读取或写入。

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

这是一个简单的脚本:

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

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

它会自动运行。

您可以更改最终声明并执行:sudo su $1 -c <command>

我希望这对您有用。