Twój skrypt uruchamia VPN, ale go nie przygotowuje
Polecenie startu potrzebuje połączenia, które już istnieje i jest zatwierdzone. Oddziel przygotowanie od sterowania sesją, inaczej skrypt działa tylko na twoim Macu.
Piszesz skrypt, który uruchamia scutil --nc start z nazwą połączenia, działa na twoim Macu i zawodzi na każdym świeżo zainstalowanym komputerze w biurze. Skrypt nie jest zepsuty. Prosi się go o coś, czego nigdy nie potrafił: uruchomienie istniejącego połączenia to nie ta sama operacja co utworzenie nowego.
Przygotowanie i sterowanie sesją to dwie prace z dwoma właścicielami, a przepływ pracy, który zakłada inaczej, przejdzie każdy test na komputerze, na którym go napisano.
Z czym polecenie startu naprawdę rozmawia
Polecenie sterowania sesją zwraca się do konfiguracji, która już istnieje i jest już zatwierdzona. Prosi system o podniesienie tego nazwanego połączenia, używając zapisanych wcześniej ustawień serwera, odwołań do tożsamości i zasady. Jeśli nigdy ich nie zainstalowano, nie ma czego uruchamiać.
Dlatego błąd pojawia się na nowym sprzęcie, a nie na laptopie administratora. Laptop został przygotowany miesiące temu przez osobę, która od tego czasu o tym zapomniała. Pomyśl o poleceniu startu jak o dzwonku do drzwi, do którego ktoś w zeszłym kwartale doprowadził przewody. Naciśnięcie go to nie to samo co położenie instalacji.
Trzej właściciele konfiguracji VPN
Profil zarządzany przez organizację pochodzi z zarządzania urządzeniami. Profil niesie adresy serwera, układ uwierzytelniania i zasady wymagane przez organizację, a administrator VPN to osoba, która je dostarcza. Skrypt nie powinien odtwarzać tych ustawień z nazwy wyświetlanej znalezionej na liście.
Natywna osobista konfiguracja VPN jest tworzona przez Network Extension API firmy Apple, który obejmuje wbudowane protokoły IPsec i IKEv2. To interfejs aplikacji z krokiem zapisu i zgodą użytkownika, a nie polecenie powłoki, które po cichu tworzy dowolny typ tunelu dostarczany przez dostawcę.
Klient innej firmy to trzeci przypadek z własnym formatem importu, własnym narzędziem zarządzania i często własnym uprzywilejowanym pomocnikiem. Jego sesja należy do procesu tego dostawcy. Znalezienie usługi systemowej o podobnej nazwie nie jest dowodem, że polecenie systemowe steruje tunelem, a przyjęcie tego założenia daje skrypty, które wydają się działać, dopóki dostawca nie zaktualizuje klienta.
Natywne przygotowanie ma zapis i zgodę
Model Apple to wczytaj, zmień, zapisz. Aplikacja wczytuje istniejące preferencje przed pierwszym zapisem po uruchomieniu, zmienia konfigurację, a następnie ją zapisuje. Zapis zgłasza błąd, gdy nie może utrwalić danych, a ignorowanie tego wyniku zamienia błąd przygotowania w błąd połączenia trzy kroki później.
Pierwszy zapis wymaga też zgody użytkownika na aplikację. To celowa granica bezpieczeństwa i oznacza, że pierwsze uruchomienie na nowym Macu jest interaktywne, nawet gdy każde późniejsze połączenie i rozłączenie można zautomatyzować. Zaplanuj pierwsze uruchomienie jako zadanie ludzkie z obecnym człowiekiem. Zautomatyzuj drugie uruchomienie i kolejne, i napisz to w runbooku, żeby nikt nie obiecywał niemożliwego. Plan wdrożenia, który obiecuje w pełni bezobsługowe pierwsze uruchomienie, obiecuje coś, czego platforma nie oferuje.
Apple zaleca też sprawdzenie zgodności serwera profilem konfiguracji, zanim zaufa się API. Wykonanie tego sprawdzenia najpierw oddziela «serwer nie zaakceptuje tego klienta» od «klient nigdy nie zapisał ustawień», a to różne zgłoszenia dla różnych zespołów.
Co może zakładać powtarzalne polecenie startu
Po przygotowaniu skrypt może bezpiecznie kierować się na istniejące połączenie przez interfejs jego właściciela. Przekaż mu stabilną tożsamość połączenia oraz żądaną akcję, i nic więcej. Nie powinien czytać zgadywanej ścieżki preferencji ani zakładać, że nazwa w menu jest unikalna w całym systemie.
Dla połączeń natywnych nazwane żądanie sesji, takie jak scutil --nc start, jest operacją sterującą. Nie instaluje ustawień serwera, nie importuje poświadczeń i nie wykonuje autoryzacji pierwszego zapisu. Traktuj je jako ostatni krok łańcucha, nigdy jako cały łańcuch.
Trzymaj sekrety poza argumentami wiersza poleceń i poza zwykłym wyjściem diagnostycznym. Niezależnie od tego, jaki mechanizm tożsamości wybrało wdrożenie, to na nim polecenie startu ma polegać, a hasło wklejone do historii powłoki jest ustaleniem w każdym przeglądzie.
Dwie kontrole odbiorcze
Pierwsza kontrola to przygotowanie: weź świeżo zainstalowanego Maca i udowodnij, że konfiguracja istnieje, należy do właściwego administratora i jest w pełni zatwierdzona. Zrób to przed testowaniem łączności, bo test połączenia na nieprzygotowanym komputerze niczego nie dowodzi o skrypcie.
Druga kontrola to sesja: połącz się, dotrzyj do autoryzowanego zasobu i rozłącz się czysto. Każdy błąd ma teraz właściciela, i to jest praktyczna korzyść z rozdzielenia obu prac. Brakujący profil to problem dostarczenia, błąd zapisu to problem zgody, odrzucone logowanie to problem uwierzytelniania, a przekroczenie czasu po udanym starcie to warstwa sesji. Żaden z nich nie jest «skrypt jest zepsuty».