OpenVPN toimii täsmälleen yhden kirjautumisskriptin tulosteen perusteella: poistumistilan. Kaikki muu, mitä skripti tekee, on koristelua. Koukku voi päästä oikeaan vahvistajaan, jäsentää vastauksen ja tulostaa ystävällisen rivin ja silti palauttaa tilan, joka tarkoittaa päinvastaista kuin kirjoittaja aikoi. Lue ensin sopimus ja kirjoita sovitin sen ympärille, niin koko tämä virheluokka katoaa.

Sopimus on pieni: tunnista lähetetty tili, kysy hyväksytyltä vahvistajalta aiottu kysymys ja hyväksy vain kyseisen vahvistajan dokumentoitu positiivinen tulos kyseiselle pyynnölle. Kaikki muu on infrastruktuuria.

Kolme tilaa, joita koukku voi palauttaa

auth-user-pass-verify osalta OpenVPN 2.6 -käsikirja määrittää poistumiskoodin 0 hyväksymiseksi, 1 hylkäämiseksi ja 2 lykätyksi todennukseksi. Nämä ovat ainoat kolme vastausta, jotka palvelin ymmärtää, ja jokaisella on erilainen seuraus yhteydelle. Skripti, joka poistuu viimeisen komentonsa tilalla, on käytännössä antanut lokikutsun tai siivousvaiheen äänestää. Kirjoita tila eksplisiittisesti jokaiseen haaraan, myös haaroihin, jotka eivät koskaan päässeet vahvistajaan.

HTTP:n onnistuminen ja todennuksen onnistuminen ovat eri kerroksia, ja niiden sekoittaminen on yleisin tapa, jolla tämä koukku menee pieleen. Vastaus 202 tarkoittaa, että pyyntö hyväksyttiin käsiteltäväksi, ei että salasana on vahvistettu. Määritä odotettu tila, vastauksen muoto ja lopullinen ratkaisu sinulle annetusta API-sopimuksesta, äläkä keksi kenttänimeä siksi, että se näyttää uskottavalta.

Jos vastaus todella saapuu myöhemmin, se on lykätty polku ja se on rakennettava sellaiseksi. Lykätty yritys, jota ei koskaan saateta loppuun, pitää resursseja kunnes aikakatkaisu umpeutuu.

Lue tunnistetiedosto täsmälleen sellaisena kuin se on kirjoitettu

Dokumentoidussa tiedostomenetelmässä palvelin kirjoittaa käyttäjätunnuksen ja salasanan väliaikaisen tiedoston kahdeksi ensimmäiseksi riviksi, välittää polun skriptille ja poistaa tiedoston, kun skripti palaa. Lue ne kaksi riviä datana: älä koskaan aja tiedostoa sourcen kautta, älä koskaan arvioi sitä äläkä koskaan liitä sen sisältöä komentoriville, jossa prosessitaulu voi nähdä sen. Säilytä salasana tavu tavulta, koska normalisointi, jota ehkä soveltaisit käyttäjätunnukseen, muuttaa tunnistetietoa hiljaa. Väliaikaisen tiedoston hakemisto on käyttöönottopäätös, joten varmista, että se on olemassa eikä ole kaikkien luettavissa isännällä.

Pidä vahvistajan oma tunnistetieto erillään käyttäjän tiedoista: se kuuluu yhdyskäytäväintegraatioon, asuu alustan salaisuuksien varastossa ja tarvitsee vain vahvistusluvan, joten se ei ole todiste siitä, että jokin tietty henkilö on todennettu. Älä anna koukun ryhtyä toiseksikaan salasanan vahvistajaksi. Hash-vertailun uudelleenkirjoittaminen käsin ei tule turvalliseksi silmukan optimoinnilla, ja ylläpidetty vahvistaja ymmärtää jo tilivaraston suolatun ja kalliin kaavan.

Päätä, mitä luokittelematon vastaus tarkoittaa

Aikakatkaisut, siirtovirheet, virheelliset vastaukset ja käyttämätön tausta jakavat yhden ominaisuuden: mikään niistä ei ole positiivinen vahvistus. Koukun tulisi epäonnistua suljetusti jokaisen kohdalla ja kirjata syy, jonka perusteella operaattori voi toimia. Se syy kuuluu suojattuun lokiin, ei viestiin, joka palautetaan yhdistämään pyrkivälle henkilölle.

Ole yhtä huolellinen poluilla, jotka eivät koskaan saavuta vahvistajaa. Puuttuva asetusarvo, lukukelvoton salaisuus tai asentamaton riippuvuus pitäisi tuottaa hylkäys erottuvalla operatiivisella merkillä eikä vahingossa tapahtunutta hyväksyntää. Testaa ne haarat poistamalla riippuvuus laboratoriossa sen sijaan, että pohtisit niitä. Missä lokituksen epäonnistuminen voi muuttaa poistumistilaa, lokituksesta on tullut osa päätöstä ja se on tehtävä vaarattomaksi.

Palvelimen kokoonpanolla on merkitystä myös tässä: käyttäjän määrittämiä skriptejä noudatetaan vain, kun käynnissä oleva kokoonpano sallii ne vaaditulla suojaustasolla, ja tämä asetus on tietoinen valinta eikä oletusarvo, jota pitäisi nostaa.

Vahvista ratkaisu, älä tulostettu rivi

Rakenna testi, joka tarkastelee poistumistilaa suoraan. Kirjoita näyte tunnistetiedostosta, aja koukku sitä vasten tunnetusti hyvällä ja tunnetusti huonolla tilillä ja lue tila, jonka kuori ilmoittaa, älä tekstiä, jonka skripti tulostaa. Tämä yksi tarkistus nappaa useimmat sopimusvirheet ennen kuin asiakas edes yhdistää.

Aja sitten samat tapaukset oikean asiakkaan kautta tuotantoon kuulumatonta kuuntelijaa vastaan ja vahvista, mitä palvelin kirjasi: hyväksytty, hylätty vai lykätty. Kata poistettu käytöstä oleva tili, väärä salasana, virheellinen vahvistajan vastaus, aikakatkaisu ja tavoittamaton vahvistaja. Jos jokin tapaus päätyy tilaan, jota et osaa nimetä, sovitin ei ole valmis.

Pidä vahvistajan tuloksen yhdistäminen poistumistilaan skriptin vieressä repositoriossa, jotta seuraava insinööri voi lukea sopimuksen tekemättä koodille käänteismallinnusta.

Aiheeseen liittyvät artikkelit