Nie pozwól NetworkManagerowi pokazywać zapisanego hasła VPN
Pytaj za każdym razem, przekaż je do pęku kluczy albo trzymaj plik dostępny tylko dla root. Każdy wybór wiąże się z inną ekspozycją, a flaga hasła powinna do niego pasować.
NetworkManager może przechowywać hasło VPN, aby połączenie wstawało bez czyjegokolwiek wpisywania, i może ponownie pokazać tę wartość w edytorze lub przez nmcli --show-secrets. Dostępne są trzy modele własności, a zachowanie przy wyświetlaniu jest tylko objawem tego, który wybrano. Najpierw wybierz model, a potem ustaw pasującą do niego flagę, zamiast ukrywać pole tekstem zastępczym, który zdezorientuje następną osobę.
Trzy modele własności
Pierwszy model pyta za każdym razem. Nic nie jest zapisywane, sekret istnieje tylko na czas aktywacji, a każdy, kto uruchamia połączenie, musi znać hasło. To najmniej wygodna opcja i najłatwiejsza do obrony.
Drugi przekazuje sekret do pęku kluczy należącego do użytkownika. Agent odblokowuje się przy starcie sesji i dostarcza wartość na żądanie, co trzyma ją poza plikiem połączenia, ale wiąże połączenie z sesją tego użytkownika. Wynikają z tego dwa warunki: agent musi działać i musi być odblokowany.
Trzeci przechowuje chronione dane uwierzytelniające dla połączenia systemowego. Przetrwa restarty i działa, zanim ktokolwiek się zaloguje, a w zamian wartość leży na dysku chroniona uprawnieniami pliku, a nie szyfrowaniem.
Każdy model jest rozsądny w odpowiednim kontekście. Błędem jest ich mieszanie, i tak laptop kończy z sekretem w dwóch miejscach i bez jasnej odpowiedzi, który jest nadrzędny. Zapisz, którego modelu używa profil. Jedna linia w podręczniku zespołu oszczędza następnej osobie wymyślania czwartego miejsca do sprawdzenia.
Przeczytaj bieżący stan, zanim go zmienisz
Spójrz na profil i na stan sekretu jako użytkownik zarządzający połączeniem. Drugie polecenie mówi, czy wartość jest naprawdę czytelna.
nmcli connection show "Office VPN"
nmcli --show-secrets connection show "Office VPN"
sudo stat -c '%U %a %n' /etc/NetworkManager/system-connections/*.nmconnection
Plik klucza w tym katalogu zwykle należy do roota z trybem 600. To trzyma zwykłych użytkowników na zewnątrz i nie trzyma na zewnątrz roota, co ma znaczenie, gdy ta sama maszyna jest współdzielona lub gdy kopia zapasowa działa jako root.
Uprawnienia pliku to granica, a nie szyfrowanie. Kto może przeczytać plik jako root, ma hasło w czystym tekście. To akceptowalna wymiana dla serwera bez nadzoru i zła dla współdzielonej stacji roboczej. Jednorazowy zapis zapobiega długiej kłótni o to, czy wartość jest chroniona.
Co robi każda wartość flagi
Sekret VPN ma właściwość flags, a wartości nie są intuicyjne wyłącznie z liczb.
| Value | Meaning | Practical effect |
|---|---|---|
| 0 | No special flag | Secret is typically saved with the connection |
| 1 | Agent-owned | A keyring or secret agent supplies it |
| 2 | Not saved | Prompted at each activation |
| 4 | Not required | Connection proceeds without asking |
Rzeczywiste zachowanie zależy też od wtyczki i od tego, czy działa agent, więc traktuj tabelę jako umowę, a obserwowane zachowanie jako to, co weryfikujesz. Wartość, która działa na jednym pulpicie, może zachowywać się inaczej na serwerze bez sesji. Właśnie w tej luce żyje większość mylących zgłoszeń.
Ustaw właściwość jawnie, zamiast usuwać linię i mieć nadzieję. Brakująca flaga nie jest polityką, a następna aktualizacja pakietu może ją wypełnić czymś, czego nie zamierzałeś.
Dopasuj model do momentu, w którym połączenie się zaczyna
Jeśli połączenie startuje tylko wtedy, gdy użytkownik jest zalogowany, własność agenta pasuje i trzyma sekret poza plikiem. Jeśli startuje przy rozruchu, zanim istnieje jakakolwiek sesja, agent ci nie pomoże.
To cała decyzja dla większości maszyn. Wyjaśnia też klasę mylących zgłoszeń, w których połączenie działa interaktywnie i zawodzi po restarcie. Flaga nigdy się nie zmieniła; zmienił się kontekst.
W przypadku bez nadzoru praktyczną odpowiedzią jest ograniczony plik należący do roota lub zatwierdzone źródło danych uwierzytelniających. Trzymaj go poza profilem połączenia, jeśli ten profil kiedykolwiek zostanie wyeksportowany lub skopiowany na inną maszynę.
Jeśli wartość była już widoczna, wymień ją
Zmiana flagi nie dotyka samego hasła. Wartość, która pojawiła się na zrzucie ekranu, w historii powłoki, w pakiecie wysłanym do pomocy technicznej lub w pliku, który mogli otworzyć inni użytkownicy, należy uznać za ujawnioną.
Zmień ją na serwerze, potem napraw klienta i zakończ każdą sesję, która uwierzytelniła się starym hasłem. Usunięcie lokalnego połączenia niczego nie odwołuje po drugiej stronie, i właśnie to ludzie pomijają.
Potem przestań umieszczać hasło w wierszu poleceń. Trafia do historii powłoki i może pojawić się na liście procesów; użyj interaktywnego monitu albo agenta.
Zweryfikuj, łącząc się ponownie
Powtórz polecenie, które pokazało sekret, i potwierdź, że pole nie jest już wypisywane. Następnie rozłącz się i połącz ponownie, a jeśli połączenie startuje automatycznie, zrestartuj system, bo ciekawa awaria pojawia się dopiero przy zmianie kontekstu sesji.
Jeśli sekret nadal się pojawia, dostarcza go inny profil lub inny agent. Sprawdź aktywne połączenie i pęk kluczy, zamiast usuwać pliki, aż objaw się przesunie.