Vaša VPN naredba radi bez privilegija; servis ne
Odsutnost upita za lozinku ne govori ništa o tome ko mijenja rute. Nađite servis, sučelje koje izlaže i politiku koja odlučuje tko smije tražiti.
VPN naredba 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 što će taj servis učiniti za pozivatelja kojeg nije provjerio. Brojanje upita za lozinku ne govori vam ništa o toj granici.
Sučelje, mehanizam i provjera
Sučelje prihvaća zahtjeve: poveži se, prekini vezu, izaberi profil. Mehanizam posjeduje mrežne operacije: stvaranje sučelja, promjenu ruta, primjenu filtara. Provjera autorizacije odlučuje smije li ovaj pozivatelj 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 naredba 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 naredba 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 centralizira operacije koje traže pažnju. Dizajn se isplati samo kad servis također provjeri ko pita i za što. Bez te provjere to su samo šira vrata.
NetworkManager je konkretan primjer za Linux. Njegov vodič za konfiguraciju objašnjava kako PolicyKit autorizira 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 socketa 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 lokalno sučelje koje koristi frontend. Zatim pitajte koji korisnici smiju tražiti koje operacije. Mogućnost da podignete i spustite jedan spremljeni 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. Naredbe ispod pokazuju radi li demon, što pozivatelj smije tražiti od njega i što demon izlaže u svojoj radnoj putanji.
systemctl status NetworkManager
nmcli general permissions
ls -l /run/NetworkManager
Pitajte i na što operacija utječe. Stavka izbornika koja izgleda osobno može promijeniti rute i DNS za cijelo računalo, što znači da može poremetiti sesije drugih korisnika. Opseg utjecaja 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 socket 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 vrijedi 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 odabranu ulogu i njezina vlasnika uz naziv servisa.
Kako izgleda dobra podjela
Obične aplikacije ostaju bez privilegija, servis izvodi samo postavljanje za koje je napravljen, a svaki pozivatelj provjerava se prema politici koju netko 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 sučelje udobno. 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.