Access Server ignorerer post_auth-skriptet du redigerte på disken
Å redigere post_auth-filen på disken gjør ingen forskjell: Access Server kjører kopien i konfigurasjonsdatabasen. Følg beslutningsveien og sacli-kommandoene.
Et redigert mac.py som ikke endrer noe, er det vanlige første symptomet. Filen på disken er ikke det Access Server kjører; autentiseringstjenesten laster skriptet fra serverens konfigurasjonsdatabase, og nettopp den lagrede kopien avgjør en innlogging. Inntil den lagrede verdien er erstattet, beviser hver test bare at det gamle skriptet fortsatt virker.
Tre forhold avgjør arbeidet: om verdien noen gang ble lagt i konfigurasjonsdatabasen, om tjenesten fikk beskjed om å laste den på nytt, og om koden du endret faktisk kjøres ved hver tilkobling. Hvert forhold har et annet symptom, og å rette det gale sløser bort et vedlikeholdsvindu.
Filen er en kilde, ikke den kjørende kopien
Access Server holder post-auth-skriptet under nøkkelen auth.module.post_auth_script. Redigering av filen oppdaterer bare arbeidskopien din. Daemonen leser den lagrede verdien, så endringen forblir usynlig til du sletter den gamle oppføringen og setter den nye filen på plassen dens. Den lagrede verdien er den eneste kopien autentiseringstjenesten ser på.
Les den før du endrer den. Hvis den allerede samsvarer med filen du redigerte, er ikke problemet lagringen, og du bør gå videre til spørsmålet om omfang. Hvis den viser en eldre versjon, nådde endringen aldri tjenesten.
./sacli -k auth.module.post_auth_script ConfigGetErstatt den lagrede kopien, og bruk den deretter
Å slette før man skriver er ikke pynt. ConfigPut med --value_file erstatter verdien i ett trinn, og ConfigDel først gjør det umulig å etterlate en utdatert eller skadet 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 bruker den endrede konfigurasjonen på de interne tjenestene, og det er dette som gjør at det nye skriptet trer 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. Kontroller den lagrede verdien én gang til etter sacli start, ikke før.
Modulomfang eller per tilkobling: hvor oppslaget hører hjemme
Python kjører setninger på modulnivå én gang, når skriptet lastes. En databasespørring som er skrevet øverst i filen, leser derfor tabellen ved lasting og beholder svaret for hver senere tilkobling. Det er den andre grunnen til at en endring ser ut til å gjøre ingenting: koden kjører, men ikke når du forventer det.
Legg spørringen inni 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å tilkoblingshåndteringen inni behandleren. En tilkobling som åpnes ved import, kan lukkes av serveren før den første brukeren logger inn, og feilen som oppstår, ser ut som avviste påloggingsdata snarere enn et ødelagt skript.
To avvisningsveier, én eier
Hvis avgjørelsen er et lokalt oppslag, eier Python-behandleren resultatet. Hvis det er en ekstern HTTP-kontroll, la kommandolinjens utgangsstatus 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 eksplisitt 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 påloggingsdata.
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 avvisningsårsaken i loggen ikke stemme med det brukeren ble fortalt.
Bruk det uten å låse administratoren ute
To sikkerhetstiltak 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. Hvis loggen viser 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 produksjonsserver sent på dagen. Dokumentasjonen for Access Server dekker post-auth-grensesnittet og feltene det støtter.