Dodatak se još preporučuje u raspravama koje su starije od trenutnih verzija, a na serveru kompajliranom jučer pada pri učitavanju. To nije greška u konfiguraciji koju možete ispraviti putanjom. Dodatak i skriptna kuka rješavaju isti problem na različitim slojevima, a prelazak s jednog na drugo mijenja šta treba instalirati, šta radi sa serverskim privilegijama i šta vam neuspješna prijava zapravo govori.

Mit: dodatak je podržani put

Dodatak je zajednički objekt učitan u proces OpenVPN-a, pa mora odgovarati interfejsu koji taj proces izlaže. Verzije se mijenjaju, pakovanje se mijenja, a biblioteka kompajlirana za stariji interfejs jednostavno odbija da se učita. Ništa u serverskoj konfiguraciji ne može premostiti taj jaz, zato savjet "samo instalirajte radiusplugin" završava serverom koji se ne pokreće.

Skriptna kuka stoji izvan procesa. OpenVPN pokreće program, predaje mu akreditive i čita natrag presudu. To razdvajanje joj omogućava da preživi nadogradnje, a ujedno je čini vašom odgovornošću na način na koji dodatak nikada nije bio.

Nijedan pristup nije sigurniji po konstrukciji. Jedan izvršava strani kod unutar daemona; drugi izvršava vaš kod pored njega s akreditivima u ruci. Pravo pitanje je koji od tih dvaju rizika zapravo možete voditi.

Šta je dodatak držao zajedno

Dodatak je nosio vlastitu konfiguracijsku datoteku s RADIUS hostom, zajedničkom tajnom, brojem ponovnih pokušaja i vremenskim ograničenjem, a serverska konfiguracija ga je referencirala jednim redom. Obrada akreditiva ostajala je unutar serverskog procesa, što je značilo da lozinka nikada nije prešla granicu procesa koju je administrator morao osigurati.

Cijena je bila povezanost. Svaka nadogradnja OpenVPN-a riskirala je nekompatibilan interfejs, a svaka distribucija koja ponovno gradi paket riskirala je biblioteku koja više ne odgovara. Kad se to dogodi, kvar je glasan i trenutan, i to je jedina milost dizajna.

Ako se takav dodatak još učitava na vašoj verziji, može biti manja operativna površina. Potvrdite za koji je interfejs napravljen, držite ga prikovanim za verziju koju ste testirali i svaku nadogradnju tretirajte kao promjenu koja zahtijeva puni test prijave, a ne rutinsko ažuriranje paketa.

Čemu skriptna kuka zapravo vjeruje

Kuka se konfigurira s auth-user-pass-verify i mehanizmom dostave: varijablama okoline ili privremenom datotekom. U obliku s okolinom OpenVPN zahtijeva script-security 3, dokumentirani nivo koji dopušta izlaganje lozinke skriptama. Taj nivo je namjerno slabljenje zadanog, i treba ga tretirati kao odobrenje s priloženim opravdanjem.

Sve čega se skripta dotakne nasljeđuje to povjerenje. Mora biti u vlasništvu roota, ne smije biti upisiva za grupu ili ostale, mora biti navedena apsolutnom putanjom i lišena mjesta gdje nepovjerljiva vrijednost dolazi do ljuske. Stavite svaku varijablu pod navodnike, odbijte neočekivane znakove i nikada ne gradite naredbu iz dostavljenog korisničkog imena. Skripta koja radi kao root pri svakom pokušaju prijave vrijedi jednom pregledati upravo zbog tih četiriju svojstava.

ls -l /usr/local/sbin/radius-auth.sh
stat -c '%U %a' /usr/local/sbin/radius-auth.sh

Oblik dostave datotekom izbjegava problem nasljeđivanja okoline i predaje akreditive skripti kroz privremenu datoteku s ograničenim dozvolama. Ako vaš klijent to podržava, obično je bolji zadani izbor, iako dodaje još jedan objekt za čišćenje pri kvaru.

Izlazni kodovi odlučuju hoćete li pasti otvoreno

Izlazni status skripte je presuda: nula prihvaća, ne-nula odbija. Obrazac koji stvara problem je shell skripta koja prihvaća samo kad RADIUS odgovor sadrži određeni token prihvaćanja i vraća kvar za sve ostalo, jer to sažima tri različita događaja u jedan odgovor. Pogrešna lozinka, nedostupan server i iskrivljen odgovor postaju isto odbijanje.

Razdvojite te slučajeve u skripti i kad kuka može vratiti samo prihvati ili odbij. Bilježite ishod pozadine odvojeno, alarmirajte na vremenska ograničenja i transportne greške i učinite očitim u monitoringu kad provjera identiteta pada jer je servis pao, a ne jer korisnici pogrešno tipkaju.

Dvije navike drže ostatak razumnim. Ako je RADIUS autoritet, trebao bi biti jedino mjesto gdje se lozinka provjerava, jer tablica u sjeni stvara dva odgovora na isto pitanje, a drugi je napadna površina koju nitko ne gleda. I zapamtite da se kuka poziva iznova pri svakom ponovnom pokušaju, pa spora skripta s nestrpljivim klijentom postaje pojačalo za pogađanje lozinke, osim ako dodate odgodu ili pravilo na strani RADIUS-a.

Čega se odričete kad certifikat nestane

Mnoga postavljanja ovog oblika potpuno isključuju provjeru klijentskog certifikata, ostavljajući korisničko ime i lozinku kao cijelu tvrdnju klijenta. S tom postavkom nestaje identitet utemeljen na certifikatu. Kanal ostaje šifriran, ali jedino što imenuje klijenta jest RADIUS presuda. Sve nizvodno što se prije vezalo za subjekt certifikata sada se mora vezati za korisničko ime.

Zadržite zaštitu kontrolnog kanala da neautentificirani partner ne može sondirati ili preplaviti rukovanje, i koristite username-as-common-name kad konfiguracija po korisniku zavisi od zajedničkog imena. Upravljani gatewayi to često rješavaju drugačije, završavaju autentifikaciju certifikata na gatewayu koji govori EAP-TLS s RADIUS-om, i u tom slučaju nijedna od ovih serverskih direktiva ne vrijedi. Kopirajte model koji dokumentira vaša platforma, a ne onaj susjednog proizvoda. Direktive koje su važne dovoljno se razlikuju da njihovo miješanje daje konfiguraciju koja se parsira i zatim nikoga ne autentificira.

Povezani članci