status=200/CHDIR: systemd tā arī nepalaiža OpenVPN
CHDIR kļūda nozīmē, ka systemd nevarēja iekļūt direktorijā, nevis ka OpenVPN nevarēja nolasīt profilu. Izlasiet unit pirms VPN konfigurācijas aiztikšanas.
Pakalpojums sabrūk, žurnālos minēts spawn un direktorija, un pirmā instinkta reakcija ir pārbaudīt VPN konfigurāciju. No šī faila vēl nekas nav nolasīts. systemd sabruka, gatavojot procesu, pirms izpildāmā faila palaišanas, tāpēc nav konsultēts neviens parsers, neviens sertifikāts un neviens attālinātais resursdators. Statusa koda lasīšana kā apgalvojums par systemd, nevis par OpenVPN, ir tas, kas šo pārvērš īsā izmeklēšanā.
Lasiet statusa kodu pirms lietojumprogrammas
Skaitliskais kods pēc pakalpojuma nosaukuma nosauc neizdevušos posmu. Direktorijas kļūda tiek ziņota kā CHDIR statuss, savukārt izpildāmais fails, ko nevarēja palaist, ir pilnīgi cits kods. Abi izskatās līdzīgi kopsavilkuma rindā un to cēloņos nav nekā kopīga.
Šī atšķirība ir svarīga, jo labojumi ir dažādos failos. CHDIR kļūda attiecas uz ceļu un to, kā pakalpojums to redz. Exec kļūda attiecas uz bināro failu, tā interpretētāju vai nesaistītu mount. VPN attālinātā punkta, šifru saraksta vai sertifikāta ceļa maiņa nevar atrisināt nevienu no tiem.
Apstipriniet, ka kļūda ir startā, nevis pēc veiksmīgas darbības. Ja pakalpojums vakar strādāja un tagad sabrūk tajā pašā posmā, kaut kas ir mainījies direktorijā, tā atļaujās vai pašā unitā, un šīs izmaiņas ir meklējamais pierādījums.
Pajautājiet unit, kur tā grib atrasties
Lasiet efektīvo unit, nevis failu, kuru uzskatāt par instalētu, jo drop-in faili var pārrakstīt darba direktoriju, jums nekad nepievienojot galveno unit. Show izvade tieši atbild uz jautājumu:
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 servera veidnei darba direktorija ir servera konfigurācijas direktorija, un instances nosaukums izvēlas tajā esošo profilu. Instance ar nosaukumu branch tāpēc gaida savu failu tajā pašā direktorijā, un citur ievietots profils darba direktorijas prasību nemaz neizpilda.
Salīdziniet, ko unit prasa, ar to, kas pastāv. Ceļš, kas agrāk pastāvēja, simboliskā saite, kas tagad norāda citur, vai instances nosaukums, kas vairs neatbilst direktorijai, ir parastas izmaiņas, kas rada tieši šo kļūdu.
Pārbaudiet ceļu tā, kā to redz pakalpojums
Jūsu shell un pakalpojums nedala vienu un to pašu failu sistēmas skatu. Konfigurēta saknes direktorija vai root image maina to, ko nozīmē absolūts ceļš unit iekšienē, un ceļš, kas acīmredzami ir uz resursdatora, var trūkt tajā namespace. Izlasiet unit iestatījumus pirms uzticēšanās manuālam testam.
Atļaujas pastiprina problēmu. Pakalpojums darbojas kā konkrēts lietotājs, un šim lietotājam jāvar iziet cauri katram vecākdirektorijam, lai sasniegtu mērķi, nevis tikai lasīt pašu mērķi. Direktorija, kas ir lasāma root lietotājam un nav caurejama pakalpojuma lietotājam, rada kļūdu, kas izskatās kā trūkstošs ceļš.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Stingrēšanas iestatījumi arī ir šī attēla daļa. Unit, kas slēpj mājas direktorijas vai padara daļu failu sistēmas tikai lasāmu, dara tieši to, kam tā konfigurēta, un darba direktorijai jāatrodas tur, kur sandbox to vēl atklāj.
Izlabojiet īpašnieku, tad gaidiet citu kļūdu
Izlabojiet izkārtojumu vai unit caur to, kam pieder šī konfigurācija. Profila pārvietošana uz gaidīto direktoriju ir likumīgs labojums, ja izkārtojums ir nepareizs, bet tas neizskaidro direktoriju, kurā nevar iekļūt, tāpēc neuzskatiet to par vispārēju atbildi.
Pretojieties saīsnei paplašināt atļaujas konfigurācijas kokā vai noņemt sandbox. Abi likvidē simptomu, vienlaikus noņemot aizsardzību, kas tur bija novietota apzināti, un nākamo kļūdu būs grūtāk interpretēt.
Restartējiet instanci un lasiet nākamo notikumu, nevis pieņemiet panākumus. Iespējamā nākamā kļūda ir tā, ka OpenVPN nevar atvērt savu konfigurācijas failu, kas ir progress: darba direktorijā ir iekļūts un parsers tagad darbojas. No turienes sekojiet unit faktiskajai failu kartēšanai, nevis atgriezieties pie tīkla problēmu risināšanas.
systemd izpildes atsauce definē, kā darba direktorija tiek interpretēta kopā ar saknes direktorijām un sandbox. Atceramais modelis ir vienkāršs: katrs statusa kods nosauc citu posmu, un tikai pašas lietojumprogrammas kļūdas raksturo lietojumprogrammu.