status=200/CHDIR: systemd tidak pernah memulakan OpenVPN
Kegagalan CHDIR bermaksud systemd tidak dapat masuk ke direktori, bukan OpenVPN gagal membaca profil. Baca unit sebelum menyentuh konfigurasi VPN.
Perkhidmatan gagal, log menyebut spawn dan direktori, dan naluri pertama ialah memeriksa konfigurasi VPN. Tiada apa-apa dalam fail itu yang telah dibaca lagi. systemd gagal semasa menyediakan proses, sebelum fail boleh laku dijalankan, jadi tiada penghurai, tiada sijil dan tiada hos jauh yang dirujuk. Membaca kod status sebagai pernyataan tentang systemd dan bukan tentang OpenVPN ialah apa yang menjadikan ini penyiasatan singkat.
Baca kod status sebelum aplikasi
Kod berangka selepas nama perkhidmatan menamakan peringkat yang gagal. Kegagalan direktori dilaporkan sebagai status CHDIR, manakala fail boleh laku yang tidak dapat dijalankan ialah kod yang sama sekali berbeza. Kedua-duanya kelihatan serupa dalam baris ringkasan dan tidak mempunyai apa-apa persamaan dalam puncanya.
Perbezaan itu penting kerana pembetulan berada dalam fail yang berbeza. Kegagalan CHDIR berkaitan laluan dan cara perkhidmatan melihatnya. Kegagalan exec berkaitan binari, jurubahasanya atau mount yang tidak berkaitan. Menukar remote VPN, senarai sifer atau laluan sijil tidak dapat menangani kedua-duanya.
Sahkan kegagalan berlaku semasa mula dan bukan selepas larian yang berjaya. Jika perkhidmatan berfungsi semalam dan kini gagal pada peringkat yang sama, sesuatu telah berubah pada direktori, kebenarannya atau unit itu sendiri, dan perubahan itulah bukti yang perlu dicari.
Tanya unit di mana ia mahu berada
Baca unit berkesan dan bukan fail yang anda sangka dipasang, kerana drop-in boleh mengatasi direktori kerja tanpa anda pernah menyunting unit utama. Output show menjawab soalan itu secara langsung:
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
Untuk templat pelayan upstream, direktori kerja ialah direktori konfigurasi pelayan dan nama instans memilih profil di dalamnya. Instans bernama branch oleh itu menjangka failnya sendiri dalam direktori yang sama, dan profil yang diletakkan di tempat lain langsung tidak memenuhi keperluan direktori kerja.
Bandingkan apa yang diminta unit dengan apa yang wujud. Laluan yang pernah wujud, pautan simbolik yang kini menunjuk ke tempat lain, atau nama instans yang tidak lagi sepadan dengan direktori semuanya perubahan biasa yang menghasilkan kegagalan tepat ini.
Semak laluan seperti yang dilihat perkhidmatan
Shell anda dan perkhidmatan tidak berkongsi pandangan sistem fail yang sama. Direktori akar atau imej akar yang dikonfigurasi mengubah maksud laluan mutlak di dalam unit, dan laluan yang jelas ada pada hos mungkin tiada dalam ruang nama itu. Baca tetapan unit sebelum mempercayai ujian manual.
Kebenaran memburukkan masalah. Perkhidmatan berjalan sebagai pengguna tertentu, dan pengguna itu mesti dapat menelusuri setiap direktori induk untuk mencapai sasaran, bukan sekadar membaca sasaran itu sendiri. Direktori yang boleh dibaca oleh root dan tidak boleh ditelusuri oleh pengguna perkhidmatan menghasilkan kegagalan yang kelihatan seperti laluan hilang.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
Tetapan pengukuhan juga sebahagian daripada gambaran ini. Unit yang menyembunyikan direktori rumah atau menjadikan sebahagian sistem fail baca sahaja melakukan tepat apa yang dikonfigurasi, dan direktori kerja mesti berada di tempat yang masih didedahkan oleh sandbox.
Betulkan pemilik, kemudian jangkakan ralat lain
Betulkan susun atur atau unit melalui sesiapa yang memiliki konfigurasi itu. Memindahkan profil ke direktori yang dijangka ialah pembetulan sah apabila susun aturnya salah, tetapi ia tidak menjelaskan direktori yang tidak boleh dimasuki, jadi jangan anggap ia jawapan umum.
Tolak jalan pintas meluaskan kebenaran pada pokok konfigurasi atau membuang sandbox. Kedua-duanya menghilangkan gejala sambil membuang perlindungan yang sengaja diletakkan di situ, dan kegagalan seterusnya akan lebih sukar ditafsirkan.
Mulakan semula instans dan baca peristiwa seterusnya dan bukan menganggap kejayaan. Ralat seterusnya yang mungkin ialah OpenVPN tidak dapat membuka fail konfigurasinya, yang merupakan kemajuan: direktori kerja telah dimasuki dan penghurai kini berjalan. Ikuti pemetaan fail sebenar unit dari situ dan bukan kembali kepada penyelesaian masalah rangkaian.
Rujukan pelaksanaan systemd mentakrifkan cara direktori kerja ditafsirkan bersama direktori akar dan sandbox. Corak yang perlu diingat adalah mudah: setiap kod status menamakan peringkat yang berbeza, dan hanya ralat aplikasi itu sendiri yang menerangkan aplikasi.