Upravený mac.py, ktorý nič nemení, je zvyčajný prvý príznak. Súbor na disku nie je to, čo Access Server spúšťa; služba overovania načítava skript z konfiguračnej databázy servera a práve tá uložená kópia rozhoduje o prihlásení. Kým sa uložená hodnota nenahradí, každý test dokazuje len to, že starý skript ešte funguje.

Prácu určujú tri podmienky: či bola hodnota niekedy vložená do konfiguračnej databázy, či služba dostala pokyn načítať ju znova a či sa zmenený kód skutočne vykonáva pri každom pripojení. Každá má iný príznak a oprava nesprávnej plytvá servisným oknom.

Súbor je zdroj, nie bežiaca kópia

Access Server drží skript post-auth pod kľúčom auth.module.post_auth_script. Úprava súboru aktualizuje iba vašu pracovnú kópiu. Démon číta uloženú hodnotu, takže zmena zostáva neviditeľná, kým neodstránite starý záznam a neumiestnite nový súbor na jeho miesto. Tá uložená hodnota je jediná kópia, ktorú služba overovania prezerá.

Prečítajte ju pred zmenou. Ak už zodpovedá súboru, ktorý ste upravili, problém nie je v ukladaní a prejdite k otázke rozsahu. Ak ukazuje staršiu verziu, zmena sa k službe nedostala.

./sacli -k auth.module.post_auth_script ConfigGet

Nahraďte uloženú kópiu a potom ju použite

Mazanie pred zápisom nie je ozdoba. ConfigPut s --value_file nahradí hodnotu v jednom kroku a ConfigDel najprv znemožní, aby zostal zastaraný alebo poškodený záznam. Pred začiatkom si uložte kópiu pracovného skriptu mimo adresára skriptov.

./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 aplikuje zmenenú konfiguráciu na interné služby, a to je to, čo uvedie nový skript do platnosti. Nie je to to isté ako reštart celého stroja alebo démona a nemalo by sa to nahradiť, ak to vaša zmena nevyžaduje.

Použite absolútnu cestu k súboru s hodnotou a overte, že ju root dokáže prečítať. Cesta, ktorá sa vyrieši z vášho shellu, ale nie z účtu služby, vytvorí uloženú hodnotu, ktorá v ConfigGet vyzerá správne a zlyhá pri prvom prihlásení. Skontrolujte uložený výsledok ešte raz po sacli start, nie pred ním.

Rozsah modulu alebo pre každé pripojenie: kam patrí dopyt

Python vykonáva príkazy na úrovni modulu raz, pri načítaní skriptu. Preto dopyt do databázy napísaný na začiatku súboru číta tabuľku pri načítaní a tento výsledok si drží pre každé ďalšie pripojenie. To je druhý dôvod, prečo sa úprava javí ako neúčinná: kód sa vykonáva, ale nie vtedy, keď očakávate.

Umiestnite dopyt do obslužnej rutiny post_auth, aby sa vykonával pri každom overení. Zachovajte dokumentovaný podpis, upravte výsledok overenia, ktorý rutina dostáva, a vráťte ten istý objekt namiesto holého čísla.

Prácu s pripojením držte tiež vnútri rutiny. Pripojenie otvorené pri importe môže server zavrieť skôr, než sa prihlási prvý používateľ, a výsledná chyba vyzerá ako odmietnuté prihlasovacie údaje, nie ako pokazený skript.

Dve cesty odmietnutia, jeden vlastník

Ak je rozhodnutie lokálny dopyt, výsledok vlastní rutina v Pythone. Ak ide o externú kontrolu HTTP, nechajte návratový kód príkazu niesť odpoveď: obal, ktorý skončí nenulovým kódom, prihlásenie odmietne a stav posledného príkazu sa stane stavom skriptu bez výslovného exit.

Držte tajomstvo mimo zoznamu procesov. Súbor čitateľný pre root alebo hodnota prostredia odovzdaná službou je bezpečnejšia než argument, ktorý môže ktorýkoľvek lokálny používateľ prečítať z ps. Pred volaním pripnite koncový bod do premennej, aby preklep zlyhal pri konfigurácii, a nie počas niekoho prihlásenia. Rotujte to tajomstvo rovnako ako každé iné prihlasovacie údaje.

Vyberte jedného vlastníka na jednu kontrolu. Skript, ktorý sa dopytuje databázy aj volá službu HTTP, potrebuje deklarované pravidlo priority pre prípad, keď sa obe rozchádzajú, inak dôvod odmietnutia v logu nebude zodpovedať tomu, čo sa používateľovi povedalo.

Nasaďte to bez uzamknutia správcu

Dve poistky robia zmenu vratnou: druhý účet správcu, ktorý nezávisí od skriptu, a známa dobrá kópia uložená mimo adresára skriptov. Zmenu nasaďte v servisnom okne a potom pred odpojením sledujte jedno skúšobné prihlásenie a jedno úmyselné odmietnutie. Ak log ukáže syntaktickú chybu namiesto rozhodnutia o overení, uložený skript je pokazený a každé prihlásenie zlyhá.

Dve podmienky hovoria počkajte: nemôžete prečítať súbor s hodnotou ako root alebo nemáte druhú cestu do administračného rozhrania. Obe menia malú zmenu na uzamknutie a ani jedna nestojí za test na produkčnom serveri na konci dňa. Dokumentácia Access Server pokrýva rozhranie post-auth a jeho podporované polia.

Súvisiace články