client-config-dir ohitetaan, kun OpenVPN:stä tuli palvelu
Suhteellinen client-config-dir ratkeaa daemonin työhakemistoa vasten. Lue unit, käy läpi polun oikeudet ja vahvista sitten haku lokista.
Tunneli nousee ja asiakas yhdistää, mutta kiinteä osoite ja työnnetyt reitit, jotka määrittelit sille yhdelle käyttäjälle, puuttuvat. Lokissa ei lue “file not found”, ja juuri se lähettää ihmiset uusimaan varmenteita. Useimmissa näissä tapauksissa daemon ajetaan eri hakemistosta kuin se komentotulkki, jossa testasit, ja client-config-dir ei koskaan ratkennut niin kuin oletit. Korjaus on polun korjaus, ei tunnistetietojen nollaus.
Lue unit ennen kuin kosket konfiguraatioon
Aloita prosessista, joka oikeasti ajetaan, älä tiedostosta, jota muokkasit. Kysy systemd:ltä suoritusrivi, työhakemisto ja tili, jolle se vaihtuu. Ne kolme vastausta selittävät useimmat tämän luokan viat:
systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectoryTyhjä WorkingDirectory tarkoittaa, että unit käynnistyy hakemistossa /, joten suhteellista client-config-dir ccd etsitään hakemistosta /ccd. Sitä hakemistoa ei käytännössä koskaan ole, eikä daemon pidä sen puuttumista kohtalokkaana.
Vertaa sitä interaktiiviseen käynnistykseen, jota käytit testatessasi, jossa komentotulkkisi nykyinen hakemisto oli luultavasti konfiguraatiohakemisto. Sama tiedosto, samat avainsanat, kaksi eri tulosta.
Mitä vasten suhteellinen polku ratkeaa
Avainsana ratkeaa prosessin työhakemistoa vasten sillä hetkellä, kun valintaa käytetään. Se ei tarkoita “sen konfiguraatiotiedoston vieressä, jonka annoin valinnalla --config”. OpenVPN lukee mielellään konfiguraation absoluuttisesta polusta ja ratkaisee silti suhteelliset arvot muualla, ja juuri se on tässä ansa. OpenVPN 2.6 -käsikirja esittää säännön kohdassa --client-config-dir ja vielä kohdassa --cd.
Avainsana cd muuttaa sitä kontekstia ennen kuin muita tiedostoja luetaan, joten unit, joka asettaa cd /etc/openvpn/server ja sitten client-config-dir ccd, ratkeaa muotoon /etc/openvpn/server/ccd. Jos lisäät cd, tarkista direktiivien järjestys ja muista, että se vaikuttaa jokaiseen muuhun suhteelliseen viittaukseen samassa tiedostossa.
Käy polku läpi daemonin tilinä
Polku voi olla oikein ja silti lukukelvoton. Etuoikeuksien pudotuksen jälkeen daemon ei ole enää root, joten jokainen ylähakemisto tarvitsee sille tilille hakuoikeuden, ja asiakastiedosto itse lukuoikeuden. Yksi puuttuva suoritusbitti ylähakemistossa riittää piilottamaan tiedoston, ja virhe näkyy vain asiakkaana, joka saa hiljaa oletusaltaan.
namei tulostaa jokaisen osan oikeudet järjestyksessä, mikä on nopeampaa kuin hakemistojen tarkistaminen yksi kerrallaan:
namei -l /etc/openvpn/server/ccd/client1Testaa sitten lukeminen palvelutilinä eikä itsenäsi:
runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readableJos unit käyttää chroot, hakemiston on oltava vankilan sisällä, ja konfiguraation polku tulkitaan vasta chrootin jälkeen. Tiedosto, joka on isännällä vankilan ulkopuolella, on sisältä näkymätön.
Vahvista haku sen sijaan että arvailet
Nosta lokin tasoa yhtä uudelleenkäynnistystä varten ja lue, mitä palvelin sanoo asiakaskohtaisista valinnoista. Tasolla verb 4 daemon raportoi tuodun asiakaskohtaisen konfiguraation, joten puuttuva rivi on suora todiste siitä, ettei kyseiselle yhteydelle luettu yhtään tiedostoa.
openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccdAja se etualalla varaportissa ja yhdistä yksi asiakas. Se poistaa systemd:n kokonaan kuvasta: jos ohitukset ilmestyvät tässä mutta eivät palvelun alla, ero on unitin kontekstissa, ei tiedostossa.
Päätä, mitä pitäisi tapahtua, kun mikään tiedosto ei täsmää. Ilman valintaa ccd-exclusive asiakas hyväksytään vain yleisen altaan asetuksilla, ja se on yllä kuvattu hiljainen vika. Sen kanssa puuttuva tiedosto muuttuu hylätyksi yhteydeksi, ja se hylkäys on helpompi huomata mutta vaikeampi selvittää kuormituksen alla.
Korjaa, käynnistä uudelleen, varmista
Tee hakemistosta absoluuttinen konfiguraatiossa ja pidä se sellaisena. Suhteelliset polut ovat turvallisia vain, kun unit kiinnittää työhakemiston, ja kiinnittäminen on ylimääräinen liikkuva osa, jonka joku myöhemmin poistaa.
client-config-dir /etc/openvpn/server/ccd
ccd-exclusiveKäynnistä instanssi uudelleen, yhdistä yksi tunnettu asiakas ja lue osoite, jonka se sai, sekä sille työnnetyt reitit. Jos osoite täsmää sen asiakkaan tiedostossa olevan rivin ifconfig-push kanssa, haku onnistui. Jos asiakas päätyy yhä yleiseen altaaseen, palaa lokirivien määrään: nolla tuontia tarkoittaa, että polku tai identiteetti on väärä, yksi väärällä sisällöllä tuotu tarkoittaa, että muokkaat eri tiedostoa kuin daemon lukee.
Peruuta palauttamalla edellinen unit ja konfiguraatio yhdessä ja käynnistä sitten uudelleen. Varmenteita ei tarvitse myöntää uudelleen mihinkään tähän, ja hakemisto-ongelman käsitteleminen tunnistetieto-ongelmana on se tapa, jolla viiden minuutin korjauksesta tulee huoltoikkuna.