/ / Zatrzymaj sudo zatrzymywanie wykonywania skryptu - bash, sudo

Zatrzymaj sudo zatrzymując ukończenie skryptu - bash, sudo

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 № 1

Jeś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.