status=200/CHDIR: systemd ei käivitanud OpenVPN-i kordagi
CHDIR-i viga tähendab, et systemd ei suutnud kataloogi siseneda, mitte et OpenVPN ei suutnud profiili lugeda. Lugege unit-it enne, kui VPN-i konfiguratsiooni puutute.
Teenus ebaõnnestub, logid mainivad spawni ja kataloogi ning esimene instinkt on kontrollida VPN-i konfiguratsiooni. Selles failis ei ole veel midagi loetud. systemd ebaõnnestus protsessi ettevalmistamisel, enne kui käivitatav fail jooksis, seega ei ole konsulteeritud ühtki parserit, ühtki sertifikaati ega ühtki kaugvastuvõtjat. Statuskoodi lugemine väitena systemd-i, mitte OpenVPN kohta on see, mis muudab selle lühikeseks uurimiseks.
Lugege statuskoodi enne rakendust
Teenuse nime järel olev numbriline kood nimetab etapi, mis ebaõnnestus. Kataloogi viga teatatakse CHDIR-i staatusena, samas kui käivitamatu käivitatav fail on hoopis teine kood. Need kaks näevad kokkuvõtvas reas sarnased välja ja nende põhjustel ei ole midagi ühist.
See erinevus on oluline, sest parandused on erinevates failides. CHDIR-i viga puudutab teed ja seda, kuidas teenus seda näeb. Exec-i viga puudutab binaarfaili, selle interpretaatorit või mitteseotud mount'i. VPN-i kaugpunkti, šifrite nimekirja või sertifikaadi tee muutmine ei suuda kumbagi lahendada.
Kinnitage, et viga on alguses, mitte pärast edukat tööd. Kui teenus töötas eile ja ebaõnnestub nüüd samas etapis, on midagi muutunud kataloogi, selle õiguste või unit-i enda juures, ja see muudatus on tõend, mida otsida.
Küsige unit-ilt, kus see olla tahab
Lugege efektiivset unit-it, mitte faili, mille arvate olevat paigaldatud, sest drop-in-id võivad töökataloogi üle kirjutada ilma, et te kunagi põhiunit-it muudaksite. Show väljund vastab küsimusele otse:
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-serveri malli puhul on töökataloog serveri konfiguratsioonikataloog ja instantsi nimi valib selle sees oleva profiili. Nimega branch instants ootab seega oma faili samas kataloogis, ja mujale paigutatud profiil ei vasta töökataloogi nõudele üldse.
Võrrelge, mida unit nõuab, sellega, mis olemas on. Varem eksisteerinud tee, nüüd mujale osutav sümbollink või instantsi nimi, mis ei vasta enam kataloogile, on kõik tavalised muudatused, mis tekitavad täpselt selle vea.
Kontrollige teed nii, nagu teenus seda näeb
Teie shell ja teenus ei jaga sama failisüsteemi vaadet. Konfigureeritud juurkataloog või root image muudab seda, mida absoluutne tee unit-i sees tähendab, ja hostis ilmselgelt olemas olev tee võib selles nimeruumis puududa. Lugege unit-i seadeid enne, kui usaldate käsitsi testi.
Õigused süvendavad probleemi. Teenus töötab konkreetse kasutajana ja see kasutaja peab saama läbida iga ülemkataloogi, et sihtmärgini jõuda, mitte ainult sihtmärki ennast lugeda. Rootile loetav, kuid teenuse kasutajale läbimatu kataloog tekitab vea, mis näeb välja nagu puuduv tee.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Kõvistamise seaded on samuti osa sellest pildist. Unit, mis peidab kodukataloogid või muudab osa failisüsteemist kirjutuskaitstuks, teeb täpselt seda, milleks see konfigureeriti, ja töökataloog peab asuma kuskil, kus sandbox selle ikka välja annab.
Parandage omanik, siis oodake teist viga
Parandage paigutus või unit selle kaudu, kellele see konfiguratsioon kuulub. Profiili liigutamine oodatud kataloogi on õigustatud parandus, kui paigutus on vale, kuid see ei selgita kataloogi, kuhu ei saa siseneda, seega ärge kohelge seda üldise vastusena.
Vastu pidage lühikesele teele laiendada õigusi konfiguratsioonipuul või eemaldada sandbox. Mõlemad panevad sümptomi kaduma, kuid eemaldavad kaitse, mis sinna meelega pandi, ja järgmist viga on raskem tõlgendada.
Taaskäivitage instants ja lugege järgmist sündmust, mitte ärge eeldage edu. Tõenäoline järgmine viga on, et OpenVPN ei saa oma konfiguratsioonifaili avada, mis on edasiminek: töökataloogi astuti sisse ja parser töötab nüüd. Järgige sealt unit-i tegelikku failide kaardistamist, selle asemel et naasta võrgu tõrkeotsingu juurde.
systemd täitmise viide määratleb, kuidas töökataloogi tõlgendatakse koos juurkataloogide ja sandboxiga. Meelespidatav muster on lihtne: iga statuskood nimetab erinevat etappi ja ainult rakenduse enda vead kirjeldavad rakendust.