Przykładowy skrypt może wyglądać jak poniżej:
#!/bin/bash
sudo su
ls /root
Jeśli używasz ./test.sh
jako zwykły użytkownik, zamiast tego uruchom ls
jako superużytkownik i wyjdź, przełącza się na root; a kiedy się wylogowuję, działa ls /root
jak zwykły użytkownik.
Czy ktoś może mi powiedzieć o tym mechanizmie?
sudo su
bolą mnie oczy.sudo -s
?sudo su
ponieważ jestem bardziej przyzwyczajony do opcjisu
niż z tychsudo
. Znam opcje sudo wystarczająco dobrze, ale mogę pisać su szybciej. Ale tak, myślę, że to oznacza, że nie znam wystarczająco dobrze sudo.sudo -i
jest zbliżona dosu -
natomiastsudo -s
działa podobniesu
(bez myślnika)Odpowiedzi:
Polecenia w skrypcie są wykonywane pojedynczo, niezależnie. Sam skrypt jako rodzic wszystkich poleceń w skrypcie jest kolejnym niezależnym procesem, a polecenie su nie zmienia i nie może zmienić go na root: polecenie su tworzy nowy proces z uprawnieniami roota.
Po zakończeniu tej komendy su proces nadrzędny, nadal uruchomiony jako ten sam użytkownik, wykona resztę skryptu.
Co chcesz zrobić, to napisać skrypt opakowania. Uprzywilejowane polecenia przechodzą na przykład do skryptu głównego
~/main.sh
Skrypt otoki wywołuje skrypt główny z uprawnieniami administratora, podobnie jak ten
Aby uruchomić ten proces, uruchom opakowanie, które z kolei uruchamia główny skrypt po przełączeniu użytkownika na użytkownika root.
Tej techniki otoki można użyć do przekształcenia skryptu w otokę wokół siebie. Zasadniczo sprawdź, czy działa jako root, jeśli nie, użyj „su”, aby ponownie się uruchomić.
$ 0 to przydatny sposób na odniesienie się do skryptu, a komenda whoami może powiedzieć nam, kim jesteśmy (czy jesteśmy rootami?)
Tak więc główny skrypt z wbudowanym otokiem staje się
Zwróć uwagę na użycie exec. Oznacza to „zamień ten program na”, co skutecznie kończy jego wykonywanie i uruchamia nowy program, uruchamiany przez su, z rootem, aby działał od góry. Instancja zastępująca to „root”, więc nie wykonuje prawej strony ||
źródło
Użyj skryptu.
Kod między blokiem TUTAJ zostanie uruchomiony jako root.
źródło
sudo su
wywołuje dwa programy. Użyjsudo -s <<HEREDOC
lubsu user <<HEREDOC
... Głupi limit 5 minut.Bez dalszych argumentów
su
uruchomi powłokę logowania dla roota. Tak właśnie robi pierwsza linia skryptu. Po wyjściu z tego, zamyka powłokę zgłoszeniową, powraca su i kontynuuje wykonywanie skryptu, to z drugiej linii:ls /root
. Myślę, że możesz po prostusudo ls /root
robić, co chcesz.źródło
ls
, ale to tylko próbka. W rzeczywistości muszę robić o wiele więcej rzeczy z uprawnieniami roota :-) Wolę więc odpowiedź @ Ankit.Gdy uruchomisz
sudo su
nowy proces zuserid (euid=EUID)
rozwidleniem superużytkownika, stąd mamy nowy bash działający na innym identyfikatorze procesu(pid=PID)
powiązanym z tym samym terminalem(tname=TTY)
.Wyjaśnienie
Załóżmy, że po odpaleniu
ps -A | grep bash
masz21460 pts/2 00:00:00 bash
jako wyjście. Teraz, gdy wykonasz./test.sh
oba poleceniasudo su
ils /root
zostaniesz buforowany doPID 21460
. Po wykonaniu, gdyroot
jako aktywny użytkownik uderzyszps -A | grep bash
ponownie, zauważysz, że działa nowa bashPID say, 21570
. Wyjście zroot bash
spowoduje zabicie nowo rozwidlonego uderzenia, powracając do,user's bash
a zatem wykonuje polecenie buforowanels /root
przed zwolnieniem monitu.źródło