Access Server ignorira 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 poslužitelja, 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 uvjeta određuju posao: je li vrijednost ikada upisana u konfiguracijsku bazu, je li servisu naređeno da je ponovno učita, i izvršava li se kod koji ste promijenili doista pri svakoj vezi. Svaki ima drugačiji simptom, a popravljanje pogrešnoga 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 pregledava.
Pročitajte je prije nego što je promijenite. Ako se već podudara s datotekom koju ste uredili, problem nije u pohrani i prijeđite na pitanje opsega. Ako pokazuje stariju inačicu, 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 unutarnje 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.
Rabite apsolutni put za datoteku vrijednosti i potvrdite da je root može čitati. Put koji 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 tablicu 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 rukovatelja post_auth da se izvršava za svaku autentifikaciju. Zadržite dokumentirani potpis, prilagodite rezultat autentifikacije koji rukovatelj prima i vratite isti objekt umjesto golog broja.
Držite i upravljanje vezom unutar rukovatelja. Veza otvorena pri uvozu može biti zatvorena od poslužitelja 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 rukovatelj. 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 izričitog exit.
Držite tajnu izvan popisa 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. Pričvrstite krajnju točku u varijablu prije poziva, da tipfeler padne u vrijeme konfiguracije, a ne tijekom 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 promatrajte 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 uvjeta kažu čekaj: ne možete pročitati datoteku vrijednosti kao root, ili nemate drugi put do admin sučelja. Oba pretvaraju malu promjenu u zaključavanje, i nijedno nije vrijedno testiranja na produkcijskom poslužitelju na kraju dana. Dokumentacija Access Server pokriva post-auth sučelje i njegova podržana polja.