OpenVPN lukee salasanan päätteltä, ei stdinistä
Missä OpenVPN todella lukee salasanan, miksi stdinille ohjattu tiedosto epäonnistuu ja kolme tuettua tapaa skriptattuun kirjautumiseen Linuxilla ja macOS:lla.
OpenVPN kysyy käyttäjätunnuksen ja salasanan ohjaavalla päätteellä, eikä vakiosyötteeseen ohjattu tiedosto ole tuo pääte. Juuri tämä yksi yksityiskohta selittää skriptin, joka jää jumiin, vaikka salasana on suoraan putkessa. Kehotteen piirtää asiakasohjelma ja lukeminen tapahtuu päätelaitteesta, joten stdinin uudelleenohjaus ei muuta mitään. Syötä asiakasohjelmalle jokin sen dokumentoiduista syöttötavoista, niin sama skripti yhdistää ensi yrittämällä.
Kolme tapaa kattaa lähes kaikki tilanteet, ja kukin epäonnistuu omalla tavallaan. Valitse sen kehotteen mukaan, jonka asiakasohjelma todella näyttää, älä sen vaihtoehdon mukaan, joka on helpoin skriptata.
Kehote ei tule stdinistä
Kun OpenVPN tarvitsee tunnistetietoja, se avaa ohjaavan päätteen ja lukee siitä. Siksi interaktiivinen testi näyttää hyvältä, kun taas sama komento cronin tai unit-tiedoston alla seisoo toimettomana ja kehote on kirjoitettu lokiin, jota kukaan ei katso. Jotkin versiot putoavat takaisin vakiosyötteeseen, kun päätettä ei ole, ja tämä epäjohdonmukaisuus on pahempaa kuin kova virhe, koska se kätkee ongelman käyttöönottoon asti.
Tarkista ympäristö ennen kuin kirjoitat yhtään koodia: aja asiakasohjelma samalla käyttäjällä ja samalla stdinillä kuin ajastin tai palvelunhallinta aikoo. Jos kehote ei koskaan ilmesty lokiin eikä prosessi etene, jokin odottaa päätettä, jota ei ole olemassa.
Ensimmäinen tapa: kaksirivinen tunnistetiedosto
Todennusvaihtoehto ottaa polun, ja tiedostossa on täsmälleen kaksi riviä, ensin käyttäjätunnus ja sitten salasana, eikä mitään muuta. Anna polku nimenomaisesti sen sijaan, että luotat oletustiedostonimeen, sillä työhakemistoon eksynyt tunnistetiedosto on tapa, jolla väärä tili päätyy käyttöön. Aseta tilaksi 0600 ja anna omistajuus tilille, joka ajaa asiakasohjelmaa.
Asiakasohjelma lukee tiedoston kerran käynnistyksessä, joten salasanan vaihtaminen tarkoittaa prosessin uudelleenkäynnistystä. Se on yleensä se käyttäytyminen, jonka haluat, ja se kuuluu runbookiin vaihtomenettelyn viereen.
Toinen tapa: askpass avaimen salalauseelle
Salalauseella suojattu yksityinen avain nostaa toisen, erilaisen kehotteen, ja sillä on oma tiedostopohjainen vastauksensa: askpass-vaihtoehto lukee salalauseen tiedoston ensimmäiseltä riviltä. SSH-pohjaisissa tunneleissa vastine on askpass-ohjelma, jonka asiakasohjelma suorittaa ja jonka vakiotulosteesta tulee salaisuus.
Kumpikaan muoto ei pane salaisuutta argumenttiluetteloon, ja molemmat jättävät sen olemaan tiedostona tai sen tulostavana suoritettavana ohjelmana. Suoja on tiedosto-oikeudet ja prosessin omistajuus, ei hämäryys. Apuri, joka kaikuu koodiin kirjoitettua merkkijonoa, on salaisuus lisäaskelein.
Kolmas tapa: portaaliasiakkaan oma CLI
Yritysasiakkaat toimittavat yleensä komentorivin aloituspisteen, joka yhdistää nimettyyn portaaliin ilman ikkunaa, ja se on tuettu polku. Linuxilla GlobalProtect-asiakas tarjoaa yhdistämis- ja varmenneimporttitoiminnot CLI:nsä kautta, ja varmenteen todennusta käyttävät portaalit tarvitsevat tuontivaiheen ennen kuin automatisoitu yhteys voi toimia. Suosi sitä synteettisiin näppäinpainalluksiin verrattuna: saat todellisen poistumistilan, et ole riippuvainen ikkunan kohdistuksesta, ja se kestää lukitun näytön.
Jos ensimmäinen yhteys tarvitsee vielä ihmisen hyväksymään varmenteen, automaatio ei ole valmis. Tee tuonti asennuksen aikana ja kirjaa se esiehdoksi.
Kun virtaus tarvitsee pseudopäätteen
Sekvenssillä, joka kysyy salasanaa ja sitten kertakäyttökoodia, ei ole yhtä tiedostoa luettavaksi. Pääteajuri kuten Expect on oikea työkalu, koska se odottaa kutakin mallia vuorollaan, ja se tarvitsee käynnistetyn prosessin ennen kuin se voi sovittaa yhtään mitään.
Kaksi epäonnistumista hallitsee. Skripti, joka odottaa kehotetta käynnistämättä asiakasohjelmaa, odottaa ikuisesti, eikä Tcl ole kuori, joten expect-lohkon sisään kirjoitettu kuoren aritmetiikka ei arvioidu niin kuin se luetaan. Pidä debug-lippu päällä, kun rakennat malleja, ja sammuta se sitten.
Salaisuudet, jotka vuotavat, ja missä ne piilevät
Kaikki argumenttina välitetty näkyy prosessilistassa, joten tunnistetiedot kuuluvat tiedostoon tai apurin taakse, eivät koskaan komentoriville. Kertakäyttökoodit kuluvat suunnittelun mukaan ja ne on tuotettava jokaista yritystä varten. Virhelokit kantavat usein käyttäjätunnuksen ja joskus enemmän, joten redigoi ne ennen kuin lähetät ne minnekään, ja pidä salaisuus poissa profiilista itsestään, koska upotetun salasanan sisältävä asetustiedosto liimataan tiketteihin ja tietovarastoihin. Tilin vaihtaminen tarkoittaa silloin jokaisen kopion metsästämistä, ja juuri se kustannus tämä järjestely välttää.
Auditoi valitsemasi tavat ja kytke ne sitten unit-tiedostoon tai ajastimeen, joka todella ajaa asiakasohjelmaa. Tunneli elää täsmälleen niin kauan kuin tuo prosessi elää.