bash运行功能与不同的用户

Ste*_*lli 14 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"
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)


Kei*_*son 7

你不能这样做,至少不是直接的.

每个进程都在特定用户帐户下运行.默认情况下,该帐户与调用它的进程相同.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选择权.

  • 正如@RichardFletcher 所说,这是可能的。参见另一个帖子 (2认同)