Béton brut

molly-guard i kontrolowane wyburzania

2022-12-31

Jest druga w nocy i nadal coś dłubiecie. Może wypiliście trzy kolejki dla kurażu. Prawdopodobnie jesteście zalogowani na cztery serwery. Pomiędzy próbą rozszyfrowania niejasnych notatek, przełączaniem się między panelami tmuxa i ogólną gonitwą myśli postanawiacie, że starczy już tej walki i wpisujecie sudo halt.

Connection to production-00 closed by remote host

Żółć podchodzi wam do gardła i to nie przez czwartą kolejkę wypitą przed końcem pierwszego paragrafu. To nie wasz laptop się wyłączył, byliście zalogowani na coś produkcyjnego, ważnego, najpewniej trudnego lub czasochłonnego do podniesienia i to coś właśnie parkuje i odpina się od sieci, żadne rzucone za wysłanymi pakietami bluźnierstwo nie zatrzyma tego procesu.

Jestem niekwestionowanym królem moich serwerów i jak każdy król domagam się kompletnej władzy i zerowej odpowiedzialności za podjęte decyzje, po kolejnej takiej pomyłce postanowiłem jednak poszukać jakiegoś rozwiązania, lękając się komentarzy rozmaitych stańczyków. Okazało się, że wystarczy zainstalować molly-guard i problem sam się rozwiązuje. Molly-guard nadpisuje standardowe destrukcyjne polecenia typu halt czy reboot i wymaga od operatora wpisania nazwy hosta na którym wydaje mu się, że je wykonuje. Ta chwila kontaktu z rzeczywistością wystarczy żeby powstrzymać moją ciężką, morderczą, dłoń.

Nieudana autoryzacja z molly-guard

Życie toczyłoby się dalej normalnie, gdyby nie moja patologiczna chęć do „ulepszania” mojej domowej rupieciarni. Zadecydowałem, że przywrócę do łask, przesuniętą wcześniej do demobilu, RPi3. Był tylko jeden problem: deficyt kabli zasilających. Jako zaprawiony partyzant wymyśliłem, że mogę zasilać RPi3 z portu USB RPi4!1 Jak wszystkie dobre technologiczne rozwiązania, przyszło to z przeciwwagą nowo powstałego problemu. Mianowicie zatrzymanie RPi4 odcina zasilanie do RPi3, która mogła robić coś bardzo ważnego.

Potrzebowałem „można teraz bezpiecznie wyłączyć komputer” dla nowego tysiąclecia.

I tak zawróciłem do molly-guard, szybka lektura manpage wyjaśniła mi, że warunkiem do wykonania polecenia chronionego przez ten program jest poprawne odpalenie wszystkich skryptów znajdujących się w /etc/molly-guard/run.d. Dodałem więc 35-calmyotits zawierający tylko jedną linię z exit o niezerowej wartości (równoważnik „ten skrypt się nie wykonał”), napisałem sudo halt i zgodnie z instrukcją procedura została przerwana.

Użyłem więc tej metody do „kontrolowanego wyburzenia” obu komputerów. Kiedy RPi4 dostaje halt, molly-guard wysyła halt do RPi3, a następnie wchodzi w fazę oczekiwania na zniknięcie ofiary z sieci. Następnie zamyka się sama.

Uwielbiam technologię, dzięki dekadom doświadczenia mogę rozwiązać prawie wszystkie spowodowane przeze mnie problemy! Powinienem odsunąć lodówkę, wymienić zasilacz na taki z dwoma portami, otworzyć szufladę z kablami, zakląć nad panującym tam burdelem, obiecać sobie, że kiedyś to sprzątnę, odnaleźć potrzebny kabel, dowiedzieć się że jest za krótki, odnaleźć odpowiednio długi potrzebny kabel, przesunąć lodówkę na miejsce, jak normalny człowiek.

#!/bin/bash

timeout=10 # liczba powtórzeń
result=0 # zainicjalzujemy rezultat PING-nięcia
echo "Sending halt to 3pi"

ssh emil@3pi sudo halt > /dev/null

while [ $result = 0 ]; do
        ping -c 1 3pi > /dev/null
        result=$?
        echo "Going $timeout"
        sleep 2
        ((timeout=timeout-1))
        if [ $timeout = 0 ]; then
                echo "Can't confirm that 3pi halted"
                exit 69
        fi
done

echo "3pi calmed down"
exit 0

I już!

RPi4 wyłącza RPi3

Z okazji 2023 życzę Wam dużo mniej bezsensu w życiu.

  1. Tak, wiem, że to za małe natężenie dla optymalnego działania, ale nadal działa™