bash运行功能与不同的用户

时间:2013-07-29 14:03:55

标签: bash sudo

可以运行具有不同权限的自定义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

可能吗?

2 个答案:

答案 0 :(得分:21)

是的,这是可能的

#!/bin/bash
function1(){
   echo `whoami` 
}
export -f function1
su username -c "bash -c function1"
exit 0

答案 1 :(得分:7)

你不能这样做,至少不能直接做到。

每个进程在特定用户帐户下运行。默认情况下,该帐户与调用它的进程相同。 sudo允许在一个帐户下运行的流程启动另一个在不同帐户下运行的流程。

调用shell函数时,它不会启动新进程。通过一些修改,您的脚本应该为您提供如下内容:

sudo: RunStefano: command not found

sudo创建的新流程中,没有RunStefano命令;该函数是运行脚本的进程的本地函数。

您需要将该函数隔离到单独的可执行脚本中;然后,您可以通过sudo调用该脚本。

顺便提一下,您还需要将/usr/bin/whoami周围的撇号更改为反引号:

echo "Ciao, `/usr/bin/whoami`"

您应该阅读sudo命令的文档;它没有-c选项。