Pakeistas mac.py, kuris nieko nekeičia, yra įprastas pirmasis simptomas. Failas diske nėra tai, ką vykdo Access Server; autentifikavimo tarnyba įkelia scenarijų iš serverio konfigūracijos duomenų bazės, ir būtent ta išsaugota kopija nusprendžia prisijungimą. Kol išsaugota reikšmė nepakeista, kiekvienas bandymas įrodo tik tai, kad senasis scenarijus dar veikia.

Darbą lemia trys sąlygos: ar reikšmė kada nors buvo įrašyta į konfigūracijos duomenų bazę, ar tarnybai buvo liepta ją įkelti iš naujo, ir ar pakeistas kodas tikrai vykdomas kiekvieno ryšio metu. Kiekviena turi skirtingą simptomą, o netinkamos taisymas eikvoja techninės priežiūros langą.

Failas yra šaltinis, o ne vykdoma kopija

Access Server laiko post-auth scenarijų po raktu auth.module.post_auth_script. Failo redagavimas atnaujina tik jūsų darbinę kopiją. Daemonas skaito išsaugotą reikšmę, todėl pakeitimas lieka nematomas, kol neištrinsite seno įrašo ir neįdėsite naujo failo į jo vietą. Ta išsaugota reikšmė yra vienintelė kopija, kurią tikrina autentifikavimo tarnyba.

Perskaitykite ją prieš keisdami. Jei ji jau atitinka failą, kurį redagavote, problema ne saugykloje, todėl pereikite prie apimties klausimo. Jei ji rodo senesnę versiją, pakeitimas tarnybos nepasiekė.

./sacli -k auth.module.post_auth_script ConfigGet

Pakeiskite išsaugotą kopiją, tada ją pritaikykite

Trynimas prieš rašymą nėra puošyba. ConfigPut su --value_file pakeičia reikšmę vienu žingsniu, o ConfigDel pirmiau padaro neįmanoma palikti pasenusio ar sugadinto įrašo. Prieš pradėdami pasidarykite veikiančio scenarijaus kopiją už scenarijų katalogo ribų.

./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 start

sacli start pritaiko pakeistą konfigūraciją vidinėms tarnyboms, ir būtent tai įgalina naują scenarijų. Tai nėra tas pats, kas visos mašinos ar daemono paleidimas iš naujo, ir tuo neturėtų būti pakeista, nebent jūsų pakeitimas to reikalauja.

Naudokite absoliutų kelią reikšmės failui ir patvirtinkite, kad root gali jį perskaityti. Kelias, kuris išsprendžiamas iš jūsų apvalkalo, bet ne iš tarnybos paskyros, duoda išsaugotą reikšmę, kuri atrodo tinkama ConfigGet išvestyje ir sugenda per pirmą prisijungimą. Patikrinkite išsaugotą rezultatą dar kartą po sacli start, o ne prieš tai.

Modulio apimtis ar kiekvienam ryšiui: kur turi būti užklausa

Python modulio lygio sakinius vykdo vieną kartą, kai scenarijus įkeliamas. Todėl failo viršuje parašyta duomenų bazės užklausa lentelę perskaito įkėlimo metu ir tą atsakymą išlaiko kiekvienam vėlesniam ryšiui. Tai antroji priežastis, kodėl pakeitimas atrodo nieko neveikiantis: kodas vykdomas, bet ne tada, kai to tikitės.

Įdėkite užklausą į post_auth apdorotoją, kad ji būtų vykdoma kiekvieno autentifikavimo metu. Išsaugokite dokumentuotą parašą, pakoreguokite autentifikavimo rezultatą, kurį gauna apdorotojas, ir grąžinkite tą patį objektą, o ne pliką skaičių.

Ryšio tvarkymą taip pat laikykite apdorotojo viduje. Įkeliant atidarytas ryšys gali būti serverio uždarytas prieš pirmajam vartotojui prisijungiant, o atsiradusi klaida atrodo kaip atmesti prisijungimo duomenys, o ne kaip sugadintas scenarijus.

Du atmetimo keliai, vienas savininkas

Jei sprendimas yra vietinė užklausa, rezultatas priklauso Python apdorotojui. Jei tai išorinė HTTP patikra, leiskite komandos išėjimo būsenai nešti atsakymą: apvalkalas, išeinantis su ne nuliniu kodu, atmeta prisijungimą, o paskutinės komandos būsena tampa scenarijaus būsena be aiškaus exit.

Laikykite paslaptį už procesų sąrašo. Failas, kurį gali skaityti root, arba tarnybos perduota aplinkos reikšmė yra saugesnė už argumentą, kurį bet kuris vietinis vartotojas gali perskaityti iš ps. Prieš iškvietimą užfiksuokite galinį tašką kintamajame, kad rašybos klaida sugestų konfigūravimo metu, o ne kažkam prisijungiant. Keiskite tą paslaptį taip pat, kaip bet kuriuos kitus prisijungimo duomenis.

Kiekvienai patikrai pasirinkite vieną savininką. Scenarijus, kuris ir klausia duomenų bazės, ir kviečia HTTP tarnybą, turi turėti deklaruotą prioriteto taisyklę tam atvejui, kai abu nesutampa, kitaip atmetimo priežastis žurnale neatitiks to, kas buvo pasakyta vartotojui.

Pritaikykite neužblokuodami administratoriaus

Dvi apsaugos priemonės padaro pakeitimą grįžtamą: antra administratoriaus paskyra, kuri nepriklauso nuo scenarijaus, ir žinoma gera kopija, laikoma už scenarijų katalogo ribų. Pritaikykite pakeitimą techninės priežiūros lange, tada stebėkite vieną bandomąjį prisijungimą ir vieną tyčinį atmetimą prieš atsijungdami. Jei žurnalas rodo sintaksės klaidą vietoj autentifikavimo sprendimo, išsaugotas scenarijus sugadintas ir kiekvienas prisijungimas suges.

Dvi sąlygos sako palaukite: negalite perskaityti reikšmės failo kaip root arba neturite antro kelio į administravimo sąsają. Abi mažą pakeitimą paverčia užblokavimu, ir nė viena neverta bandymo gamybiniame serveryje dienos pabaigoje. Access Server dokumentacija aprašo post-auth sąsają ir jos palaikomus laukus.

Susiję straipsniai