Vtičnik je še vedno priporočljiv v nitih, starejših od trenutnih graditev, na strežniku, sestavljenem včeraj, pa odpove pri nalaganju. To ni konfiguracijska napaka, ki bi jo popravili s potjo. Vtičnik in skriptna kljuka rešujeta isto težavo na različnih plasteh, prehod z enega na drugo pa spremeni, kaj je treba namestiti, kaj teče s strežniškimi pravicami in kaj vam neuspešna prijava dejansko pove.

Mit: vtičnik je podprta pot

Vtičnik je skupni objekt, naložen v proces OpenVPN, zato se mora ujemati z vmesnikom, ki ga ta proces izpostavlja. Graditve se spreminjajo, pakiranje se spreminja, knjižnica, sestavljena za starejši vmesnik, pa preprosto zavrne nalaganje. Nič v konfiguraciji strežnika ne more premostiti te vrzeli, zato se nasvet »samo namestite radiusplugin« konča s strežnikom, ki se ne zažene.

Skriptna kljuka stoji zunaj procesa. OpenVPN zažene program, mu preda poverilnice in prebere razsodbo. Prav ta ločitev ji omogoča, da preživi nadgradnje, in prav zato postane vaša odgovornost, kakršna vtičnik nikoli ni bil.

Noben pristop ni varnejši po svoji zgradbi. Eden izvaja tujo kodo znotraj demona; drugi izvaja vašo kodo ob njem s poverilnicami v roki. Pravo vprašanje je, katero od teh dveh tveganj zares lahko upravljate.

Kaj je vtičnik povezoval

Vtičnik je imel svojo konfiguracijsko datoteko z gostiteljem RADIUS, skupno skrivnostjo, številom poskusov in časovno omejitvijo, konfiguracija strežnika pa se je nanjo sklicevala z eno vrstico. Obdelava poverilnic je ostala v strežniškem procesu, kar je pomenilo, da geslo nikoli ni prestopilo meje procesa, ki bi jo moral zavarovati skrbnik.

Cena je bila povezanost. Vsaka nadgradnja OpenVPN je tvegala nezdružljiv vmesnik, vsaka distribucija, ki je paket znova zgradila, pa je tvegala knjižnico, ki se ne ujema več. Ko se to zgodi, je odpoved glasna in takojšnja, in to je edino usmiljenje te zasnove.

Če se tak vtičnik še nalaga na vaši graditvi, je morda manjša operativna površina. Potrdite vmesnik, za katerega je bil zgrajen, držite ga pripetega na graditev, ki ste jo preizkusili, in vsako nadgradnjo obravnavajte kot spremembo, ki zahteva popoln preizkus prijave, ne kot rutinsko posodobitev paketa.

Čemu skriptna kljuka v resnici zaupa

Kljuka se konfigurira z auth-user-pass-verify in mehanizmom dostave: okoljskimi spremenljivkami ali začasno datoteko. V okoljski obliki OpenVPN zahteva script-security 3, dokumentirano raven, ki dovoljuje izpostavitev gesla skriptom. Ta raven je namerno oslabitev privzete nastavitve in jo je treba obravnavati kot dovoljenje s priloženo utemeljitvijo.

Vse, česar se skript dotakne, to zaupanje podeduje. Lastnik mora biti root, ne sme biti pisljiv za skupino ali druge, sklicevati se mora z absolutno potjo in ne sme imeti mesta, kjer nezaupanja vredna vrednost doseže lupino. Vsako spremenljivko dajte v narekovaje, zavrnite nepričakovane znake in nikoli ne gradite ukaza iz podanega uporabniškega imena. Skript, ki teče kot root ob vsakem poskusu prijave, si zasluži en pregled prav zaradi teh štirih lastnosti.

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

Oblika dostave z datoteko se izogne težavi dedovanja okolja in preda poverilnice skriptu prek začasne datoteke z omejenimi pravicami. Če vaš odjemalec to podpira, je običajno boljša privzeta izbira, čeprav doda še en objekt za čiščenje ob napaki.

Izhodne kode odločajo, ali boste propadli odprto

Izhodno stanje skripta je razsodba: nič sprejme, ne-nič zavrne. Vzorec, ki povzroča težave, je lupinski skript, ki sprejme le, kadar odgovor RADIUS vsebuje določen žeton sprejetja, za vse drugo pa vrne napako, ker s tem zlije tri različne dogodke v en odgovor. Napačno geslo, nedosegljiv strežnik in popačen odgovor postanejo vsi isto zavrnitev.

Te primere ločite v skriptu, tudi če kljuka lahko vrne le sprejmi ali zavrni. Rezultat zaledja beležite ločeno, opozarjajte na časovne omejitve in transportne napake ter v spremljanju jasno pokažite, kdaj preverjanje pristnosti odpove zaradi izpada storitve in ne zaradi napačnega tipkanja uporabnikov.

Dve navadi ohranjata ostalo razumno. Če je RADIUS avtoriteta, mora biti edino mesto, kjer se preverja geslo, ker senčna tabela ustvari dva odgovora na isto vprašanje, drugi pa je napadalna površina, ki je nihče ne opazuje. In ne pozabite, da se kljuka znova pokliče ob vsakem poskusu, zato počasen skript z nestrpnim odjemalcem postane ojačevalnik ugibanja gesel, razen če dodate zakasnitev ali politiko na strani RADIUS.

Čemu se odrečete, ko certifikat izgine

Številne namestitve te oblike popolnoma izklopijo preverjanje odjemalskega certifikata in pustijo uporabniško ime in geslo kot celotno zahtevo odjemalca. Kar s to nastavitvijo izgine, je identiteta, ki temelji na certifikatu. Kanal ostane šifriran, a edino, kar poimenuje odjemalca, je razsodba RADIUS. Vse dolvodno, kar se je prej opiralo na subjekt certifikata, se mora zdaj opirati na uporabniško ime.

Ohranite zaščito krmilnega kanala, da nepreverjeni partner ne more sondirati ali preplaviti rokovanja, in uporabite username-as-common-name, ko je konfiguracija na uporabnika odvisna od skupnega imena. Upravljani prehodi to pogosto rešujejo drugače, tako da preverjanje certifikata zaključijo na prehodu, ki govori EAP-TLS z RADIUS, in v tem primeru nobena od teh strežniških direktiv ne velja. Kopirajte model, ki ga dokumentira vaša lastna platforma, ne tistega iz sosednjega izdelka. Pomembne direktive se dovolj razlikujejo, da njihovo mešanje da konfiguracijo, ki se razčleni in nato nikogar ne preveri.

Sorodni članki