Jak zatrzymać program sudo uniemożliwiający wykonanie skryptu?
Sudo prosi o hasło, zawsze kończy się niepowodzeniem przy pierwszej próbie, druga próba się powiedzie, ale zatrzymuje skrypt przed zakończeniem.
Skrypt zostanie zatrzymany, a wszelkie polecenia po pytaniu o hasło nie zostaną wykonane.
Cześć w linii 7 skryptu nie zostanie wykonana.
Jak powstrzymać sudo przed zatrzymaniem reszty skryptu?
sudo bash << "END"
cat << "DONE" > /usr/bin/hi
echo hi
DONE
sudo chmod +x /usr/bin/hi
END
hi
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli twój skrypt wymaga uprawnień roota, będziesz musiał je dostarczyć w pewnym momencie. Uruchom skrypt jako root.
0 dla odpowiedzi nr 2
Myślę, że to, co próbujesz zrobić, to więcej:
sudo bash << "END"
cat << "DONE" > /usr/bin/hi
echo hi
DONE
chmod +x /usr/bin/hi
END
hi
zauważ, że przeniosłem chmod z /usr/bin/hi
plik, ponieważ wydaje się, że chcesz, aby ten plik był wykonywalny, a nie aby zmienić własne prawa.
BTW, usunąłem też drugie sudo, które jest bezużyteczne, ponieważ jesteś już w kontekście sudo.
EDYCJA: następująca edycja pytania:
Właściwie, kiedy wykonujesz polecenie za pomocą sudo,(zazwyczaj) musisz podać swoje hasło, a następnie dane uwierzytelniające użytkownika głównego są przechowywane „przez chwilę”, dlatego po raz pierwszy pojawia się pytanie o hasło, ale nie po raz drugi.
Aby zapobiec zapytaniu o hasło, musisz edytować plik sudoers (za pomocą visudo
polecenie) i dodaj program, który chcesz uruchomić, do polecenia dozwolonego bez zadanego hasła (przeczytaj dokumentację w pliku lub man sudoers
). Niemniej jednak, udzielanie tego rodzaju nieograniczonych ograniczeń jest dość niebezpieczne, szczególnie w tym przypadku, ponieważ program będzie bash
, więc będziesz mógł uruchomić konsolę jako root. Możliwość sudo jako root jest już wielką odpowiedzialnością, bez hasła jest prawie jak używanie powłoki jako root, a więc całkiem ryzykowne (szczególnie dla systemu, jeśli popełnisz błąd podczas wykonywania polecenia lub aktualizacji skryptu).
0 dla odpowiedzi № 3
sudo
nie przerywa wykonywania poleceń po sudo
.
Wszystkie te polecenia są wykonywane pod sudo
.
Innymi słowy, sudo
działa pierwszy. Potem dzwoni bash
i inne polecenia są właśnie dostarczane do niego jak tutaj-doc.
Możesz użyć -S
opcja sudo
jak poniżej:
sudo -S bash << "END"
root123
cat << "DONE" > /usr/bin/hi
echo hi
DONE
chmod +x /usr/bin/hi
END
hi
Zastąpić root123
tutaj za pomocą hasła użytkownika. W skrypcie musiałbyś wpisać go zwykłym tekstem.
Skutecznie, tutaj-doc jest wykorzystywany przez sudo
+bash
.
Inne opcje, które można wypróbować, to użycie SUDO_ASKPASS
. Czek man sudo
po więcej szczegółów.