0

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

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

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

4

3 回答 3

3

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

于 2012-05-06T16:45:48.933 回答
1

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

请参阅以不同用户身份运行 Linux 服务的最佳实践,以解决 Celada 的问题。

于 2012-05-06T16:57:15.373 回答
0

好吧,您可以使用一个简单的脚本来使用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 <command>

我希望这对你有用。

于 2020-04-06T17:01:01.327 回答