Layanan gagal, log menyebut spawn dan direktori, dan naluri pertama adalah memeriksa konfigurasi VPN. Belum ada yang dibaca dari berkas itu. systemd gagal saat menyiapkan proses, sebelum executable dijalankan, jadi tidak ada parser, tidak ada sertifikat, dan tidak ada host jarak jauh yang dikonsultasikan. Membaca kode status sebagai pernyataan tentang systemd, bukan tentang OpenVPN, adalah yang mengubah ini menjadi penyelidikan singkat.

Baca kode status sebelum aplikasi

Kode numerik setelah nama layanan menamai tahap yang gagal. Kegagalan direktori dilaporkan sebagai status CHDIR, sedangkan executable yang tidak bisa dijalankan adalah kode yang sama sekali berbeda. Keduanya tampak mirip dalam satu baris ringkasan dan tidak punya kesamaan dalam penyebabnya.

Perbedaan itu penting karena perbaikannya ada di berkas berbeda. Kegagalan CHDIR berkaitan dengan jalur dan cara layanan memandangnya. Kegagalan exec berkaitan dengan biner, interpreter-nya, atau mount yang tidak terkait. Mengubah remote VPN, daftar cipher, atau jalur sertifikat tidak bisa mengatasi keduanya.

Pastikan kegagalan terjadi saat mulai, bukan setelah proses berjalan sukses. Jika layanan berjalan kemarin dan sekarang gagal pada tahap yang sama, ada yang berubah pada direktori, izinnya, atau unit itu sendiri, dan perubahan itulah bukti yang harus dicari.

Tanyakan kepada unit di mana ia ingin berada

Baca unit yang efektif, bukan berkas yang Anda kira terpasang, karena drop-in dapat menimpa direktori kerja tanpa Anda pernah mengedit unit utama. Keluaran show menjawab pertanyaan 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 server upstream, direktori kerja adalah direktori konfigurasi server dan nama instance memilih profil di dalamnya. Instance bernama branch karena itu mengharapkan berkasnya sendiri di direktori yang sama, dan profil yang diletakkan di tempat lain sama sekali tidak memenuhi syarat direktori kerja.

Bandingkan apa yang diminta unit dengan apa yang ada. Jalur yang dulu ada, symlink yang sekarang menunjuk ke tempat lain, atau nama instance yang tidak lagi cocok dengan direktori, semuanya perubahan biasa yang menghasilkan kegagalan persis ini.

Periksa jalur seperti yang dilihat layanan

Shell Anda dan layanan tidak berbagi pandangan sistem berkas yang sama. Direktori root atau root image yang dikonfigurasi mengubah arti jalur absolut di dalam unit, dan jalur yang jelas ada di host bisa tidak ada di namespace itu. Baca pengaturan unit sebelum memercayai pengujian manual.

Izin memperparah masalah. Layanan berjalan sebagai pengguna tertentu, dan pengguna itu harus bisa menelusuri setiap direktori induk untuk mencapai target, bukan sekadar membaca targetnya. Direktori yang bisa dibaca root dan tidak bisa ditelusuri pengguna layanan menghasilkan kegagalan yang tampak seperti jalur hilang.

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

Pengaturan hardening juga bagian dari gambaran ini. Unit yang menyembunyikan direktori home atau membuat sebagian sistem berkas hanya-baca melakukan persis apa yang dikonfigurasi, dan direktori kerja harus berada di tempat yang masih diekspos sandbox.

Perbaiki pemiliknya, lalu harapkan galat lain

Perbaiki tata letak atau unit melalui siapa pun yang memiliki konfigurasi itu. Memindahkan profil ke direktori yang diharapkan adalah perbaikan sah ketika tata letaknya salah, tetapi tidak menjelaskan direktori yang tidak bisa dimasuki, jadi jangan perlakukan itu sebagai jawaban umum.

Tolak jalan pintas memperluas izin pada pohon konfigurasi atau menghapus sandbox. Keduanya menghilangkan gejala sekaligus menghapus perlindungan yang sengaja dipasang di sana, dan kegagalan berikutnya akan lebih sulit ditafsirkan.

Mulai ulang instance dan baca peristiwa berikutnya alih-alih menganggapnya sukses. Galat berikutnya yang mungkin adalah OpenVPN tidak bisa membuka berkas konfigurasinya, yang merupakan kemajuan: direktori kerja sudah dimasuki dan parser kini berjalan. Ikuti pemetaan berkas unit yang sebenarnya dari sana alih-alih kembali ke pemecahan masalah jaringan.

Referensi eksekusi systemd mendefinisikan bagaimana direktori kerja ditafsirkan bersama direktori root dan sandboxing. Pola yang perlu diingat sederhana: setiap kode status menamai tahap yang berbeda, dan hanya galat aplikasi itu sendiri yang menjelaskan aplikasi.

Artikel terkait