OpenVPN-Skript auth-user-pass-verify: den Ausgangscode richteg setzen
Den Ausgangsstatus vum Hook ass d’Entscheedung, net seng Logzeil. Maacht d’Resultater vum Verifizéierer op 0, 1 oder verspéit, liest d’Zugangsdatei als Daten a fällt zou.
OpenVPN handelt op genee enger Ausgab vun engem Login-Skript: dem Ausgangsstatus. Alles anescht, wat d’Skript mécht, ass Dekoratioun. E Hook kann de richtege Verifizéierer erreechen, d’Äntwert analyséieren an eng frëndlech Zeil drécken, awer en Status zréckginn, deen d’Géigendeel vun deem bedeit, wat den Auteur wëlles hat. Liest d’éischt de Kontrakt a schreift den Adapter ronderëm, an dann verschwënnt déi ganz Klass vu Feeler.
De Kontrakt ass kleng: identifizéiert de Kont, dee geschéckt gouf, freet de geneemten Verifizéierer déi virgesi Fro a akzeptéiert nëmmen dat dokumentéiert positiv Resultat vun deem Verifizéierer fir déi Ufro. Alles anescht ass Infrastruktur.
Déi dräi Statussen, déi den Hook zréckginn kann
Fir auth-user-pass-verify, den OpenVPN-2.6-Handbuch definéiert den Ausgangscode 0 als Akzeptanz, 1 als Oflehnung an 2 als verspéit Authentifikatioun. Dat sinn déi eenzeg dräi Äntwerten, déi de Server versteet, an all huet eng aner Konsequenz fir d’Verbindung. E Skript, dat mam Status vu senger leschter Kommando erausgeet, huet faktesch engem Log-Opruff oder engem Botzschrëtt d’Stëmm ginn. Schreift de Status an all Zweig explizit, och an deene Zweig, déi den Verifizéierer ni erreecht hunn.
HTTP-Erfolleg an Authentifikatiouns-Erfolleg sinn getrennte Schichten, a si ze verwiesselen ass dee heefegste Grond, firwat dësen Hook schief geet. Eng 202-Äntwert bedeit, datt d’Ufro fir d’Veraarbechtung ugeholl gouf, net datt e Passwuert verifizéiert gouf. Definiéiert den erwaarten Status, d’Form vun der Äntwert an d’endgülteg Urteel aus dem API-Kontrakt, deen dir krut, a maacht kee Feldnumm, well en plausibel schéngt.
Wann d’Äntwert wierklech méi spéit kënnt, da ass dat de verspéite Wee an e muss esou gebaut ginn. E verspéiten Versuch, deen ni ofgeschloss gëtt, hält Ressourcen, bis d’Zäitlimit ofleeft.
Liest d’Zugangsdatei genee esou, wéi se geschriwwe gëtt
Bei der dokumentéierter Via-Datei-Method schreift de Server de Benotzernumm an d’Passwuert als déi éischt zwou Zeile vun enger temporärer Datei, gëtt dee Wee un d’Skript weider a läscht d’Datei, wann d’Skript zréckkënnt. Liest déi zwou Zeile als Daten: maacht d’Datei ni duerch source, evaluéiert se ni a setzt hire Contenu ni an eng Kommandozeil, wou d’Prozesstabel en gesinn kann. Bewaart d’Passwuert Byte fir Byte, well eng Normaliséierung, wéi dir se bei engem Benotzernumm géift uwenden, d’Zugangsdaten stëll ännert. Den Dossier fir déi temporär Datei ass eng Asetzeentscheedung, also bestätegt, datt en existéiert an net fir jiddereen um Host liesbar ass.
Halt d’Zugangsdate vum Verifizéierer selwer getrennt vun deene vum Benotzer: se gehéiert zur Gateway-Integratioun, lieft am Geheimnisstore vun der Plattform a brauch nëmmen d’Berechtegung ze verifizéieren, also ass se keen Beweis, datt eng bestëmmte Persoun sech authentifizéiert huet. Loosst den Hook och net en zweete Passwuertverifizéierer ginn. En Hash-Verglach vu Hand nei ze schreiwen gëtt net sécher, andeems een d’Schleif optimiséiert, an en ënnerhalene Verifizéierer versteet schonn d’gesalzt an deier Schema vum Kontstore.
Entscheet, wat eng net klassifizéierbar Äntwert bedeit
Zäitlimiten, Transportfeeler, mëssgebilt Äntwerten an en net verfügbare Backend deelen eng Eegenschaft: keen dovun ass eng positiv Verifizéierung. Den Hook sollt fir jidderee dovun zou fale a e Grond notéieren, op deen en Operateur ka reagéieren. Dee Grond gehéiert an eng geschützt Log, net an eng Noriicht, déi der Persoun zréckginn gëtt, déi sech probéiert ze verbannen.
Sidd esou suergfälteg mat de Weeër, déi den Verifizéierer iwwerhaapt net erreechen. En feelende Konfiguratiounswert, en onliesbare Geheimnis oder eng net installéiert Ofhängegkeet sollten eng Oflehnung mat engem eegene Betribsmarker erginn anstatt eng zoufälleg Akzeptanz. Test dës Zweig, andeems dir d’Ofhängegkeet an engem Labor ewechhëlt, amplaz doriwwer ze spekuléieren. Wou e Feeler beim Loggen den Ausgangsstatus ännere kann, ass d’Loggen en Deel vun der Entscheedung ginn a muss harmlos gemaach ginn.
D’Serverkonfiguratioun ass hei och wichteg: benotzerdefinéiert Skripte ginn nëmmen ugeholl, wann déi lafend Konfiguratioun se um erfuerderleche Sécherheetsniveau erlaabt, an déi Astellung ass eng bewosst Wiel an net en Standard, deen een eropsetzt.
Verifizéiert d’Urteel, net déi gedréckt Zeil
Baut en Test, deen den Ausgangsstatus direkt kontrolléiert. Schreift eng Muster-Zugangsdatei, fuert den Hook dogéint mat engem bekannt gudden an engem bekannt schlechten Kont aus a liest den Status, deen d’Shell mellt, amplaz vum Text, deen d’Skript dréckt. Dee eenzege Kontroll fänkt déi meescht Kontraktfeeler of, ier sech iwwerhaapt e Client verbënnt.
Duerno fuert déiselwecht Fäll duerch en echte Client géint eng net-Produktiouns-Lauschterer a bestätegt, wat de Server festgehalen huet: ugeholl, ofgeleent oder verspéit. Deckt en deaktivéierte Kont, e falscht Passwuert, eng mëssgebilt Verifizéierer-Äntwert, eng Zäitlimit an en net erreechbare Verifizéierer of. Wann ee Fall an en Zoustand geréit, deen dir net kënnt nennen, ass den Adapter net fäerdeg.
Halt d’Zouuerdnung vum Verifizéierer-Resultat zum Ausgangsstatus nieft dem Skript am Repository, sou datt den nächsten Ingenieur de Kontrakt liese kann, ouni de Code zréckzeentwéckelen.