Przygotowanie klienta OpenVPN w etapach, które zatrzymują się przy błędzie
Pięć etapów nie pozwala skryptowi przygotowującemu zostawić połowy instalacji: sprawdź dane wejściowe, przygotuj zestaw, zamień atomowo, aktywuj jednego właściciela, zaplanuj wycofanie.
Skrypty przygotowujące, które zgłaszają błąd i działają dalej, są gorsze od skryptów, które nigdy się nie uruchamiają. Konfiguracja klienta dotyka chronionych kluczy, tożsamości na bramie i usługi, która może już obsługiwać ruch. Każdy z tych elementów wymaga warunku zatrzymania, a skrypt musi wiedzieć, do którego etapu doszedł, gdy się zatrzymał.
Traktuj całość jako jedną transakcję z pięcioma punktami kontrolnymi i spraw, by każdy punkt kontrolny sam odmówił kontynuacji.
Popraw dane wejściowe, zanim dotkniesz systemu plików
Zacznij od wyraźnej umowy: jedna tożsamość, jedno źródło profilu, jeden zamierzony właściciel usługi. Sprawdź, że profil istnieje, że certyfikat i klucz, na które wskazuje, są czytelne oraz że katalog docelowy należy do oczekiwanego pakietu. Ścieżka, która się rozwiązuje, nie jest dowodem, że materiał za nią jest kompletny.
Odrzucaj puste zmienne wcześnie. Nieustawiona $DEVICE, która rozwija się do niczego, zamienia install -m 400 $KEY /etc/openvpn/client/ w kopię skierowaną na katalog, a awaria pojawia się później jako usługa, która nie potrafi odczytać swojego klucza.
Złóż zestaw profili w katalogu przygotowawczym
Najpierw zbuduj kompletny zestaw w prywatnym miejscu: profil, CA, certyfikat klienta, klucz i dowolny pomocnik wywoływany przez profil. Kopiuj przez install -m 400 -o root -g root, aby uprawnienia były ustawiane przy tworzeniu, a nie później. Następnie sprawdź odwołania wewnątrz profilu, ponieważ względna linia ca lub key jest rozwiązywana względem katalogu roboczego jednostki, gdy tylko usługa wystartuje. Nic nie powinno być zapisywane w aktywnym katalogu, dopóki cały zestaw się nie zwaliduje.
Zapisz nie-tajny odcisk tego, co wytworzyło to uruchomienie, na przykład sha256sum office.conf obok znacznika wersji. Właśnie ta jedna wartość pozwala ponownemu uruchomieniu odróżnić aktualizację od braku działania.
Zamień atomowo i zachowaj poprzedni zestaw
Przenieś przygotowany zestaw na miejsce jedną operacją tam, gdzie system plików na to pozwala, i zachowaj przejrzany poprzedni zestaw pod nazwą ze znacznikiem czasu. Częściowa kopia, która zostawia nowy profil obok starego klucza, tworzy usługę uwierzytelniającą się złą tożsamością i nie zapisuje niczego użytecznego o przyczynie. Jeśli zamiana nie może być atomowa, uporządkuj przeniesienia tak, aby profil wylądował ostatni.
Gdy cel już istnieje, rozstrzygnij wyraźnie, czy to uruchomienie jest aktualizacją, identycznym powtórzeniem, czy konfliktem z profilem innego urządzenia. Ciche nadpisanie profilu należącego do innej tożsamości to droga, na której dwie maszyny zaczynają dzielić jeden certyfikat. Zamiast tego odrzuć uruchomienie i nazwij kolidującego właściciela.
Aktywuj jednego właściciela i udowodnij to
Wybierz jedną ścieżkę aktywacji, albo instancję systemd, albo NetworkManager, i używaj jej konsekwentnie. Uruchomienie niezarządzanego procesu openvpn obok włączonej jednostki daje dwa tunele, konkurujące aktualizacje DNS i brak jasnej odpowiedzi, na który z nich celuje polecenie zatrzymania. Po aktywacji sprawdź systemctl is-active openvpn-client@office, potem trasę do prefiksu zdalnego, potem resolvectl status dla resolvera zainstalowanego przez tunel. Zakończ, docierając do jednego zasobu, dla którego tunel istnieje.
Działający proces i zielona ikona w zasobniku to fakty o procesie, nie dowód, że tożsamość i polityka ruchu przetrwały przekazanie.
Ponowne uruchomienie i wycofanie to osobne przepływy pracy
Drugie uruchomienie powinno zbiegać się do tych samych przejrzanych plików i tego samego właściciela, a nie tworzyć drugiego konta ani drugiego demona. Wycofanie to własna procedura: zatrzymaj dokładnego właściciela, zarchiwizuj lub usuń profil lokalny zgodnie z polityką i unieważnij tożsamość na bramie. Usunięcie lokalnego pliku klucza nie unieważnia kopii, która już opuściła maszynę.
Zachowaj ścieżkę odzyskiwania, która nie zależy od tunelu, na przykład dostęp do konsoli lub drugą trasę zarządzania. Zmiana w przygotowaniu, która zamyka cię poza maszyną, jest nieudaną zmianą, nawet gdy każdy etap zgłosił sukces.
Skrypt, który warto zachować, to transakcja wokół własności i dowodów. Krótka lista uprzywilejowanych poleceń kopiowania to nie to samo.