status=200/CHDIR: systemd taip ir nepaleido OpenVPN
CHDIR klaida reiškia, kad systemd nepavyko įeiti į katalogą, o ne kad OpenVPN nepavyko perskaityti profilio. Perskaitykite unit prieš liesdami VPN konfigūraciją.
Paslauga sugenda, žurnaluose minimas spawn ir katalogas, o pirmas instinktas – tikrinti VPN konfigūraciją. Toje byloje dar nieko neperskaityta. systemd sugenda ruošiant procesą, dar neįvykdžius vykdomojo failo, todėl nebuvo konsultuotas joks parseris, joks sertifikatas ir joks nuotolinis serveris. Skaityti būsenos kodą kaip teiginį apie systemd, o ne apie OpenVPN, yra tai, kas paverčia šitai trumpu tyrimu.
Perskaitykite būsenos kodą prieš programą
Skaitmeninis kodas po paslaugos pavadinimo įvardija etapą, kuris sugedo. Katalogo klaida pranešama kaip CHDIR būsena, o vykdomasis failas, kurio nepavyko paleisti, yra visiškai kitas kodas. Abu atrodo panašiai santraukos eilutėje ir neturi nieko bendra savo priežastyse.
Šis skirtumas svarbus, nes pataisymai yra skirtingose bylose. CHDIR klaida susijusi su keliu ir kaip paslauga jį mato. Exec klaida susijusi su binariniu failu, jo interpretatoriumi arba nesusijusiu mountu. Pakeisti VPN nuotolinį tašką, šifrų sąrašą arba sertifikato kelią negali išspręsti nė vieno.
Patvirtinkite, kad klaida įvyksta paleidžiant, o ne po sėkmingo darbo. Jei paslauga vakar veikė, o dabar sugenda tame pačiame etape, kažkas pasikeitė kataloge, jo teisėse arba pačiame unite, ir tas pokytis yra įrodymas, kurio reikia ieškoti.
Paklauskite unito, kur jis nori būti
Skaitykite efektyvų unitą, o ne bylą, kurią manote esant įdiegtą, nes drop-in failai gali perrašyti darbo katalogą, net niekada neredagavus pagrindinio unito. Show išvestis tiesiogiai atsako į klausimą:
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 serverio šablone darbo katalogas yra serverio konfigūracijos katalogas, o instancijos pavadinimas parenka jame esantį profilį. Instancija pavadinimu branch todėl tikisi savo bylos tame pačiame kataloge, o kitur padėtas profilis visiškai neatitinka darbo katalogo reikalavimo.
Palyginkite, ko reikalauja unitas, su tuo, kas egzistuoja. Kelias, kuris anksčiau egzistavo, simbolinė nuoroda, kuri dabar rodo kitur, arba instancijos pavadinimas, kuris nebeatitinka katalogo, yra įprasti pokyčiai, sukeliantys būtent šią klaidą.
Patikrinkite kelią taip, kaip jį mato paslauga
Jūsų shell ir paslauga nesidalija tuo pačiu failų sistemos vaizdu. SuKonfigūruotas šakninis katalogas arba root image keičia, ką reiškia absoliutus kelias unito viduje, o kelyje, kuris akivaizdžiai yra hoste, gali trūkti tame namespace. Perskaitykite unito nustatymus prieš pasitikėdami rankiniu testu.
Teisės dar labiau apsunkina problemą. Paslauga veikia kaip konkretus naudotojas, ir tas naudotojas turi galėti pereiti kiekvieną tėvinį katalogą, kad pasiektų tikslą, o ne tik perskaityti patį tikslą. Katalogas, skaitomas root, bet nepraeinamas paslaugos naudotojo, sukelia klaidą, kuri atrodo kaip trūkstamas kelias.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Sutvirtinimo nustatymai taip pat yra šio vaizdo dalis. Unitas, kuris paslepia namų katalogus arba padaro dalį failų sistemos tik skaitomą, daro būtent tai, kam buvo suKonfigūruotas, o darbo katalogas turi būti ten, kur sandboxas jį dar atskleidžia.
Pataisykite savininką, tada laukitės kitos klaidos
Pataisykite išdėstymą arba unitą per tą, kam priklauso ši konfigūracija. Perkelti profilį į laukiamą katalogą yra teisėta pataisa, kai išdėstymas neteisingas, bet tai nepaaiškina katalogo, į kurį negalima įeiti, todėl nelaikykite to bendru atsakymu.
Atsispirkite pagundai išplėsti teises konfigūracijos medyje arba pašalinti sandboxą. Abu pašalina simptomą, bet kartu pašalina apsaugas, kurios ten buvo uždėtos sąmoningai, ir kitą klaidą bus sunkiau interpretuoti.
Paleiskite instanciją iš naujo ir skaitykite kitą įvykį, o ne manykite, kad pavyko. Tikėtina kita klaida – OpenVPN negali atidaryti savo konfigūracijos failo, o tai yra pažanga: į darbo katalogą patekta ir parseris dabar veikia. Nuo ten sekite tikrąjį unito failų susiejimą, o ne grįžkite prie tinklo trikčių šalinimo.
systemd vykdymo nuoroda apibrėžia, kaip darbo katalogas interpretuojamas kartu su šakniniais katalogais ir sandboxu. Įsimintinas šablonas paprastas: kiekvienas būsenos kodas įvardija skirtingą etapą, ir tik pačios programos klaidos apibūdina programą.