Geben Sie jedem VPN-Konto einen eigenen NetworkManager-Starter
Zwei Konten an einem Gateway brauchen zwei benannte Profile, keinen umgeschriebenen Benutzernamen. Richten Sie den Starter auf eine UUID und lassen Sie den Agenten das Geheimnis einsammeln.
Zwei VPN-Konten, ein Gateway und ein Desktop-Symbol, das sich als derjenige verbindet, der es zuletzt benutzt hat. Die übliche Ursache ist ein Starter, der unmittelbar vor dem Verbinden den Benutzernamen eines gemeinsamen Profils umschreibt, oder einer, der einen Anzeigenamen nachschlägt, den beide Profile zufällig teilen. NetworkManager unterscheidet Profile bereits anhand der UUID, also kann das Symbol genau eines davon benennen und die Identität in Ruhe lassen. Was es nicht tragen sollte, ist das Passwort.
Ein Starter ist ein Zeiger, kein Speicher für Zugangsdaten.
UUID ermitteln und Identität bestätigen
Listen Sie die gespeicherten Verbindungen auf und lesen Sie die UUID, die Verbindungs-ID und den Benutzernamen, den jedes Profil speichert. Bestätigen Sie, welches Profil zu welchem Konto gehört, bevor Sie etwas anlegen, denn ein Anzeigename ist eine Bezeichnung und kein Schlüssel. Wenn die beiden Konten unterschiedliche Gateways oder unterschiedliche Profile brauchen, ist das eine eigene Konfigurationsaufgabe.
Verwenden Sie die UUID im Starter. Eine Suche nach dem Anzeigenamen funktioniert, bis jemand ein Profil umbenennt, und dann verbindet sich das Symbol als das falsche Konto oder als gar nichts.
Den Desktop-Eintrag schreiben
Ein Desktop-Eintrag braucht einen Typ, einen Namen und eine ausführbare Zeile. Der Befehl sollte diese UUID hochfahren und NetworkManager nach dem Geheimnis fragen lassen, wofür nmcli --ask connection up uuid ... gedacht ist. Behalten Sie Terminal=true, damit die Abfrage sichtbar ist, wenn ein Geheimnis nötig ist. Ersetzen Sie den Platzhalter durch die UUID, die Sie tatsächlich beobachtet haben, und fügen Sie keinen Shell-Wrapper hinzu, nur um die Abfrage zu verstecken.
Die Spezifikation Desktop Entry definiert Exec als das Programm und seine Argumente. Es ist kein Shell-Skript und braucht keines.
Den Agenten das Geheimnis halten lassen
Geheimnisse gehören zum Agenten je Benutzer, zum Schlüsselbund oder zu einer interaktiven Abfrage. Ein Passwort in Exec ist in der Prozessliste, in der Desktop-Datei und auf jedem Screenshot des Eigenschaften-Dialogs sichtbar. Wenn das Profil ein Geheimnis braucht, lassen Sie die unterstützte Abfrage es einsammeln und den Agenten es für diesen Benutzer merken.
--ask ist von Entwurf wegen interaktiv. Es ist kein Rezept für unbeaufsichtigte Automatisierung und garantiert nicht, dass jede Authentifizierungsabfrage oder jedes Plugin überhaupt skriptbar ist.
Greifen Sie nicht zu sudo
Die Berechtigung, eine Verbindung zu ändern oder zu aktivieren, ist eine NetworkManager-Berechtigung, die über seine Richtlinie erteilt wird, kein Unix-Recht. Den Starter mit sudo laufen zu lassen gibt dem Prozess nicht den Schlüsselbund eines anderen Benutzers und behebt keine Ablehnung durch das Gateway. Prüfen Sie auf einer geteilten Maschine, welche lokalen Konten welche Profile sehen und wem welches Geheimnis gehört; getrennte Symbole schaffen für sich genommen keine Isolation.
Zwei aktive Profile für dasselbe Gateway können auch um Routen konkurrieren oder eine Nebenläufigkeitsregel verletzen. Das ist eine Richtlinienfrage und kein Fehler des Starters.
Die gesamte Aktion überprüfen
Aktivieren Sie den Starter einmal und bestätigen Sie drei Dinge: welche UUID hochkam, welche Identität das Gateway sah und ob eine Geheimnisabfrage dort erschien, wo Sie sie erwartet hatten. Wenn die Verbindung scheitert, behalten Sie die erste Fehlermeldung. Das Passwort in die Befehlszeile zu schreiben, damit die Verknüpfung eigenständig aussieht, verdeckt diesen Fehler und schafft ein schlimmeres Problem.
Schreiben Sie die UUID und die Kontozuordnung in die Teamnotizen. Die nächste Person, die ein Profil ändert, muss wissen, welches Symbol davon abhängt, und genau diese Notiz verhindert, dass eine Umbenennung zum Ausfall wird.