Twoje polecenie VPN działa bez uprawnień; usługa nie
Brak prośby o hasło nic nie mówi o tym, kto zmienia trasy. Znajdź usługę, udostępniany przez nią interfejs i politykę, która decyduje, kto może prosić.
Polecenie VPN działa jako twój użytkownik, hasło się nie pojawia, a tunel wstaje. Ta sekwencja wygląda jak operacja bez uprawnień, i zwykle nią nie jest. Zmiany w sieci wykonuje osobna usługa, a ciekawe pytanie brzmi, co ta usługa zrobi dla wywołującego, którego nie zweryfikowała. Liczenie próśb o hasło nic nie mówi o tej granicy.
Interfejs, mechanizm i sprawdzenie
Interfejs przyjmuje żądania: połącz, rozłącz, wybierz profil. Mechanizm posiada operacje sieciowe: tworzenie interfejsów, zmianę tras, stosowanie filtrów. Sprawdzenie autoryzacji decyduje, czy ten wywołujący może prosić o tę czynność. Te trzy mogą być rozłożone na plik binarny, pomocnika i usługę systemową, a użytkownik widzi tylko pierwsze.
Role mogą mieszkać w jednym pliku binarnym, w dwóch procesach albo w kliencie i usłudze systemowej, a polecenie widziane przez użytkownika rzadko zdradza które. Ikona w zasobniku i demon systemowy mogą wyglądać jak jedna aplikacja, choć działają z bardzo różnymi uprawnieniami. Uprawnienie w momencie instalacji i uprawnienie w momencie żądania to także różne rzeczy. Instalator, który działał jako root, może zostawić usługę nasłuchującą późniejszych żądań, długo po zakończeniu menedżera pakietów. To ta usługa, a nie wpisane przez ciebie polecenie, ma uprawnienia.
Delegowanie to normalny projekt
Delegowanie uprzywilejowanej pracy sieciowej do usługi to rozsądna architektura. Utrzymuje zwykłe aplikacje bez uprawnień i centralizuje operacje wymagające staranności. Projekt się opłaca tylko wtedy, gdy usługa sprawdza także, kto pyta i po co. Bez tego sprawdzenia to tylko szersze drzwi.
NetworkManager to konkretny przykład na Linuksie. Jego przewodnik po konfiguracji wyjaśnia, jak PolicyKit autoryzuje żądania nie od root w domyślnym ustawieniu. To pokazuje delegowaną autoryzację w realnym produkcie. Nie dowodzi, że każdy komercyjny klient używa NetworkManagera, i nie opisuje ścieżki gniazda ani polityki żadnego konkretnego dostawcy.
Wzorzec to delegowanie z polityką w tle. Przykład jest jedną implementacją tego wzorca, nie uniwersalną.
Czytaj granicę, nie żądanie
Znajdź usługę, właściciela jej konfiguracji i lokalny interfejs, którego używa frontend. Potem zapytaj, którzy użytkownicy mogą prosić o które operacje. Możliwość podniesienia i opuszczenia jednego zapisanego profilu to nie to samo pozwolenie co wczytanie konfiguracji, której operator nigdy nie przejrzał. Różnica to całe pytanie o bezpieczeństwo.
Zacznij od menedżera usług i od własnego spojrzenia klienta na jego uprawnienia. Polecenia poniżej pokazują, czy demon działa, o co wywołujący może go prosić i co demon udostępnia w swoim katalogu uruchomieniowym.
systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager
Zapytaj też, na co wpływa operacja. Pozycja menu, która wygląda osobiście, może zmienić trasy i DNS dla całej maszyny, co oznacza, że może zakłócić sesje innych użytkowników. Zasięg wpływu należy do tego samego przeglądu co uprawnienie, i zwykle to on decyduje, czy usługa potrzebuje węższej roli.
Naprawiaj uprawnienia w obsługiwany sposób
Uczynienie chronionego gniazda sterującego zapisywalnym dla wszystkich albo dodanie konta do szerokiej grupy administracyjnej usuwa błąd uprawnień i tworzy większy. Błąd był jedyną rzeczą, która mówiła ci, że ta granica istnieje. Użyj udokumentowanego procesu członkostwa lub autoryzacji, łącznie z wymaganym odświeżeniem sesji. Członkostwo w grupie często dotyczy tylko nowych sesji logowania, dlatego zmiana może wyglądać na nic nie robiącą aż do następnego logowania.
Jeśli produkt udostępnia węższą rolę dla operacji, preferuj ją zamiast ogólnego przyznania. Zapisz wybraną rolę i jej właściciela obok nazwy usługi.
Jak wygląda dobry podział
Zwykłe aplikacje pozostają bez uprawnień, usługa wykonuje tylko tę konfigurację, do której została zaprojektowana, a każdy wywołujący jest sprawdzany wobec polityki, którą ktoś posiada. To obronny projekt. Jest też audytowalny, bo polityka ma przypisaną nazwę. Cokolwiek większego zasługuje na pisemny wyjątek, a nie cichą zmianę uprawnień.
Trybem awarii jest usługa, która wykonuje dowolne żądanie dowolnego lokalnego użytkownika, bo interfejs jest wygodny. Z perspektywy użytkownika wygląda to identycznie, a niesie znacznie większe uprawnienia. Przetestuj jedno odrzucone żądanie, nie tylko udane. Odmowa pochodząca z polityki jest dowodem, że polityka istnieje.