我确定此问题之前已经得到解答,但我找不到我喜欢的答案。我想写一个shell脚本,作为另一个用户执行一个非常特定的脚本(我希望任何人都可以作为postgres用户启动postgres)。该脚本将具有710个perms,因此它可以由某个组执行,但不能由该组读取或写入。
现在,我很确定没有交互式密码提示就无法使用'su'。有很多很好的理由,我不需要相信这些原因的优点(我被告知比我更精明的人可以从进程列表中获取密码,这很糟糕)。
问题是,更一般地说,如何在不滥用unix安全范例的情况下完成我想做的事情?有没有办法允许用户作为另一个用户执行一个非常具体的过程?
答案 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>
我希望这对您有用。