是否可以使用不同的权限运行自定义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"
Run Code Online (Sandbox Code Playgroud)
如果我用'root'用户运行这个脚本,我想收到输出:
Welcome, root
Ciao, stefano
(...)
Ciao, stefano
Run Code Online (Sandbox Code Playgroud)
它可能吗?
小智 23
是的,这是可能的
#!/bin/bash
function1(){
echo `whoami`
}
export -f function1
su username -c "bash -c function1"
exit 0
Run Code Online (Sandbox Code Playgroud)
你不能这样做,至少不是直接的.
每个进程都在特定用户帐户下运行.默认情况下,该帐户与调用它的进程相同.sudo允许在一个帐户下运行的进程启动另一个在不同帐户下运行的进程.
当您调用shell函数时,它不会启动新进程.通过一些修改,您的脚本应该给你这样的东西:
sudo: RunStefano: command not found
Run Code Online (Sandbox Code Playgroud)
在创建的新流程中sudo,没有RunStefano命令; 该函数是运行脚本的进程的本地函数.
您需要将该函数隔离到单独的可执行脚本中; 然后,您可以通过调用该脚本sudo.
顺便说一句,你还需要将撇号更改/usr/bin/whoami为反引号:
echo "Ciao, `/usr/bin/whoami`"
Run Code Online (Sandbox Code Playgroud)
你应该阅读sudo命令的文档; 它没有-c选择权.