Menyediakan klien OpenVPN dengan tahapan yang berhenti saat terjadi galat
Lima tahap mencegah skrip penyediaan meninggalkan instalasi setengah jadi: verifikasi masukan, siapkan himpunan, tukar secara atomik, aktifkan satu pemilik, rencanakan pensiun.
Skrip penyediaan yang melaporkan galat lalu terus berjalan lebih buruk daripada skrip yang tidak pernah berjalan. Penyiapan klien menyentuh kunci yang dilindungi, identitas di gateway, dan layanan yang mungkin sudah melayani lalu lintas. Masing-masing membutuhkan syarat berhenti, dan skrip harus tahu tahap mana yang telah dicapai saat berhenti.
Perlakukan semuanya sebagai satu transaksi dengan lima titik pemeriksaan, dan buat setiap titik pemeriksaan menolak melanjutkan dengan sendirinya.
Perbaiki masukan sebelum menyentuh sistem berkas
Mulai dengan kontrak eksplisit: satu identitas, satu sumber profil, satu pemilik layanan yang dimaksud. Verifikasi bahwa profil ada, bahwa sertifikat dan kunci yang dirujuknya dapat dibaca, dan bahwa direktori tujuan milik paket yang diharapkan. Jalur yang berhasil diselesaikan bukan bukti bahwa materi di belakangnya lengkap.
Tolak variabel kosong lebih awal. $DEVICE yang tidak diatur dan mengembang menjadi kosong mengubah install -m 400 $KEY /etc/openvpn/client/ menjadi salinan yang diarahkan ke direktori, dan kegagalan datang kemudian sebagai layanan yang tidak dapat membaca kuncinya.
Susun himpunan profil di direktori pementasan
Bangun dulu himpunan lengkap di tempat privat: profil, CA, sertifikat klien, kunci, dan setiap pembantu yang dipanggil profil. Salin dengan install -m 400 -o root -g root agar izin ditetapkan saat pembuatan, bukan sesudahnya. Lalu periksa rujukan di dalam profil, karena baris ca atau key yang relatif diselesaikan terhadap direktori kerja unit begitu layanan mulai. Tidak ada yang boleh ditulis ke direktori aktif sampai seluruh himpunan tervalidasi.
Catat sidik jari non-rahasia dari apa yang dihasilkan jalannya proses ini, misalnya sha256sum office.conf yang disimpan di samping penanda versi. Nilai tunggal itulah yang memungkinkan proses ulang membedakan pembaruan dari tanpa tindakan.
Tukar secara atomik dan simpan himpunan sebelumnya
Pindahkan himpunan yang disiapkan ke tempatnya sebagai satu operasi di mana sistem berkas mengizinkannya, dan simpan himpunan sebelumnya yang telah ditinjau di bawah nama bertanda waktu. Salinan sebagian yang meninggalkan profil baru di samping kunci lama menghasilkan layanan yang mengautentikasi dengan identitas salah dan tidak mencatat apa pun yang berguna tentang sebabnya. Jika pertukaran tidak dapat atomik, urutkan pemindahan agar profil tiba paling akhir.
Ketika tujuan sudah ada, putuskan secara eksplisit apakah jalannya proses ini adalah pembaruan, proses ulang yang identik, atau konflik dengan profil perangkat lain. Menimpa diam-diam profil milik identitas lain adalah cara dua mesin akhirnya berbagi satu sertifikat. Tolak jalannya proses dan sebutkan pemilik yang berkonflik.
Aktifkan satu pemilik dan buktikan
Pilih satu jalur aktivasi, entah instans systemd atau NetworkManager, dan gunakan secara konsisten. Menjalankan proses openvpn yang tidak terkelola di samping unit yang diaktifkan memberi dua terowongan, pembaruan DNS yang bersaing, dan tidak ada jawaban jelas tentang mana yang dituju perintah berhenti. Setelah aktivasi, periksa systemctl is-active openvpn-client@office, lalu rute ke prefiks jauh, lalu resolvectl status untuk resolver yang dipasang terowongan. Akhiri dengan mencapai satu sumber daya yang menjadi alasan terowongan itu ada.
Proses yang berjalan dan ikon baki hijau adalah fakta proses, bukan bukti bahwa identitas dan kebijakan lalu lintas selamat dari serah terima.
Proses ulang dan pensiun adalah alur kerja terpisah
Proses kedua harus konvergen ke berkas yang telah ditinjau sama dan pemilik yang sama, bukan membuat akun kedua atau daemon kedua. Pensiun adalah prosedurnya sendiri: hentikan pemilik yang tepat, arsipkan atau hapus profil lokal sesuai kebijakan, dan cabut identitas di gateway. Menghapus berkas kunci lokal tidak mencabut salinan yang sudah meninggalkan mesin.
Simpan jalur pemulihan yang tidak bergantung pada terowongan, seperti akses konsol atau rute manajemen kedua. Perubahan penyediaan yang mengunci Anda keluar dari mesin adalah perubahan yang gagal bahkan ketika setiap tahap melaporkan keberhasilan.
Skrip yang layak disimpan adalah transaksi seputar kepemilikan dan bukti. Daftar pendek perintah salin istimewa bukan hal yang sama.