Comanda ta VPN rulează fără privilegii; serviciul nu
Absența unei cereri de parolă nu spune nimic despre cine schimbă rutele. Găsește serviciul, interfața pe care o expune și politica ce decide care apelanți pot cere.
Comanda VPN rulează ca utilizatorul tău, nu apare nicio parolă și tunelul se ridică. Acea secvență pare o operație fără privilegii, și de obicei nu este. Un serviciu separat face modificările de rețea, iar întrebarea interesantă este ce va face acel serviciu pentru un apelant pe care nu l-a verificat. Numărarea cererilor de parolă nu îți spune nimic despre acea graniță.
Interfața, mecanismul și verificarea
Interfața acceptă cereri: conectare, deconectare, alegerea unui profil. Mecanismul deține operațiile de rețea: crearea interfețelor, schimbarea rutelor, aplicarea filtrelor. Verificarea autorizării decide dacă acest apelant poate cere această acțiune. Aceste trei pot fi împărțite între un binar, un ajutor și un serviciu de sistem, iar utilizatorul vede doar primul.
Rolurile pot locui într-un singur binar, în două procese sau într-un client și un serviciu de sistem, iar comanda văzută de utilizator rareori dezvăluie care. O pictogramă din zona de notificare și un demon de sistem pot părea o singură aplicație, deși rulează cu autoritate foarte diferită. Privilegiul la instalare și privilegiul la cerere sunt, de asemenea, lucruri diferite. Un instalator care a rulat ca root poate lăsa un serviciu care ascultă cereri ulterioare, mult după ce managerul de pachete a terminat. Acest serviciu, nu comanda pe care ai scris-o, deține autoritatea.
Delegarea este proiectul normal
Delegarea muncii de rețea privilegiate către un serviciu este arhitectura rezonabilă. Menține aplicațiile obișnuite fără privilegii și centralizează operațiile care cer grijă. Proiectul merită doar când serviciul verifică și cine cere și pentru ce. Fără acea verificare este doar o ușă mai largă.
NetworkManager este exemplul concret pe Linux. Ghidul său de configurare explică modul în care PolicyKit autorizează cererile care nu sunt de la root în configurația implicită. Asta arată autorizare delegată într-un produs real. Nu dovedește că fiecare client comercial folosește NetworkManager și nu descrie calea socketului sau politica vreunui furnizor anume.
Tiparul este delegare cu o politică în spate. Exemplul este o implementare a acelui tipar, nu una universală.
Citește granița, nu cererea
Găsește serviciul, proprietarul configurației sale și interfața locală pe care o folosește frontendul. Apoi întreabă ce utilizatori pot cere ce operații. A putea ridica și coborî un profil salvat nu este aceeași permisiune ca încărcarea unei configurații pe care operatorul nu a revizuit-o niciodată. Diferența este toată întrebarea de securitate.
Începe cu managerul de servicii și cu viziunea clientului asupra propriilor permisiuni. Comenzile de mai jos arată dacă demonul rulează, ce poate apelantul să îi ceară și ce expune demonul în directorul său de execuție.
systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager
Întreabă și asupra a ce acționează operația. Un element de meniu care pare personal poate schimba rutele și DNS-ul pentru întreaga mașină, ceea ce înseamnă că poate perturba sesiunile altor utilizatori. Raza de impact intră în aceeași analiză ca permisiunea și de obicei ea decide dacă serviciul are nevoie de un rol mai îngust.
Remediază permisiunile în modul acceptat
A face un socket de control protejat scriibil de către toți, sau a adăuga un cont la un grup administrativ larg, înlătură o eroare de permisiune și creează una mai mare. Eroarea era singurul lucru care îți spunea că acea graniță există. Folosește procesul documentat de apartenență sau autorizare, inclusiv reîmprospătarea sesiunii pe care o cere. Apartenența la grup se aplică adesea doar sesiunilor noi de conectare, motiv pentru care o modificare poate părea că nu face nimic până la următoarea conectare.
Dacă produsul expune un rol mai îngust pentru operație, preferă-l unei acordări generale. Scrie rolul ales și proprietarul lui lângă numele serviciului.
Cum arată o separare bună
Aplicațiile obișnuite rămân fără privilegii, serviciul execută doar pregătirea pentru care a fost proiectat, iar fiecare apelant este verificat față de o politică pe care cineva o deține. Este un proiect defensabil. Este și auditabil, pentru că politica are un nume atașat. Orice mai mare merită o excepție scrisă, nu o schimbare silențioasă de permisiuni.
Modul de eșec este un serviciu care execută orice cerere de la orice utilizator local pentru că interfața este comodă. Din partea utilizatorului pare identic și poartă o autoritate mult mai mare. Testează o cerere refuzată, nu doar pe cea reușită. Un refuz care vine din politică este dovada că politica există.