W terminalu pojawia się komunikat o systemd-tty-ask-password-agent, a tunel nie jest podniesiony. Kuszące odczytanie jest takie, że VPN odrzucił hasło i coś teraz czeka na poprawkę. Dokładniej rzecz biorąc, usługa poprosiła systemd o interaktywne dane wejściowe, a żądanie nie zostało jeszcze obsłużone. Która usługa zapytała i jakiego sekretu chce — to dwa pytania, które możesz rozstrzygnąć, zanim cokolwiek wpiszesz.

Kto powinien odpowiedzieć, decydują dwa warunki

Pierwszy warunek to, czy uruchomiłeś tę instancję celowo. Żądanie, które następuje po twoim działaniu, jest twoje do obsłużenia, a to, które pojawia się bez pasującego działania, należy do czegoś innego. Drugi to, czy sekretem jest uwierzytelnianie konta, czy ochrona klucza, bo jedno i drugie mieszka w różnych miejscach i wędruje różnymi ścieżkami kodu. Obie odpowiedzi widać w dzienniku, jeśli spojrzysz przed działaniem.

Gdy obie odpowiedzi są jasne, decyzja jest prosta: odpowiedz przez własną obsługiwaną ścieżkę monitu usługi. Gdy któraś jest niejasna, właściwym krokiem jest zbadanie, a nie wpisywanie hasła w monit, którego nie potrafisz przypisać.

To cała reguła i warto ją wyłożyć przed poleceniami. Wszystko poniżej z niej wynika.

Wypisz żądanie, zanim cokolwiek wpiszesz

Agent potrafi wyliczyć, co czeka, nie odpowiadając na nic. sudo systemd-tty-ask-password-agent --list wypisuje oczekujące żądania, a ten wynik jest dowodem, którego potrzebujesz, aby powiązać monit z jednostką. Przeczytaj go, zanim dasz dane logowania, i trzymaj opisy żądań poza wszelkim publicznym wklejeniem diagnostycznym.

Powiąż listę z operacją, którą rozpocząłeś, i z jednostką, która nią zarządza. Jeśli nic na liście nie pasuje do twojego działania, widziany monit należy do innej usługi i nie tobie go rozwiązywać. Nazwa jednostki na liście jest jedynym pewnym powiązaniem między monitem a usługą.

Nie odpowiadaj na żądanie, którego nie potrafisz przypisać. Kosztem czekania jest opóźnienie, a kosztem odpowiedzi na niewłaściwy monit są dane logowania w złym miejscu.

Jakiego sekretu instancja naprawdę potrzebuje?

auth-user-pass dotyczy uwierzytelniania konta w usłudze VPN, a bez pliku danych logowania udokumentowanym zachowaniem jest pytanie w konsoli. askpass zamiast tego pozyskuje frazę hasła, która odblokowuje chroniony materiał klucza, i robi to, zanim proces przejdzie do tła. To różne sekrety o różnym czasie życia.

Formaty plików też się różnią. Forma konta oczekuje wiersza nazwy użytkownika i wiersza hasła, podczas gdy plik frazy hasła klucza czyta pierwszy wiersz jako swoje hasło. Skopiowanie przepisu na plik danych logowania z drugiej roli zwykle daje kolejny monit zamiast rozwiązania. Plik o niewłaściwym kształcie jest gorszy niż brak pliku, bo awaria przenosi się w miejsce, którego nikt nie obserwuje.

Sprawdź, której dyrektywy używa instancja, zanim zdecydujesz, co wpisać. Nazwa dyrektywy mówi, którego sekretu dotyczy monit.

Co robi --query, czego nie robi --list

--query przetwarza każde oczekujące żądanie na terminalu wywołującym, co jest znacznie szerszym działaniem niż odpowiedź na jeden monit. To nie jest selektor OpenVPN, a na zajętej maszynie może odpowiedzieć na żądania należące do innych jednostek. Tryb obserwacji jest jeszcze szerszy, bo obsługuje żądania na bieżąco, gdy nadchodzą.

Użyj najwęższego mechanizmu, który działa. Dla jednej usługi jej własny przepływ monitu jest węższy niż globalny agent i utrzymuje odpowiedź przypisaną do jednostki, która zapytała.

Zamiana jednorazowego żądania w nienadzorowanego globalnego agenta tylko dlatego, że raz pojawiło się powiadomienie, to sposób, w jaki chwilowa uciążliwość staje się trwałym projektem. Ta sama ostrożność dotyczy wyłączania jednostek powiadomień o haśle na całym hoście.

Zdecyduj, a potem zapisz wybór

W przypadku wdrożenia nienadzorowanego uzgodnij źródło danych logowania, uprawnienia pliku i harmonogram odnowienia z właścicielem połączenia. Interaktywny drugi czynnik może wymagać osoby lub dedykowanej tożsamości usługi. Wyciszenie monitu nie tworzy tego uwierzytelnienia, a usunięcie auth-user-pass psuje tylko usługę, która go potrzebuje.

Po interakcji sprawdź tę samą instancję pod kątem jej następnego zdarzenia i przetestuj prywatny zasób. Jeśli nic nie czeka, wróć do stanu instancji, zamiast uruchamiać każdą jednostkę OpenVPN na hoście.

Powiązane artykuły