Jak uruchomić OpenConnect w tle po interaktywnym logowaniu
Dokończ logowanie na pierwszym planie, a potem oddaj tunel własnemu trybowi tła klienta. Sprawdzenia, które utrzymują go wykrywalnym i zatrzymywalnym.
Kończysz monit MFA, tunel wstaje, a zamknięcie terminala zabiera ze sobą połączenie. To problem nadzoru, nie uwierzytelniania, a OpenConnect ma już przełącznik, który to rozwiązuje. Rozwiązaniem jest pozwolić klientowi odejść w tło po zakończeniu startu, gdy część interaktywna naprawdę się skończy. Dalej następuje ciąg sprawdzeń: przejdź je po kolei i zatrzymaj się na pierwszym, które nie pasuje do twojej bramy.
Potwierdź, czego brama wymaga przy logowaniu
Zanim wpiszesz polecenie, zapisz ścieżkę poświadczeń wymuszaną przez wdrożenie. Sam certyfikat, hasło plus token i rundka w przeglądarce przez dostawcę SAML zachowują się różnie, a tryb tła nie może pominąć żadnego. Opcja zmienia to, co dzieje się po starcie, nigdy w jego trakcie.
Kuszącym obejściem jest automatyzacja monitu. Nakładka, która wpisuje stałą odpowiedź, gdy rozpozna monit o hasło, psuje się w chwili, gdy brama prosi o kod jednorazowy, i zostawia poświadczenie w pliku czytelnym dla innych kont. Jeśli sesję musi zatwierdzić człowiek, zostaw człowieka w procesie.
Uruchom pierwszą sesję na pierwszym planie i przeczytaj wyjście
Połącz się raz normalnie i pozwól wydrukować cały uścisk dłoni. Zapisz używany protokół, ścieżkę certyfikatu lub tokenu, adres tunelu przydzielany przez serwer i każde ostrzeżenie przed przyjęciem połączenia. Ten zapis to twoja linia bazowa i jedyny tani sposób odróżnienia później problemu klienta od zmiany bramy. Zapisz go poza buforem terminala.
Potem powtórz to samo wywołanie z trybem tła i dodanym plikiem PID, na przykład openconnect --background --pid-file /run/openconnect.pid vpn.example.net, zachowując protokół i opcje uwierzytelniania wymagane przez bramę w tym samym wierszu. Podręcznik OpenConnect opisuje tę opcję jako kontynuację w tle po zakończeniu startu i właśnie dlatego faza interaktywna musi skończyć się pierwsza.
Uczyń działający proces wykrywalnym i zatrzymywalnym
Plik PID jest dowodem tylko wtedy, gdy pasuje do żywego procesu. Umieść go w katalogu należącym do konta usługi i porównaj zapisany numer z tabelą procesów, zanim cokolwiek zasygnalizujesz. Restarty i awarie zostawiają plik, a nieaktualny plik to zwykła przyczyna, dla której skrypt zatrzymania zgłasza sukces, gdy tunel nadal działa. Traktuj sprawdzenie jako część procedury zatrzymania, nie jako opcjonalny krok.
Wyślij sygnał do zweryfikowanego PID, a potem potwierdź, że interfejs tunelu naprawdę zniknął, zamiast ufać statusowi wyjścia. Jeśli klient potrzebuje podwyższonych uprawnień do konfiguracji interfejsu, sygnał musi pochodzić z konta, któremu wolno go wysłać.
Nie układaj trybu tła pod nadzorcą
systemd i podobni nadzorcy oczekują, że posiadają uruchomiony proces, dlatego klient, który odchodzi w tło, myli ich. Nadzorca widzi wyjście startera, gdy prawdziwe połączenie trwa, więc logika restartu, raportowanie stanu i limity zatrzymania opisują coś, co już nie jest prawdą. Napisz jednostkę w obsługiwanym układzie pierwszego planu i pozwól nadzorcy wykonać pracę demona.
Zarezerwuj --background dla sesji, które człowiek zaczyna i potem zostawia. Jeśli wymaganiem jest tunel istniejący przed czyimkolwiek logowaniem, brakuje zatwierdzonej tożsamości nieinteraktywnej oraz planu jej odnawiania, a żadna flaga wiersza poleceń nie daje jednego ani drugiego. Dodanie flagi do skryptu startowego daje tunel, który po cichu zawodzi przy pierwszym wygasłym poświadczeniu.
Traktuj ciasteczko sesji jak poświadczenie
OpenConnect dokumentuje osobną fazę uwierzytelniania przez --authenticate, a otrzymany materiał można oddać z --cookie-on-stdin. Ta para istnieje dla pracy integracyjnej, a to, co tworzy, jest tak wrażliwe jak hasło, które je stworzyło.
Trzymaj wartość poza historią powłoki, poza logami i poza każdym zgłoszeniem, które otworzysz. Skrypt przekazania musi też zachować zweryfikowane informacje o punkcie końcowym, które klient otrzymał wraz z ciasteczkiem; jeśli je zgubisz, późniejsze uruchomienie może połączyć się z hostem, którego nigdy nie uwierzytelniłeś, co jest gorsze niż połączenie, które po prostu zawodzi.
Przejdź listę, zanim zamkniesz terminal
Cztery rzeczy powinny być prawdziwe: logowanie interaktywne zakończyło się na pierwszym planie, plik PID wskazuje zweryfikowany proces, kwestia nadzorcy jest rozstrzygnięta w jedną lub drugą stronę, a ciasteczko ma plan przechowywania, który nie jest zwykłym plikiem tekstowym. Gdy wszystkie cztery zachodzą, odejście od terminala jest bezpieczne, a tunel działa dalej.
Jeśli jedna zawiedzie, napraw ją, zanim tkniesz pozostałe, bo reszta sprawdzeń jej nie zrekompensuje. Zachowaj też zapis pierwszego planu z pierwszego uruchomienia: następnym razem, gdy tunel padnie bez ostrzeżenia, właśnie ta linia bazowa oddzieli zmianę po stronie bramy od zmiany po stronie klienta.