Plugin sa stále odporúča vo vláknach starších než súčasné zostavenia a na serveri skompilovanom včera zlyhá pri načítaní. Nie je to chyba konfigurácie, ktorú opravíte cestou. Plugin a skriptový hák riešia ten istý problém na rôznych vrstvách a prechod z jedného na druhý mení, čo treba nainštalovať, čo beží s právami servera a čo vám neúspešné prihlásenie naozaj povie.

Mýtus: plugin je podporovaná cesta

Plugin je zdieľaný objekt načítaný do procesu OpenVPN, takže musí zodpovedať rozhraniu, ktoré tento proces poskytuje. Zostavenia sa menia, balenie sa mení a knižnica skompilovaná pre staršie rozhranie jednoducho odmietne načítať sa. Nič v konfigurácii servera tú medzeru nepreklenie, preto rada „proste nainštalujte radiusplugin“ končí serverom, ktorý sa nespustí.

Skriptový hák stojí namiesto toho mimo procesu. OpenVPN spustí program, odovzdá mu prihlasovacie údaje a prečíta verdikt. Práve toto oddelenie mu umožňuje prežiť aktualizácie a zároveň z neho robí vašu zodpovednosť spôsobom, akým plugin nikdy nebol.

Ani jeden prístup nie je bezpečnejší zo svojej podstaty. Jeden spúšťa cudzí kód vnútri démona; druhý spúšťa váš kód vedľa neho s prihlasovacími údajmi v ruke. Správna otázka je, ktoré z týchto dvoch rizík dokážete skutočne prevádzkovať.

Čo plugin zväzoval

Plugin mal vlastný konfiguračný súbor s hostiteľom RADIUS, spoločným tajomstvom, počtom pokusov a časovým limitom a konfigurácia servera naň odkazovala jediným riadkom. Spracovanie prihlasovacích údajov zostávalo v procese servera, čo znamenalo, že heslo nikdy neprekročilo hranicu procesu, ktorú musel správca zabezpečiť.

Cenou bolo zviazanie. Každá aktualizácia OpenVPN riskovala nekompatibilné rozhranie a každá distribúcia, ktorá balík znovu zostavovala, riskovala knižnicu, ktorá už nezodpovedá. Keď sa to stane, zlyhanie je hlasné a okamžité, a to je jediné milosrdenstvo dizajnu.

Ak sa takýto plugin na vašom zostavení ešte načítava, môže byť menšou prevádzkovou plochou. Overte rozhranie, pre ktoré bol zostavený, držte ho pripnutý k zostaveniu, ktoré ste otestovali, a každú aktualizáciu berte ako zmenu vyžadujúcu plný test prihlásenia, nie ako rutinnú aktualizáciu balíka.

Čomu skriptový hák skutočne dôveruje

Hák sa konfiguruje pomocou auth-user-pass-verify a mechanizmu doručenia: premenných prostredia alebo dočasného súboru. V podobe s prostredím OpenVPN vyžaduje script-security 3, dokumentovanú úroveň, ktorá umožňuje vystavenie hesla skriptom. Táto úroveň je zámerné oslabenie predvoleného nastavenia a treba ju brať ako povolenie s priloženým odôvodnením.

Všetko, čoho sa skript dotkne, túto dôveru dedí. Musí byť vo vlastníctve roota, nesmie byť zapisovateľný pre skupinu ani ostatných, musí byť odkazovaný absolútnou cestou a nesmie mať miesto, kde sa nedôveryhodná hodnota dostane do shellu. Každú premennú dajte do úvodzoviek, odmietnite neočakávané znaky a nikdy nestavajte príkaz z poskytnutého používateľského mena. Skript, ktorý beží ako root pri každom pokuse o prihlásenie, stojí za jedno preskúmanie práve pre tieto štyri vlastnosti.

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

Forma doručenia súborom obchádza problém dedenia prostredia a odovzdáva prihlasovacie údaje skriptu cez dočasný súbor s obmedzenými právami. Ak to váš klient podporuje, je to zvyčajne lepšie predvolené nastavenie, hoci pri zlyhaní pribudne ďalší objekt na upratanie.

Návratové kódy rozhodujú, či zlyháte otvorene

Návratový stav skriptu je verdikt: nula prijíma, nenulová odmieta. Vzor, ktorý spôsobuje problémy, je shellový skript, ktorý prijme len vtedy, keď odpoveď RADIUS obsahuje určitý token prijatia, a pre všetko ostatné vráti zlyhanie, pretože tým zlieva tri rôzne udalosti do jednej odpovede. Nesprávne heslo, nedostupný server a deformovaná odpoveď sa stanú tým istým odmietnutím.

Rozdeľte tie prípady v skripte, aj keď hák dokáže vrátiť len prijmi alebo odmietni. Výsledok backendu logujte oddelene, upozorňujte na časové limity a transportné chyby a v monitorovaní urobte zrejmým, kedy autentifikácia zlyháva preto, že služba nebeží, a nie preto, že používatelia sa preklepnú.

Dve návyky držia zvyšok pri zdravom rozume. Ak je RADIUS autoritou, mal by byť jediným miestom, kde sa heslo kontroluje, pretože tieňová tabuľka vytvára dve odpovede na tú istú otázku a tá druhá je útočná plocha, ktorú nikto nesleduje. A pamätajte, že hák sa volá znova pri každom pokuse, takže pomalý skript s netrpezlivým klientom sa stane zosilňovačom hádania hesiel, ak nepridáte oneskorenie alebo politiku na strane RADIUS.

O čo prichádzate, keď certifikát zmizne

Mnohé nasadenia tohto tvaru úplne vypínajú kontrolu klientskeho certifikátu a nechávajú používateľské meno a heslo ako celý nárok klienta. S týmto nastavením mizne identita založená na certifikáte. Kanál zostáva šifrovaný, ale jediné, čo klienta pomenúva, je verdikt RADIUS. Čokoľvek nižšie, čo sa predtým opieralo o subjekt certifikátu, sa teraz musí opierať o používateľské meno.

Zachovajte ochranu riadiaceho kanála, aby neautentizovaný partner nemohol sondovať ani zaplaviť handshake, a používajte username-as-common-name, keď konfigurácia pre používateľa závisí od spoločného mena. Spravované brány to často riešia inak, ukončujú autentifikáciu certifikátom na bráne, ktorá hovorí EAP-TLS s RADIUS, a v tom prípade neplatí žiadna z týchto serverových direktív. Kopírujte model, ktorý dokumentuje vaša vlastná platforma, nie ten od susedného produktu. Dôležité direktívy sa dosť líšia, takže ich miešanie dá konfiguráciu, ktorá sa parsuje a potom nikoho neautentifikuje.

Súvisiace články