Access Server injoron skriptin post_auth që redaktuat në disk
Redaktimi i skedarit post_auth në disk nuk bën asgjë: Access Server ekzekuton kopjen në bazën e të dhënave të konfigurimit. Ndiqni rrugën e vendimit dhe komandat sacli.
Një mac.py i redaktuar që nuk ndryshon asgjë është simptomi i parë i zakonshëm. Skedari në disk nuk është ai që ekzekuton Access Server; shërbimi i vërtetimit e ngarkon skriptin nga baza e të dhënave të konfigurimit të serverit, dhe pikërisht ajo kopje e ruajtur vendos për një hyrje. Derisa vlera e ruajtur të zëvendësohet, çdo provë dëshmon vetëm se skripti i vjetër ende funksionon.
Puna përcaktohet nga tri kushte: nëse vlera është vendosur ndonjëherë në bazën e konfigurimit, nëse shërbimit i është dhënë urdhër ta ringarkojë, dhe nëse kodi që ndryshuat ekzekutohet vërtet në çdo lidhje. Secili ka simptom tjetër, dhe rregullimi i të gabuarit harxhon një dritare mirëmbajtjeje.
Skedari është burim, jo kopja që punon
Access Server e mban skriptin post-auth nën çelësin auth.module.post_auth_script. Redaktimi i skedarit përditëson vetëm kopjen tuaj të punës. Daemoni lexon vlerën e ruajtur, prandaj ndryshimi mbetet i padukshëm derisa të fshini zërin e vjetër dhe të vendosni skedarin e ri në vendin e tij. Ajo vlerë e ruajtur është e vetmja kopje që konsulton shërbimi i vërtetimit.
Lexojeni përpara se ta ndryshoni. Nëse tashmë përputhet me skedarin që redaktuat, problemi nuk është në ruajtje dhe kaloni te pyetja e shtrirjes. Nëse tregon një version më të vjetër, ndryshimi nuk arriti kurrë te shërbimi.
./sacli -k auth.module.post_auth_script ConfigGetZëvendësoni kopjen e ruajtur dhe pastaj zbatojeni
Fshirja përpara shkrimit nuk është zbukurim. ConfigPut me --value_file e zëvendëson vlerën në një hap, dhe ConfigDel në fillim e bën të pamundur lënien e një zëri të vjetëruar ose të dëmtuar. Ruani një kopje të skriptit që punon jashtë drejtorisë së skripteve përpara se të filloni.
./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 e zbaton konfigurimin e ndryshuar në shërbimet e brendshme, dhe kjo është ajo që e vë skriptin e ri në fuqi. Nuk është e njëjta gjë me rinisjen e të gjithë makinës ose të daemonit, dhe nuk duhet zëvendësuar me të, përveçse kur ndryshimi juaj e kërkon.
Përdorni një shteg absolut për skedarin e vlerës dhe konfirmoni që root mund ta lexojë. Një shteg që zgjidhet nga shell-i juaj por jo nga llogaria e shërbimit prodhon një vlerë të ruajtur që duket e saktë në ConfigGet dhe dështon në hyrjen e parë. Kontrolloni rezultatin e ruajtur edhe një herë pas sacli start, jo përpara.
Shtrirja e modulit ose për çdo lidhje: ku duhet të jetë kërkesa
Python i ekzekuton deklaratat në nivel moduli një herë, kur skripti ngarkohet. Prandaj një kërkesë ndaj bazës së të dhënave e shkruar në krye të skedarit e lexon tabelën në kohën e ngarkimit dhe e mban atë përgjigje për çdo lidhje të mëvonshme. Ky është shkaku i dytë pse një ndryshim duket se nuk bën asgjë: kodi ekzekutohet, por jo kur ju e prisni.
Vendoseni kërkesën brenda trajtuesit post_auth që të ekzekutohet për çdo vërtetim. Mbani nënshkrimin e dokumentuar, rregulloni rezultatin e vërtetimit që merr trajtuesi dhe ktheni të njëjtin objekt në vend të një numri të zhveshur.
Mbajeni edhe trajtimin e lidhjes brenda trajtuesit. Një lidhje e hapur gjatë importimit mund të mbyllet nga serveri përpara se të hyjë përdoruesi i parë, dhe gabimi që rezulton duket si kredenciale të refuzuara, jo si skript i prishur.
Dy rrugë refuzimi, një pronar
Nëse vendimi është një kërkesë lokale, trajtuesi i Python-it zotëron rezultatin. Nëse është një kontroll i jashtëm HTTP, lëreni statusin e daljes së komandës të mbajë përgjigjen: një mbështjellës që del me kod jo zero e refuzon hyrjen, dhe statusi i komandës së fundit bëhet statusi i skriptit pa një exit të shprehur.
Mbajeni sekretin jashtë listës së proceseve. Një skedar i lexueshëm nga root ose një vlerë mjedisi e kaluar nga shërbimi është më i sigurt sesa një argument që çdo përdorues lokal mund ta lexojë nga ps. Fiksoni pikën fundore në një variabël përpara thirrjes, që një gabim shtypi të dështojë në konfigurim dhe jo gjatë hyrjes së dikujt. Rrotulloni atë sekret njësoj si çdo kredencial tjetër.
Zgjidhni një pronar për çdo kontroll. Një skript që pyet bazën e të dhënave dhe thërret një shërbim HTTP ka nevojë për një rregull përparësie të deklaruar për rastin kur të dyja nuk përputhen, përndryshe arsyeja e refuzimit në regjistër nuk do të përputhet me atë që iu tha përdoruesit.
Zbatojeni pa e bllokuar administratorin
Dy masa e bëjnë ndryshimin të kthyeshëm: një llogari e dytë administratori që nuk varet nga skripti, dhe një kopje e mirë e njohur e mbajtur jashtë drejtorisë së skripteve. Zbatojeni ndryshimin në një dritare mirëmbajtjeje, pastaj vëzhgoni një hyrje provë dhe një refuzim të qëllimshëm përpara se të shkëputeni. Nëse regjistri tregon një gabim sintakse në vend të një vendimi vërtetimi, skripti i ruajtur është i prishur dhe çdo hyrje do të dështojë.
Dy kushte thonë prisni: nuk mund ta lexoni skedarin e vlerës si root, ose nuk keni një rrugë të dytë në ndërfaqen e administrimit. Të dyja e kthejnë një ndryshim të vogël në bllokim, dhe asnjëra nuk ia vlen të provohet në një server prodhimi në fund të ditës. Dokumentacioni i Access Server mbulon ndërfaqen post-auth dhe fushat e mbështetura.