Zastanawiałem się, jak uruchomić polecenie jako inny użytkownik ze skryptu.
Mam właściciela skryptu ustawionego jako root. Mam również następujące polecenie uruchamiane w skrypcie, aby uruchomić polecenie jako użytkownik Hudson:
su -c command hudson
Czy to poprawna składnia?
sudo cat /etc/passwd | grep user-abc
. Jeśli zobaczysz coś takiego:user-abc:x:994:994::/home/user-abc:/bin/false
to nie zadziała. Jest tak, ponieważ ostatnia część „/bin/false
” oznacza, że nie ma powłoki dla tego użytkownika.Odpowiedzi:
Tak. Oto
--help
:I trochę testowania (użyłem,
sudo
ponieważ nie znam hasła donobody
konta)Kiedy twoje polecenie przyjmuje argumenty, musisz je zacytować. Jeśli nie, zdarzają się dziwne rzeczy. Oto jestem - jako root - próbuję utworzyć katalog w / home / oli (jako oli) bez cytowania pełnego polecenia:
Jest odczytywany tylko
mkdir
jako wartość-c
flagi i próbuje użyć go/home/oli/java
jako nazwy użytkownika. Jeśli go zacytujemy, to po prostu działa:źródło
Uwaga: „Mam właściciela skryptu ustawionego jako root” nic nie robi; nawet jeśli masz ustawiony bit setuid, nadal nie działa
Zakładając, że faktycznie uruchamiasz skrypt jako root, możesz jednak użyć
sudo
.su
służy głównie do przełączania użytkowników, podczas gdysudo
służy do wykonywania poleceń jak inni użytkownicy.-u
Flaga pozwala określić, które użytkownik może wykonać polecenie jako:źródło
sudo
można tylko dostać to:root is not in the sudoers file
. Co stanowisu - <username> -c "command to run"
jedyną opcję.sudo -u kilgore mv this that
)