Access Server overser post_auth-skriptet du endret på disken
Å endre post_auth-filen på disken gjør ingen forskjell: Access Server kjører kopien i konfigurasjonsdatabasen. Følg beslutningsveien og sacli-kommandoene.
Et endret mac.py som ikke forandrer noe, er det vanlige første tegnet. Filen på disken er ikke det Access Server utfører; autentiseringstjenesten laster skriptet fra tjenerens konfigurasjonsdatabase, og den lagrede kopien er det som avgjør en innlogging. Fram til den lagrede verdien er erstattet, beviser hver test bare at det gamle skriptet fortsatt fungerer.
Tre forhold styrer arbeidet: om verdien noen gang ble lagt inn i konfigurasjonsdatabasen, om tjenesten ble bedt om å laste den på nytt, og om koden du endret faktisk kjøres for hver forbindelse. Hvert forhold gir et annet tegn, og å rette det feilaktige kaster bort et vedlikeholdsvindu.
Filen er en kilde, ikke den kjørende kopien
Access Server oppbevarer post-auth-skriptet under nøkkelen auth.module.post_auth_script. Endring av filen oppdaterer bare arbeidskopien din. Daemonen leser den lagrede verdien, så endringen forblir usynlig helt til du sletter den gamle oppføringen og setter den nye filen på plassen. Den lagrede verdien er den eneste kopien autentiseringstjenesten undersøker.
Les den før du endrer den. Stemmer den allerede med filen du endret, ligger problemet ikke i lagringen, og du kan gå videre til spørsmålet om omfang. Viser den en eldre versjon, nådde endringen aldri fram til tjenesten.
./sacli -k auth.module.post_auth_script ConfigGetBytt ut den lagrede kopien, og bruk den så
Sletting før skriving er ikke utsmykking. ConfigPut med --value_file erstatter verdien i ett trinn, og ConfigDel først gjør det umulig å etterlate en foreldet eller ødelagt oppføring. Ta vare på en kopi av det fungerende skriptet utenfor skriptmappen før du begynner.
./sacli -k auth.module.post_auth_script ConfigDel
# store the file, then apply it
./sacli -k auth.module.post_auth_script --value_file=/root/post_auth.py ConfigPut
./sacli startsacli start anvender den endrede konfigurasjonen på de interne tjenestene, og det er dette som får det nye skriptet til å tre i kraft. Det er ikke det samme som å starte hele maskinen eller daemonen på nytt, og det bør ikke erstattes av det med mindre endringen din krever det.
Bruk en absolutt sti til verdifilen og bekreft at root kan lese den. En sti som løses fra skallet ditt, men ikke fra tjenestekontoen, gir en lagret verdi som ser riktig ut i ConfigGet og feiler ved første innlogging. Sjekk den lagrede verdien én gang til etter sacli start, ikke før.
Modulomfang eller per forbindelse: hvor spørringen hører til
Python kjører setninger på modulnivå én gang, når skriptet lastes. En databasespørring som står øverst i filen, leser derfor tabellen ved lasting og beholder svaret for hver senere forbindelse. Det er den andre grunnen til at en endring ser ut til å ikke gjøre noe: koden kjøres, men ikke når du forventer det.
Legg spørringen inne i post_auth-behandleren slik at den kjøres ved hver autentisering. Behold den dokumenterte signaturen, juster autentiseringsresultatet behandleren mottar, og returner det samme objektet i stedet for et bart tall.
Hold også forbindelseshåndteringen inne i behandleren. En forbindelse som åpnes ved import, kan lukkes av tjeneren før den første brukeren logger inn, og feilen som oppstår, ser ut som avviste innloggingsdata snarere enn et ødelagt skript.
To avvisningsveier, én eier
Er avgjørelsen et lokalt oppslag, eier Python-behandleren resultatet. Er det en ekstern HTTP-kontroll, la utgangsstatusen til kommandoen bære svaret: en innpakning som avslutter med en verdi ulik null, avviser innloggingen, og statusen til den siste kommandoen blir skriptets status uten en uttrykkelig exit.
Hold hemmeligheten utenfor prosesslisten. En fil som root kan lese, eller en miljøverdi tjenesten sender videre, er tryggere enn et argument som enhver lokal bruker kan lese fra ps. Fest endepunktet i en variabel før kallet, slik at en skrivefeil feiler ved konfigurering og ikke under noens innlogging. Roter den hemmeligheten på samme måte som alle andre innloggingsdata.
Velg én eier per kontroll. Et skript som både spør databasen og kaller en HTTP-tjeneste, trenger en erklært prioritetsregel for tilfellet der de to er uenige, ellers vil avvisningsgrunnen i loggen ikke stemme med det brukeren ble fortalt.
Bruk det uten å låse administratoren ute
To sikringstiltak gjør endringen reversibel: en ekstra administratorkonto som ikke avhenger av skriptet, og en kjent god kopi som oppbevares utenfor skriptmappen. Bruk endringen i et vedlikeholdsvindu, og følg deretter med på én testinnlogging og én bevisst avvisning før du kobler fra. Viser loggen en syntaksfeil i stedet for en autentiseringsavgjørelse, er det lagrede skriptet ødelagt, og hver innlogging vil feile.
To forhold sier vent: du kan ikke lese verdifilen som root, eller du har ingen annen vei inn i administrasjonsgrensesnittet. Begge gjør en liten endring til en utelåsing, og ingen av dem er verdt å teste på en produksjonstjener sent på dagen. Dokumentasjonen for Access Server dekker post-auth-grensesnittet og feltene det støtter.