VPN komanda radi kao vaš korisnik, lozinka se ne pojavljuje i tunel se podiže. Taj slijed djeluje kao operacija bez privilegija, a obično nije. Mrežne promjene izvodi zaseban servis, a zanimljivo pitanje je šta će taj servis učiniti za pozivaoca kojeg nije provjerio. Brojanje upita za lozinku ne govori vam ništa o toj granici.

Interfejs, mehanizam i provjera

Interfejs prihvata zahtjeve: poveži se, prekini vezu, izaberi profil. Mehanizam posjeduje mrežne operacije: stvaranje interfejsa, promjenu ruta, primjenu filtera. Provjera autorizacije odlučuje smije li ovaj pozivalac tražiti ovu radnju. Ta tri mogu biti raspoređena na izvršnu datoteku, pomoćnik i sistemski servis, a korisnik vidi samo prvo.

Uloge mogu živjeti u jednoj izvršnoj datoteci, u dva procesa ili u klijentu i sistemskom servisu, a komanda koju korisnik vidi rijetko otkriva koja je. Ikona u traci i sistemski demon mogu izgledati kao jedna aplikacija dok rade s vrlo različitim ovlaštenjima. Privilegija u vrijeme instalacije i privilegija u vrijeme zahtjeva također su različite stvari. Instalater koji je radio kao root može ostaviti servis koji sluša kasnije zahtjeve, dugo nakon što je upravitelj paketa završio. Taj servis, a ne komanda koju ste otkucali, posjeduje ovlaštenja.

Delegiranje je uobičajen dizajn

Delegiranje mrežnog rada s privilegijama na servis razumna je arhitektura. Ono obične aplikacije drži bez privilegija i centralizuje operacije koje traže pažnju. Dizajn se isplati samo kad servis također provjeri ko pita i za šta. Bez te provjere to su samo šira vrata.

NetworkManager je konkretan primjer za Linux. Njegov vodič za konfiguraciju objašnjava kako PolicyKit autorizuje zahtjeve koji nisu od root u podrazumijevanom postavljanju. To pokazuje delegiranu autorizaciju u stvarnom proizvodu. To ne dokazuje da svaki komercijalni klijent koristi NetworkManager i ne opisuje put do soketa ni politiku bilo kojeg dobavljača.

Obrazac je delegiranje s politikom iza sebe. Primjer je jedna implementacija tog obrasca, ne univerzalna.

Čitajte granicu, ne upit

Nađite servis, vlasnika njegove konfiguracije i lokalni interfejs koji koristi frontend. Zatim pitajte koji korisnici smiju tražiti koje operacije. Mogućnost da podignete i spustite jedan sačuvani profil nije ista dozvola kao učitavanje konfiguracije koju operator nikada nije pregledao. Razlika je cijelo sigurnosno pitanje.

Počnite s upraviteljem servisa i s vlastitim pogledom klijenta na njegove dozvole. Komande ispod pokazuju radi li demon, šta pozivalac smije tražiti od njega i šta demon izlaže u svojoj radnoj putanji.

systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager

Pitajte i na šta operacija utiče. Stavka menija koja izgleda lično može promijeniti rute i DNS za cijelo računalo, što znači da može poremetiti sesije drugih korisnika. Obim uticaja pripada istom pregledu kao i dozvola i obično odlučuje treba li servisu uža uloga.

Popravite dozvole na podržan način

Učiniti zaštićeni kontrolni soket dostupnim za pisanje svima, ili dodati račun širokoj administrativnoj grupi, uklanja grešku dozvole i stvara veću. Greška je bila jedino što vam je govorilo da ta granica postoji. Koristite dokumentirani proces članstva ili autorizacije, uključujući osvježavanje sesije koje zahtijeva. Članstvo u grupi često važi samo za nove sesije prijave, zbog čega promjena može izgledati da ništa ne radi do sljedeće prijave.

Ako proizvod izlaže užu ulogu za operaciju, dajte joj prednost pred sveobuhvatnom dozvolom. Zapišite izabranu ulogu i njenog vlasnika uz naziv servisa.

Kako izgleda dobra podjela

Obične aplikacije ostaju bez privilegija, servis izvodi samo postavljanje za koje je napravljen, a svaki pozivalac se provjerava prema politici koju neko posjeduje. To je održiv dizajn. On je i revizijski provjerljiv, jer politika ima ime uz sebe. Sve veće od toga zaslužuje pisani izuzetak, a ne tihu promjenu dozvole.

Način neuspjeha je servis koji izvršava svaki zahtjev svakog lokalnog korisnika jer je interfejs udoban. S korisničke strane izgleda isto i nosi mnogo veća ovlaštenja. Testirajte jedan odbijeni zahtjev, ne samo uspješni. Odbijanje koje dolazi iz politike dokaz je da politika postoji.

Povezani članci