2013-07-29 8 views
9

Sarebbe possibile eseguire una funzione bash personalizzata con privilegi diversi?funzione bash run con utente diverso

#!/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" 

Se eseguo questo script con l'utente 'root', voglio ricevere come output:

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

sarebbe possibile?

+1

@hetepeperfan: Cercando dimostra che non si può fare in questo modo * *. Non mostra che non è possibile * in qualche modo * eseguire una singola funzione come un altro utente. –

risposta

5

Non è possibile farlo, almeno non direttamente.

Ogni processo viene eseguito con un determinato account utente. Per impostazione predefinita, è lo stesso account del processo che lo ha invocato. sudo consente a un processo in esecuzione in un account di avviare un altro processo che viene eseguito con un altro account.

Quando si richiama una funzione di shell, non avvia un nuovo processo. Con alcune modifiche, lo script dovrebbe darvi qualcosa di simile:

sudo: RunStefano: command not found 

Nel nuovo processo creato da sudo, non esiste un comando RunStefano; la funzione è locale al processo che esegue lo script.

È necessario isolare la funzione in uno script eseguibile separato; puoi quindi invocare lo script tramite sudo.

Per inciso, è anche necessario modificare gli apostrofi intorno a /usr/bin/whoami backticks:

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

E si dovrebbe leggere la documentazione per il comando sudo; non ha un'opzione -c.

+1

Ciao Keith. Grazie per la tua risposta gentile. Procederò come stai suggerendo! Grazie ancora! –

13

Sì, questo è possibile

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