W zdaniu „uruchom to w tle” kryją się dwa pytania. Pierwsze: czy ten użytkownik w ogóle może uruchomić proces uprzywilejowany; drugie: czy sesja może trwać, gdy nikt nie pisze w terminalu. Ampersand w powłoce nie odpowiada na żadne, a skrypt przechowujący hasło sudo w zmiennej odpowiada źle na pierwsze i zostawia drugie nietknięte. Rozdziel je, a opcje będzie łatwo porównać.

Porównaj trzech kandydatów pod kątem własności, nie wygody.

Trzy sposoby opuszczenia terminala, trzy różne właściciele

Dopisanie ampersanda do polecenia prosi powłokę o uruchomienie go jako zadania w tle, a zadanie nadal należy do tej powłoki. sudo może zapytać jeszcze przed startem programu, a OpenVPN może potem zapytać o hasło klucza lub logowanie. Uruchomienie w tle polecenia, które oczekuje danych, tworzy proces czekający na terminal, którego nikt nie obserwuje. Terminal zostaje uwolniony; interakcja nie.

To najtańsza opcja i ta, która zawodzi najbardziej myląco, bo pytanie pojawia się w miejscu, które operator już opuścił.

sudo -b nie jest menedżerem poświadczeń

sudo -b uruchamia polecenie w tle z punktu widzenia samego sudo, co brzmi jak brakująca funkcja i nią nie jest. Według podręcznika sudo polecenia interaktywne zwykle zachowują się w tym trybie źle, a kontrola zadań powłoki nie potrafi zarządzać tworzonymi procesami. Przenosi proces, nie dając mu sposobu odpowiadania na pytania. Nic w nim nie dostarcza hasła klucza prywatnego ani logowania do bramy.

Jeśli połączenie wymaga interakcji, rozwiązaniem jest obsługiwany nieinteraktywny układ uwierzytelniania, a nie inny sposób uruchomienia tego samego pytania.

--daemon zmienia program, nie logowanie

--daemon prosi sam OpenVPN o odłączenie po inicjalizacji. Podręcznik wersji 2.6 zauważa, że przekierowanie syslog następuje przy parsowaniu opcji, choć odłączenie następuje później, więc komunikaty mogą przestać pojawiać się w terminalu wcześniej, niż oczekiwano. Cisza po tym punkcie niczego nie dowodzi o tunelu. Dodaj jawny --log lub --log-append aby wyjście trafiło w miejsce, które możesz przeczytać.

Tryb demona usuwa też konsolę na stałe. Chroniony klucz prywatny wymaga w tym trybie askpass , a poświadczenia wpisane z konsoli w połączeniu z opcjami buforowania mogą zostawić późniejsze ponowne uwierzytelnienie bez miejsca na pytanie. Sprawdź model uwierzytelniania wobec zainstalowanej wersji, zanim założysz, że start w tle przetrwa pierwsze odnowienie klucza.

Co daje walidacja sudo, a czego nie

sudo -v waliduje lub odświeża buforowane lokalne poświadczenie, uwierzytelniając, jeśli wymaga tego polityka. Nie uruchamia OpenVPN, nie uwierzytelnia się wobec bramy i nie gwarantuje, że późniejsze polecenie w skrypcie będzie dozwolone. sudo -n oznacza odwrotność: nie pytaj, tylko zawiedź. To czyni lokalny błąd autoryzacji jawnym, co jest przydatne, i nic nie mówi o tym, o co OpenVPN zapyta później.

Żadna z opcji nie jest powodem do przyznania wszystkim poleceń bez hasła ani do przekazania hasła administratora do skryptu.

Preferuj właściciela, którego można obserwować

Dla tunelu należącego do maszyny użyj instancji usługi obsługiwanej przez dystrybucję. Taki właściciel daje start, stop, status i logi, i przeżywa koniec twojej sesji. Złożenie tła powłoki, demonizacji i pętli restartu jedno wokół drugiego tworzy trzech właścicieli jednego tunelu i brak jasnej odpowiedzi, który działa.

Cokolwiek wybierzesz, zweryfikuj zasób, dla którego istnieje tunel. Udane żądanie startu to zdarzenie procesu, a nie dowód działającego połączenia.

Powiązane artykuły