具有不同用户的bash运行功能

问题描述 投票:14回答:2

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

可能吗?

bash sudo
2个回答
6
投票

您不能这样做,至少不能直接这样做。 (但请参阅Richard Fletcher's answer。)

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

调用shell函数时,它不会启动新进程。经过一些修改,您的脚本应该给您类似的东西:

sudo: RunStefano: command not found

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

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

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

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

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


27
投票

是,有可能

#!/bin/bash
function1(){
   echo `whoami` 
}
export -f function1
su username -c "bash -c function1"
exit 0
© www.soinside.com 2019 - 2024. All rights reserved.