Palvelu epäonnistuu, lokit mainitsevat spawnin ja hakemiston, ja ensimmäinen vaisto on tarkistaa VPN-määritys. Siitä tiedostosta ei ole vielä luettu mitään. systemd epäonnistui valmistellessaan prosessia, ennen kuin suoritettava tiedosto käynnistyi, joten yhtään parseria, sertifikaattia tai etäisäntää ei ole konsultoitu. Statuskoodin lukeminen lausuntona systemdistä eikä OpenVPN:stä on se, mikä tekee tästä lyhyen tutkinnan.

Lue statuskoodi ennen sovellusta

Palvelun nimen jälkeinen numeerinen koodi nimeää vaiheen, joka epäonnistui. Hakemistovirhe raportoidaan CHDIR-tilana, kun taas suoritettava tiedosto, jota ei voitu ajaa, on täysin eri koodi. Ne näyttävät samanlaisilta yhteenvetorivillä, eikä niiden syillä ole mitään yhteistä.

Tällä erolla on merkitystä, koska korjaukset ovat eri tiedostoissa. CHDIR-virhe koskee polkua ja sitä, miten palvelu sen näkee. Exec-virhe koskee binääriä, sen tulkkia tai siihen liittymätöntä mountia. VPN:n etäpisteen, salausluettelon tai sertifikaattipolun muuttaminen ei korjaa kumpaakaan.

Varmista, että virhe tapahtuu käynnistyksessä eikä onnistuneen ajon jälkeen. Jos palvelu toimi eilen ja epäonnistuu nyt samassa vaiheessa, jokin on muuttunut hakemistossa, sen käyttöoikeuksissa tai unitissa itsessään, ja se muutos on etsimäsi todiste.

Kysy unitilta, missä se haluaa olla

Lue tehokas unit sen sijaan, että lukisit tiedoston, jonka luulet olevan asennettu, koska drop-init voivat ohittaa työhakemiston ilman, että koskaan muokkaat pääunityä. Shown tuloste vastaa kysymykseen suoraan:

systemctl cat [email protected]
systemctl show [email protected] -p WorkingDirectory -p RootDirectory -p User -p ProtectHome
journalctl -u [email protected] -b --no-pager | tail -30

Upstream-palvelinmallin kohdalla työhakemisto on palvelimen määrityshakemisto ja instanssin nimi valitsee sen sisällä olevan profiilin. Branch-niminen instanssi odottaa siis omaa tiedostoaan samassa hakemistossa, eikä muualle sijoitettu profiili täytä työhakemistovaatimusta lainkaan.

Vertaa sitä, mitä unit vaatii, siihen, mitä on olemassa. Aiemmin ollut polku, symbolinen linkki, joka osoittaa nyt muualle, tai instanssin nimi, joka ei enää vastaa hakemistoa, ovat tavallisia muutoksia, jotka tuottavat juuri tämän virheen.

Tarkista polku sellaisena kuin palvelu sen näkee

Shellisi ja palvelu eivät jaa samaa tiedostojärjestelmänäkymää. Määritetty juurihakemisto tai root image muuttaa sitä, mitä absoluuttinen polku tarkoittaa unitin sisällä, ja isännällä ilmeisesti oleva polku voi puuttua siitä nimiavaruudesta. Lue unitin asetukset ennen kuin luotat manuaaliseen testiin.

Käyttöoikeudet pahentavat ongelmaa. Palvelu toimii tiettynä käyttäjänä, ja sen käyttäjän on voitava kulkea jokaisen ylähakemiston läpi päästäkseen kohteeseen, ei vain luettava itse kohdetta. Hakemisto, joka on rootin luettavissa mutta ei palvelukäyttäjän kuljettavissa, tuottaa virheen, joka näyttää puuttuvalta polulta.

namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths

Koventamisasetukset ovat myös osa tätä kuvaa. Unit, joka piilottaa kotihakemistot tai tekee osan tiedostojärjestelmästä vain luku -tilaan, tekee täsmälleen sen, mihin se on määritetty, ja työhakemiston on sijaittava jossain, missä sandbox vielä paljastaa sen.

Korjaa omistaja ja odota sitten eri virhettä

Korjaa asettelu tai unit sen kautta, joka omistaa kyseisen määrityksen. Profiilin siirtäminen odotettuun hakemistoon on perusteltu korjaus, kun asettelu on väärä, mutta se ei selitä hakemistoa, johon ei pääse, joten älä kohtele sitä yleisenä vastauksena.

Vastusta oikopolkua laajentaa käyttöoikeuksia määrityspuussa tai poistaa sandbox. Molemmat saavat oireen katoamaan samalla, kun ne poistavat tarkoituksella asetetut suojaukset, ja seuraavaa virhettä on vaikeampi tulkita.

Käynnistä instanssi uudelleen ja lue seuraava tapahtuma sen sijaan, että olettaisit onnistumisen. Todennäköinen seuraava virhe on, että OpenVPN ei voi avata määritystiedostoaan, mikä on edistystä: työhakemistoon päästiin ja parseri on nyt käynnissä. Seuraa unitin todellista tiedostokartoitusta siitä eteenpäin sen sijaan, että palaisit verkkotrubbleshoottaukseen.

systemdin suoritusviite määrittelee, miten työhakemistoa tulkitaan yhdessä juurihakemistojen ja sandboxin kanssa. Muistettava kaava on yksinkertainen: jokainen statuskoodi nimeää eri vaiheen, ja vain sovelluksen omat virheet kuvaavat sovellusta.

Aiheeseen liittyvät artikkelit