Et redigeret mac.py, der ikke ændrer noget, er det sædvanlige første symptom. Filen på disken er ikke det, Access Server udfører; godkendelsestjenesten indlæser scriptet fra serverens konfigurationsdatabase, og netop den gemte kopi afgør et login. Indtil den gemte værdi er erstattet, beviser hver test kun, at det gamle script stadig virker.

Tre forhold afgør arbejdet: om værdien nogensinde blev lagt i konfigurationsdatabasen, om tjenesten fik besked om at indlæse den igen, og om den kode, du ændrede, faktisk kører for hver forbindelse. Hvert forhold har et andet symptom, og at rette det forkerte spilder et vedligeholdelsesvindue.

Filen er en kilde, ikke den kørende kopi

Access Server holder post-auth-scriptet under nøglen auth.module.post_auth_script. Redigering af filen opdaterer kun din arbejdskopi. Daemonen læser den gemte værdi, så ændringen forbliver usynlig, indtil du sletter den gamle post og sætter den nye fil i dens sted. Den gemte værdi er den eneste kopi, godkendelsestjenesten konsulterer.

Læs den, før du ændrer den. Hvis den allerede svarer til den fil, du redigerede, er problemet ikke lagringen, og du bør springe til spørgsmålet om omfang. Hvis den viser en ældre version, nåede ændringen aldrig tjenesten.

./sacli -k auth.module.post_auth_script ConfigGet

Erstat den gemte kopi, og anvend den derefter

At slette før man skriver er ikke pynt. ConfigPut med --value_file erstatter værdien i ét trin, og ConfigDel først gør det umuligt at efterlade en forældet eller beskadiget post. Gem en kopi af det fungerende script uden for scriptmappen, før du begynder.

./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 anvender den ændrede konfiguration på de interne tjenester, og det er det, der får det nye script til at træde i kraft. Det er ikke det samme som at genstarte hele maskinen eller daemonen, og det bør ikke erstattes af det, medmindre din ændring kræver det.

Brug en absolut sti til værdifilen, og bekræft at root kan læse den. En sti, der opløses fra din shell men ikke fra tjenestekontoen, giver en gemt værdi, der ser rigtig ud i ConfigGet og fejler ved det første login. Kontroller det gemte resultat én gang mere efter sacli start, ikke før.

Modulomfang eller per forbindelse: hvor opslaget hører til

Python kører sætninger på modulniveau én gang, når scriptet indlæses. En databaseforespørgsel skrevet øverst i filen læser derfor tabellen på indlæsningstidspunktet og beholder det svar for hver senere forbindelse. Det er den anden grund til, at en ændring ser ud til ikke at gøre noget: koden kører, men ikke når du forventer det.

Læg forespørgslen inde i post_auth-handleren, så den udføres for hver godkendelse. Bevar den dokumenterede signatur, juster det godkendelsesresultat, handleren modtager, og returner det samme objekt i stedet for et bart tal.

Hold også forbindelseshåndteringen inde i handleren. En forbindelse, der åbnes ved import, kan lukkes af serveren, før den første bruger logger ind, og den resulterende fejl ser ud som en afvist legitimationsoplysning snarere end et ødelagt script.

To afvisningsveje, én ejer

Hvis beslutningen er et lokalt opslag, ejer Python-handleren resultatet. Hvis det er et eksternt HTTP-tjek, lad kommandoens exitstatus bære svaret: en indpakning, der afslutter med en værdi forskellig fra nul, afviser login, og den sidste kommandos status bliver scriptets status uden en eksplicit exit.

Hold hemmeligheden ude af proceslisten. En fil, som root kan læse, eller en miljøværdi, som tjenesten sender videre, er sikrere end et argument, som enhver lokal bruger kan læse fra ps. Fastgør endepunktet i en variabel før kaldet, så en tastefejl fejler ved konfigurationen i stedet for under en brugers login. Rotér den hemmelighed på samme måde som enhver anden legitimationsoplysning.

Vælg én ejer per tjek. Et script, der både forespørger databasen og kalder en HTTP-tjeneste, har brug for en erklæret prioritetsregel for det tilfælde, hvor de to er uenige, ellers vil afvisningsårsagen i loggen ikke stemme med det, brugeren fik at vide.

Anvend det uden at låse administratoren ude

To sikkerhedsforanstaltninger gør ændringen reversibel: en ekstra administratorkonto, der ikke afhænger af scriptet, og en kendt god kopi opbevaret uden for scriptmappen. Anvend ændringen i et vedligeholdelsesvindue, og overvåg derefter ét testlogin og én bevidst afvisning, før du afbryder forbindelsen. Hvis loggen viser en syntaksfejl i stedet for en godkendelsesbeslutning, er det gemte script ødelagt, og hvert login vil fejle.

To forhold siger vent: du kan ikke læse værdifilen som root, eller du har ingen anden vej ind i administrationsgrænsefladen. Begge gør en lille ændring til en udelukkelse, og ingen af dem er værd at teste på en produktionsserver sidst på dagen. Access Server-dokumentationen dækker post-auth-grænsefladen og dens understøttede felter.

Relaterede artikler