Muokattu mac.py, joka ei muuta mitään, on tavallinen ensimmäinen oire. Levyllä oleva tiedosto ei ole se, mitä Access Server suorittaa; todennuspalvelu lataa skriptin palvelimen konfiguraatiotietokannasta, ja juuri tallennettu kopio ratkaisee kirjautumisen. Ennen kuin tallennettu arvo korvataan, jokainen testi todistaa vain, että vanha skripti toimii edelleen.

Työn ratkaisee kolme ehtoa: onko arvo koskaan viety konfiguraatiotietokantaan, onko palvelua käsketty lataamaan se uudelleen, ja suoritetaanko muuttamasi koodi todella jokaisella yhteydellä. Jokaisella on eri oire, ja väärän korjaaminen tuhlaa huoltoikkunan.

Tiedosto on lähde, ei käynnissä oleva kopio

Access Server pitää post-auth-skriptiä avaimen auth.module.post_auth_script alla. Tiedoston muokkaaminen päivittää vain työkopiosi. Daemon lukee tallennetun arvon, joten muutos pysyy näkymättömänä, kunnes poistat vanhan merkinnän ja asetat uuden tiedoston sen tilalle. Se tallennettu arvo on ainoa kopio, jota todennuspalvelu tarkastelee.

Lue se ennen kuin muutat sitä. Jos se vastaa jo muokkaamaasi tiedostoa, ongelma ei ole tallennuksessa ja siirry laajuuskysymykseen. Jos se näyttää vanhempaa versiota, muutos ei koskaan saavuttanut palvelua.

./sacli -k auth.module.post_auth_script ConfigGet

Korvaa tallennettu kopio ja ota se sitten käyttöön

Poistaminen ennen kirjoittamista ei ole koristelua. ConfigPut yhdessä --value_file-komennon kanssa korvaa arvon yhdessä vaiheessa, ja ConfigDel ensin tekee mahdottomaksi jättää vanhentunut tai vioittunut merkintä jäljelle. Tallenna toimivasta skriptistä kopio skriptihakemiston ulkopuolelle ennen aloittamista.

./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 ottaa muutetun konfiguraation käyttöön sisäisissä palveluissa, ja juuri se saa uuden skriptin voimaan. Se ei ole sama kuin koko koneen tai daemonin uudelleenkäynnistys, eikä sitä pitäisi korvata sellaisella, ellei tekemäsi muutos sitä vaadi.

Käytä arvotiedostolle absoluuttista polkua ja varmista, että root voi lukea sen. Polku, joka ratkeaa komentotulkistasi mutta ei palvelutilistä, tuottaa tallennetun arvon, joka näyttää ConfigGet-kohdassa oikealta ja epäonnistuu ensimmäisellä kirjautumisella. Tarkista tallennettu tulos vielä kerran sacli start-komennon jälkeen, ei ennen sitä.

Moduulin laajuus vai yhteyttä kohti: mihin kysely kuuluu

Python suorittaa moduulitason lauseet kerran, kun skripti ladataan. Siksi tiedoston alkuun kirjoitettu tietokantakysely lukee taulun lataushetkellä ja pitää kyseisen vastauksen jokaiselle myöhemmälle yhteydelle. Tämä on toinen syy siihen, miksi muutos näyttää tekevän ei mitään: koodi suoritetaan, mutta ei silloin kuin odotat.

Laita kysely post_auth-käsittelijän sisään, jotta se suoritetaan jokaisella todennuksella. Säilytä dokumentoitu allekirjoitus, säädä todennuksen tulos, jonka käsittelijä vastaanottaa, ja palauta sama olio alaston luvun sijaan.

Pidä myös yhteyden käsittely käsittelijän sisällä. Tuonnin yhteydessä avattu yhteys voi sulkeutua palvelimella ennen kuin ensimmäinen käyttäjä kirjautuu, ja tuloksena oleva virhe näyttää hylätyltä tunnistetiedolta eikä rikkinäiseltä skriptiltä.

Kaksi hylkäyspolkua, yksi omistaja

Jos päätös on paikallinen kysely, Python-käsittelijä omistaa tuloksen. Jos se on ulkoinen HTTP-tarkistus, anna komennon poistumistilan kantaa vastaus: nollasta poikkeavalla koodilla poistuva kääre hylkää kirjautumisen, ja viimeisen komennon tila tulee skriptin tilaksi ilman nimenomaista exit-komentoa.

Pidä salaisuus poissa prosessiluettelosta. Rootin luettavissa oleva tiedosto tai palvelun välittämä ympäristöarvo on turvallisempi kuin argumentti, jonka kuka tahansa paikallinen käyttäjä voi lukea ps-kohdasta. Kiinnitä päätepiste muuttujaan ennen kutsua, jotta kirjoitusvirhe epäonnistuu konfiguroinnin aikana eikä jonkun kirjautuessa. Kierrätä salaisuus kuten mikä tahansa muu tunnistetieto.

Valitse yksi omistaja tarkistusta kohden. Skripti, joka sekä kysyy tietokantaa että kutsuu HTTP-palvelua, tarvitsee julistetun ensisijaisuussäännön tilanteeseen, jossa ne ovat eri mieltä, muuten lokin hylkäyssyyt eivät vastaa sitä, mitä käyttäjälle sanottiin.

Ota se käyttöön lukitsematta ylläpitäjää ulos

Kaksi suojausta tekee muutoksesta palautettavan: toinen ylläpitäjätili, joka ei riipu skriptistä, ja tunnetusti toimiva kopio, jota pidetään skriptihakemiston ulkopuolella. Ota muutos käyttöön huoltoikkunassa ja seuraa sitten ennen yhteyden katkaisemista yhtä testikirjautumista ja yhtä tarkoituksellista hylkäystä. Jos loki näyttää todennusapäätöksen sijaan syntaksivirheen, tallennettu skripti on rikki ja kaikki kirjautumiset epäonnistuvat.

Kaksi ehtoa sanoo odota: et voi lukea arvotiedostoa rootina, tai sinulla ei ole toista reittiä ylläpitoliittymään. Molemmat muuttavat pienen mutoksen uloslukitukseksi, eikä kumpaakaan kannata testata tuotantopalvelimella päivän lopussa. Access Serverin dokumentaatio kattaa post-auth-liittymän ja sen tuetut kentät.

Aiheeseen liittyvät artikkelit