2013-07-29 79 views
9

可以運行具有不同權限的自定義bash功能嗎?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" 

如果我運行此腳本「根」用戶,我想收到的輸出:

Welcome, root 
Ciao, stefano 
    (...) 
Ciao, stefano 

難道是不可能性?

+1

@hetepeperfan:試圖表明,你不能做*這樣*。它並沒有表明你不能*以某種方式*作爲另一個用戶運行單一功能。 –

回答

5

你不能那樣做,至少不是直接的。

每個進程在特定用戶帳戶下運行。默認情況下,這是與調用它的進程相同的帳戶。 sudo允許在一個帳戶下運行的進程啓動在另一個帳戶下運行的另一個進程。

當你調用一個shell函數時,它不會啓動一個新的進程。有一些修改,你的腳本應該給你這樣的:

sudo: RunStefano: command not found 

在由sudo創建新的進程,沒有RunStefano命令;該函數對運行腳本的進程是本地的。

您需要將函數分離爲單獨的可執行腳本;然後您可以通過sudo調用該腳本。

順便說一句,你還需要各地/usr/bin/whoami改變撇號反引號:

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

你應該閱讀有關sudo命令的文檔;它沒有-c選項。

+1

Ciao Keith。謝謝你的回答。我會按照你的建議繼續前進!再次感謝! –

13

是的,這是可能的

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