是否可以运行具有不同特权的自定义bash函数?
#!/bin/bash
function RunStefano() {
while [ 1 ]; do
echo "Ciao, ´/usr/bin/whoami´"
sleep 10;
done &
}
export -f RunStefano;
echo "Welcome, ´/usr/bin/whoami´"
sudo -u stefano -c "RunStefano"
如果我以'root'用户身份运行此脚本,我希望接收其输出:
Welcome, root
Ciao, stefano
(...)
Ciao, stefano
可能吗?
您不能这样做,至少不能直接这样做。 (但请参阅Richard Fletcher's answer。)
每个进程”以特定的用户帐户运行。默认情况下,该帐户与调用它的进程相同。 sudo
允许一个帐户下运行的进程启动另一个帐户下运行的进程。
调用shell函数时,它不会启动新进程。经过一些修改,您的脚本应该给您类似的东西:
sudo: RunStefano: command not found
在由sudo
创建的新进程中,没有RunStefano
命令;该函数是运行脚本的进程的本地函数。
您需要将功能隔离到单独的可执行脚本中;然后可以通过sudo
调用该脚本。
顺便说一下,您还需要将/usr/bin/whoami
周围的撇号更改为反引号:
echo "Ciao, `/usr/bin/whoami`"
并且您应该阅读sudo
命令的文档;它没有-c
选项。
是,有可能
#!/bin/bash
function1(){
echo `whoami`
}
export -f function1
su username -c "bash -c function1"
exit 0