Access Server ignoriše post_auth skriptu koju ste uredili na disku
Uređivanje datoteke post_auth na disku ne čini ništa: Access Server izvršava kopiju iz svoje konfiguracijske baze podataka. Slijedite put odluke i sacli naredbe.
Uređena mac.py koja ništa ne mijenja uobičajen je prvi simptom. Datoteka na disku nije ono što Access Server izvršava; servis za autentifikaciju učitava skriptu iz konfiguracijske baze podataka servera, i upravo ta pohranjena kopija odlučuje o prijavi. Dok se pohranjena vrijednost ne zamijeni, svaki test dokazuje samo da stara skripta još radi.
Tri uslova određuju posao: da li je vrijednost ikada upisana u konfiguracijsku bazu, da li je servisu naređeno da je ponovo učita, i da li se kod koji ste promijenili zaista izvršava pri svakoj vezi. Svaki ima drugačiji simptom, a popravljanje pogrešnog troši servisni prozor.
Datoteka je izvor, a ne pokrenuta kopija
Access Server drži post-auth skriptu pod ključem auth.module.post_auth_script. Uređivanje datoteke ažurira samo vašu radnu kopiju. Demon čita pohranjenu vrijednost, pa promjena ostaje nevidljiva dok ne izbrišete stari zapis i ne stavite novu datoteku na njegovo mjesto. Ta pohranjena vrijednost jedina je kopija koju servis za autentifikaciju provjerava.
Pročitajte je prije nego što je promijenite. Ako se već poklapa s datotekom koju ste uredili, problem nije u pohrani i prijeđite na pitanje opsega. Ako pokazuje stariju verziju, promjena nije stigla do servisa.
./sacli -k auth.module.post_auth_script ConfigGetZamijenite pohranjenu kopiju, pa je primijenite
Brisanje prije upisa nije ukras. ConfigPut s --value_file zamjenjuje vrijednost u jednom koraku, a ConfigDel prvo čini nemogućim da zaostane zastario ili oštećen zapis. Sačuvajte kopiju radne skripte izvan direktorija skripti prije nego što počnete.
./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 primjenjuje promijenjenu konfiguraciju na unutrašnje servise, i to je ono što novu skriptu stavlja na snagu. To nije isto kao ponovno pokretanje cijelog stroja ili demona, i ne treba to zamjenjivati time osim ako vaša promjena to zahtijeva.
Koristite apsolutnu putanju za datoteku vrijednosti i potvrdite da je root može čitati. Putanja koja se razrješava iz vašeg shella ali ne iz računa servisa daje pohranjenu vrijednost koja izgleda ispravno u ConfigGet i pada pri prvoj prijavi. Provjerite pohranjeni rezultat još jednom nakon sacli start, ne prije.
Opseg modula ili po vezi: gdje pripada upit
Python izvršava naredbe na razini modula jednom, kada se skripta učita. Zato upit prema bazi napisan na vrhu datoteke čita tabelu pri učitavanju i zadržava taj odgovor za svaku sljedeću vezu. To je drugi razlog zašto promjena izgleda kao da ne radi: kod se izvršava, ali ne kada očekujete.
Stavite upit unutar rukovaoca post_auth da se izvršava za svaku autentifikaciju. Zadržite dokumentirani potpis, prilagodite rezultat autentifikacije koji rukovalac prima i vratite isti objekat umjesto golog broja.
Držite i upravljanje vezom unutar rukovaoca. Veza otvorena pri uvozu može biti zatvorena od strane servera prije prve prijave korisnika, a nastala greška izgleda kao odbijene vjerodajnice, a ne kao pokvarena skripta.
Dva puta odbijanja, jedan vlasnik
Ako je odluka lokalni upit, rezultatom upravlja Python rukovalac. Ako je vanjska HTTP provjera, neka status izlaza naredbe nosi odgovor: omotač koji izlazi s nenultim kodom odbija prijavu, a status posljednje naredbe postaje status skripte bez eksplicitnog exit.
Držite tajnu izvan liste procesa. Datoteka čitljiva za root ili vrijednost okruženja koju servis prosljeđuje sigurnija je od argumenta koji svaki lokalni korisnik može pročitati iz ps. Prikvačite krajnju tačku u varijablu prije poziva, da tipfeler padne u vrijeme konfiguracije, a ne tokom nečije prijave. Rotirajte tu tajnu kao i svaku drugu vjerodajnicu.
Odaberite jednog vlasnika po provjeri. Skripta koja i pita bazu i poziva HTTP servis treba izričito pravilo prioriteta za slučaj kada se njih dvoje ne slažu, inače razlog odbijanja u logu neće odgovarati onome što je korisniku rečeno.
Primijenite to bez zaključavanja administratora
Dvije zaštite čine promjenu reverzibilnom: drugi admin račun koji ne zavisi od skripte, i poznata dobra kopija čuvana izvan direktorija skripti. Primijenite promjenu u servisnom prozoru, pa posmatrajte jednu testnu prijavu i jedno namjerno odbijanje prije nego što se odspojite. Ako log pokaže sintaksnu grešku umjesto odluke o autentifikaciji, pohranjena skripta je pokvarena i svaka prijava će pasti.
Dva uslova kažu čekaj: ne možete pročitati datoteku vrijednosti kao root, ili nemate drugi put do admin interfejsa. Oba pretvaraju malu promjenu u zaključavanje, i nijedno nije vrijedno testiranja na produkcionom serveru na kraju dana. Dokumentacija Access Server pokriva post-auth interfejs i njegova podržana polja.