Odpowiedzi:
Aby przekonać się, że sudodziała tylko przy użyciu pierwszego polecenia, pod warunkiem, że wszystko inne po pierwszym potoku jest uruchamiany jako oryginalny identyfikator użytkownika, możesz użyć tego niepotrzebnego łańcucha poleceń, aby go zobaczyć.
$ sudo whoami > file1 | whoami > file2 | whoami > file3
Następnie, kiedy catte pliki zobaczysz następujące nazwy użytkowników:
$ cat file{1..3}
root
saml
saml
Jeśli jednak uruchomisz podpowłokę:
$ sudo sh -c 'whoami > file4 | whoami > file5 | whoami > file6'
Następnie, kiedy catte pliki zobaczysz następujące nazwy użytkowników:
$ cat file{4..6}
root
root
root
Twój komentarz na temat sudo foo1 | sudo foo2 ...nigdy nie zadziała, ponieważ dane wyjściowe sudo foo1zostaną przekazane do sudo foo2. Na podstawie moich whoamiprzykładów pokazuje to, że ten łańcuch poleceń nic nie robi.
$ sudo whoami | sudo whoami | sudo whoami
root
Pierwszy działał, ale drugi i trzeci nic nie robią, ponieważ nie są przygotowani do przyjmowania danych. Myślę, że chciałeś napisać coś takiego:
$ sudo whoami;sudo whoami;sudo whoami
root
root
root
Co jest równoważne z uruchomieniem go 3 razy w 3 różnych wierszach poleceń. Albo to:
$ sudo whoami && sudo whoami && sudo whoami
root
root
root
Ale nigdy nie rób tego ostatniego. Należy do następnej sekcji.
To nie są moje najlepsze prace, ale są inne sposoby, w jakie widziałeś, jak wykonuję wiele poleceń sudo. Pokazuję je tutaj tylko po to, aby nie uczyć , aby inni musieli to zrobić !
$ echo "echo 1 > /proc/sys/vm/drop_caches" | sudo sh
Jak to działa?
Program echa w podwójnych cudzysłowach działa jako root z powodu sudo, ale powłoka przekierowująca wyjście echa do pliku tylko do roota nadal działa jako ty. Twoja bieżąca powłoka dokonuje przekierowania przed uruchomieniem sudo.
$ sudo tee /proc/sys/vm/drop_caches <<<1
Jak to działa?
Ta metoda uruchamia teeprogram jako root AND pobiera dane wejściowe z ciąg tutaj, który działa przed sudowywołaniem teepolecenia.
# this way
$ sudo -s -- 'whoami'
# or this way
sudo -s -- sh -c 'whoami;whoami'
Jak to działa?
Mogą wyglądać inaczej, ale naprawdę robią to samo. Podczas korzystania z -sprzełącznika sudouruchomi jedno polecenie. Nigdy nie mogłem dowiedzieć się, czy istnieje sposób, by uciec. Nic takiego nie działałoby.
# this
$ sudo -s -- 'whoami;whoami'
# or this
$ sudo -s -- 'whoami\;whoami'
Ale patrząc na stronę podręcznika, -sprzełącznik mówi, że przekaże pojedyncze polecenie powłoce zdefiniowanej we wpisie /etc/passwdpliku użytkownika. sh -cUżywamy sztuczki w drugiej formie, głównie przekazując powłokę, kolejną powłokę ( ), w której „backdoor” nasz ciąg poleceń do uruchomienia.
Jest ich więcej, ale zatrzymam się tutaj. Mają one jedynie na celu pokazanie, co możesz zrobić, jeśli rozumiesz rzeczy, ale niekoniecznie powinny po prostu łączyć ze sobą śmieci, ponieważ możesz, powinieneś starać się utrzymać pragmy kodu na poziomie logicznym, który ma sens, aby inni mogli zarówno zrozumieć, jak i wspierać je w przyszłości.