2012-01-20 17 views
7

Oto mój skrypt Init, który mam na mojej stacji roboczej Ubuntu. Muszę uruchomić polecenie jako inny użytkownik niż root, ale po prostu nie mogę zrozumieć, jak należy to zrobić. Wydaje się, że nie działa sudo -u ani su newuser.Przełączać użytkownika w skrypcie init?

Skrypt:

respawn 
console none 

start on runlevel [2345] 
stop on runlevel [06] 

script 
    su "anotherUser" -c ./myCommand 
end script 
+0

użyj tego typu polecenia "su -c" twoje polecenie "inny_użytkownik" – vikky

+0

Jak zauważyli @Henrick w swojej odpowiedzi poniżej, skrypty startowe mogą korzystać z sekcji '' setuid' '' (http://upstart.ubuntu.com/cookbook/# setuid), aby ustawić użytkownika. – clayzermk1

Odpowiedz

18

Używam tego:

su -l $MUSER -c "myCommand args..." 

Aktualizacja: Ponieważ istnieje zainteresowanie w tej odpowiedzi, opiszę sposób używam go tutaj.

Uruchomimy serwery jako normalni użytkownicy systemu Linux, a nie root. Nazwa użytkownika składa się z trzech części:

usługi, klient, na scenie

ten sposób możemy uruchomić kilka usług dla kilku klientów w jednym systemie operacyjnym Linux.

Przykład: obsługa foo_bar_p „foo” od klienta „Bar” i „p” oznacza wytwarzanie

Oto część skrypcie. Skrypt startowy może być wykonywany jako root lub jako użytkownik foo_bar_p:

# /etc/init.d/foo_bar_p-celeryd 
# scriptname contains linux username 
SCRIPT_NAME=`basename "$0"` 
SYSTEM=${SCRIPT_NAME%*-celeryd} 

U=`id -nu` 

if [ ! $U == $SYSTEM ]; then 
    if [ $U == "root" ]; then 
     # use "-l (login)" to delete the environment variables of the calling shell. 
     exec su -l $SYSTEM -c "$0 [email protected]" 
    fi 
    echo "Script must be run from $SYSTEM or root. You are '$U'" 
    rc_exit 1 
fi 

# OK, now I am foo_bar_p 
cd 
. $HOME/.bashrc 
.... 
+0

Fantastyczne. Dzięki! – Industrial

+0

Co robi przełącznik -l? – Henrik

+0

-l | --login Sposób na uruchomienie powłoki powłoki logowania. – Henrik

1

su jest prawdopodobnie bardziej uniwersalne podejście, ale jest to również możliwe w przypadku niektórych wspólnych rozkładów z sudo:

sudo -u $MUSER $COMMAND $ARGS 

(tylko Reread Twoje pytanie i nie zdawali sobie sprawy, że nie działa dla ciebie, ale dla mnie pracował w skryptach startowych)

+0

Próbowałem tego w '/ etc/rc.local', ale nie działa na Ubuntu 16.04. Próbowano również: 'su -l user -c/home/user/script'. Jakieś sugestie? – beemaster

6

dla upstart, przeznaczenie:

setuid myuser 
exec command args 
+0

Nice! Czy ładuje się .bashrc, profil i podobne rzeczy? –

Powiązane problemy