Czy istnieje sposób na uruchomienie części skryptu jako inny użytkownik (inny niż root)? Jeśli to pomoże, część do uruchomienia jako inny użytkownik występuje na końcu skryptu
Edycja:
OS -> Ubuntu 9.04
Czy istnieje sposób na uruchomienie części skryptu jako inny użytkownik (inny niż root)? Jeśli to pomoże, część do uruchomienia jako inny użytkownik występuje na końcu skryptu
Edycja:
OS -> Ubuntu 9.04
Odpowiedzi:
Użyj polecenia sudo w skrypcie.
W formie:
sudo -u username command
polecenie sudo uruchamia polecenie jako nazwę użytkownika .
Jeśli skrypt jest uruchamiany jako root, nie sądzę, aby monitował o hasło. W przeciwnym razie w tym artykule omówiono, jak używać sudo z hasłem w jednym wierszu polecenia? , a w tym artykule omówiono korzystanie z sudo bez hasła?
chmod +x script.sh
a następnie po prostusudo -u username script.sh
i
opcję, jeśli chcesz uzyskać środowisko użytkownika
Ta odpowiedź jest dobra, ale porada dotycząca błędu serwera jest nieco niebezpieczna - pozwoliłby każdemu uruchomić coś jako root! Publikuję tutaj, ponieważ nie mogę sformatować komentarza.
Polecam użycie visudo, aby dać potrzebne uprawnienia tak dokładnie, jak to możliwe. Wpisz visudo
i dodaj wiersz, taki jak:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Jeśli potrzebujesz uruchomić to samo na wielu hostach, możesz otworzyć to za pomocą:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Ale ** nie * nie użyłbym:
username ALL=(ALL) NOPASSWD: ALL
lub nazwa użytkownika nazwa hosta = WSZYSTKIE
Strona podręcznika sudoer ma wiele krwawych szczegółów
username
nazwę użytkownika, który powinien móc uruchomić polecenie). Jeśli plik wykonywalny, który chcesz uruchomić, może być wykonywany tylko przez jednego konkretnego użytkownika, to też jest w porządku - po prostu przekaż tę nazwę użytkownika w sudo -u username commandline
wierszu skryptu.
# I = lubię:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./biegać
1: root
2: nobody
3: root
nie jestem tego pewien, ale jeśli chcesz, aby TYLKO koniec tego skryptu działał jako inny użytkownik, możesz dodać go su someuser
przed końcem skryptu.
Czy coś brakuje?
Mam nadzieję, że to pomaga
pozdrowienia
W ten sposób koniec skryptu zostanie wykonany przez innego użytkownika (root). Zwróć uwagę na połączenia $[LINENO+2]
i exit $?
. Są one wymagane, aby koniec skryptu wykonał się tylko raz i aby zachować kod wyjścia sudo
wywołania.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1