Paręnaście dni temu składałem laptopa przed zabraniem go do samochodu.
F12, sudo shutdown
i … ups. Na śmierć zapomniałem, że
otworzyłem sobie w tym terminalu ssh do zdalnej maszyny, na której
chwilę wcześniej doinstalowałem jakiś drobiazg. Na szczęście
spacer był niedaleki, do sąsiedniego pokoju (a córka chyba nie wiedziała,
że to przeze mnie nagle znikła jej przeglądarkowa gierka).
Mylę się tak dosyć rzadko, bo zwykle pomagam sobie kolorami. Ale tu akurat chciałem coś zrobić na szybko…
Wyraźnie nie tylko mi się zdarzają takie omyłki, bo znalazłem sympatyczny
pakiecik, który próbuje przed nimi bronić. Rzecz nazywa się
molly-guard
, instalujemy ją (Debian/Ubuntu) przez:
sudo apt-get install molly-guard
Uwaga: trzeba to zrobić na maszynach zdalnych, tj. serwerach i innych maszynach na które się logujemy po SSH.
W działaniu wygląda tak:
$ sudo reboot
W: molly-guard: SSH session detected!
Please type in hostname of the machine to reboot:
i jeśli teraz np. napiszę pitagoras
a sesja otwarta jest na maszynie platon
:
pitagoras
Good thing I asked; I won't reboot platon ...
W: aborting reboot due to 30-query-hostname exiting with code 1.
Jeśli wpisana nazwa maszyny zgadza się, reboot czy shutdown postępuje normalnie. A jeżeli maszyna jest lokalna (nie ma sesji SSH), pytanie się nie pojawia.
Jak to działa
molly-guard
tworzy polecenia /usr/sbin/shutdown
,
/usr/sbin/reboot
, /usr/sbin/poweroff
i /usr/sbin/halt
, które
(przy standardowych ustawieniach ścieżki na Debianie/Ubuntu) wygrywają
ze standardowymi poleceniami (/sbin/shutdown
, /sbin/reboot
itd)
bo /usr/sbin
jest w PATH
przed /sbin
. Zastępniki działają
w prosty sposób:
-
jeżeli działamy w ramach sesji SSH (co jest rozpoznawane po obecności zmiennej
SSH_CONNECTION
) i w interaktywnej konsoli, skrypt zadaje pytanie o nazwę maszyny która jest restartowana i tylko jeśli odpowiedź jest poprawna, wykonuje prawdziwą komendę (tą z/sbin
), -
jeżeli nie ma sesji SSH, od razu wykonuje właściwe polecenie.
Można na to wszystko dodatkowo wpływać, bo sekwencja kroków jest
zapisana w formie pliczków w /etc/molly-guard/run.d
, gdzie
da się w razie potrzeby coś dodać albo zmienić (za powyższe pytanie odpowiada skrypt
/etc/molly-guard/run.d/30-query-hostname
).
Miły, mały drobiazg, który może uratować przed niebezpieczną omyłką.
Atrakcyjny przykład podobnej pomyłki: administrator wyłączył centralny ruter sieci ważnego ISP zamiast swojego roboczego komputera.