Nadaj każdemu kontu VPN własny launcher NetworkManager
Dwa konta na jednej bramie wymagają dwóch nazwanych profili, a nie przepisanej nazwy użytkownika. Skieruj launcher na UUID i pozwól agentowi zebrać sekret.
Dwa konta VPN, jedna brama i ikona pulpitu, która łączy się jako ten, kto użył jej ostatnio. Zwykłą przyczyną jest launcher, który tuż przed połączeniem przepisuje nazwę użytkownika współdzielonego profilu, albo taki, który szuka nazwy wyświetlanej współdzielonej przypadkiem przez oba profile. NetworkManager już rozróżnia profile po UUID, więc ikona może wskazać dokładnie jeden z nich i nie ruszać tożsamości. Czego nie powinna nosić, to hasło.
Launcher to wskaźnik, a nie magazyn poświadczeń.
Znajdź UUID i potwierdź tożsamość
Wypisz zapisane połączenia i odczytaj UUID, identyfikator połączenia oraz nazwę użytkownika przechowywaną przez każdy profil. Zanim cokolwiek utworzysz, potwierdź, który profil należy do którego konta, bo nazwa wyświetlana to etykieta, a nie klucz. Jeśli dwa konta potrzebują różnych bram lub różnych profili, to osobne zadanie konfiguracyjne.
Użyj UUID w launcherze. Wyszukiwanie po nazwie wyświetlanej działa, dopóki ktoś nie zmieni nazwy profilu, a wtedy ikona łączy się jako niewłaściwe konto albo jako nic.
Zapisz wpis pulpitu
Wpis pulpitu potrzebuje typu, nazwy i wiersza wykonywalnego. Polecenie powinno podnieść ten UUID i pozwolić NetworkManagerowi zapytać o sekret, do czego służy nmcli --ask connection up uuid .... Zachowaj Terminal=true, aby monit był widoczny, gdy potrzebny jest sekret. Zastąp symbol zastępczy UUID, który rzeczywiście zaobserwowałeś, i nie dodawaj otoczki powłoki tylko po to, by ukryć monit.
Specyfikacja Desktop Entry definiuje Exec jako program i jego argumenty. To nie jest skrypt powłoki i nie potrzebuje go.
Pozwól agentowi trzymać sekret
Sekrety należą do agenta dla każdego użytkownika, do pęku kluczy albo do interaktywnego monitu. Hasło w Exec jest widoczne na liście procesów, w pliku pulpitu i na każdym zrzucie okna właściwości. Jeśli profil potrzebuje sekretu, pozwól obsługiwanemu monitowi go zebrać, a agentowi zapamiętać go dla tego użytkownika.
--ask jest interaktywne z założenia. To nie przepis na automatyzację bez nadzoru i nie gwarantuje, że każde wyzwanie uwierzytelniania lub wtyczka da się w ogóle oskryptować.
Nie sięgaj po sudo
Uprawnienie do zmiany lub aktywacji połączenia to uprawnienie NetworkManagera nadawane przez jego politykę, a nie przywilej Unix. Uruchomienie launchera z sudo nie daje procesowi pęku kluczy innego użytkownika i nie naprawia odrzucenia przez bramę. Na współdzielonej maszynie sprawdź, które konta lokalne widzą które profile i kto posiada każdy sekret; osobne ikony same nie tworzą izolacji.
Dwa aktywne profile dla tej samej bramy mogą też konkurować o trasy lub naruszać regułę współbieżności. To kwestia polityki, a nie błąd launchera.
Zweryfikuj całe działanie
Aktywuj launcher raz i potwierdź trzy rzeczy: który UUID się podniósł, jaką tożsamość widziała brama i czy monit o sekret pojawił się tam, gdzie się go spodziewałeś. Jeśli połączenie się nie uda, zachowaj pierwszy komunikat błędu. Dodanie hasła do wiersza poleceń, by skrót wyglądał samodzielnie, ukrywa ten błąd i tworzy gorszy problem.
Zapisz UUID i przyporządkowanie kont w notatkach zespołu. Następna osoba, która zmieni profil, musi wiedzieć, która ikona od niego zależy, i właśnie ta notatka nie pozwala, by zmiana nazwy stała się awarią.