Sertifikat yang divalidasi terhadap otoritas bersama telah lulus uji kepercayaan, bukan uji keanggotaan. Kedua keputusan itu sering digabungkan karena keduanya terjadi saat koneksi, dan penggabungan itu tetap tak terlihat sampai seseorang yang seharusnya tidak berada di suatu layanan diterima di sana. Perbaikannya bukan otoritas kedua; melainkan keputusan kedua, yang diambil per layanan dan dicatat di tempat daemon membacanya. Pisahkan keduanya dan sebagian besar kebingungan di bidang ini hilang.

Rantai tepercaya tidak mengatakan apa pun tentang keanggotaan layanan

Dua layanan dapat menerima hierarki penerbit yang sama dan tetap memiliki populasi berbeda. Satu laptop termasuk yang pertama dan tidak boleh menjangkau yang kedua, sementara klien lain dari hierarki yang sama memang termasuk di sana. Menghapus otoritas dari layanan itu akan mengunci semua orang yang menggunakannya secara sah, jadi pekerjaannya adalah penerimaan, bukan kepercayaan.

Berguna membayangkan dua kunci pada satu pintu. Sertifikat membuka kunci luar, dan keputusan per layanan membuka kunci dalam; tidak satu pun menggantikan yang lain. Layanan yang hanya punya kunci luar sama sekali tidak menegakkan keanggotaan, ia hanya mengautentikasi. Tuliskan kedua keputusan sebelum mengubah apa pun, karena kebijakan yang hanya ada dalam bentuk koneksi yang berfungsi tidak dapat diaudit. Berikut ini menyangkut kunci dalam.

Ubah penimpaan opsional menjadi gerbang penerimaan

Direktori konfigurasi klien biasanya merupakan kemudahan: berkas di dalamnya menimpa pengaturan bagi klien yang mereka sebutkan, dan klien tanpa berkas cukup berjalan dengan nilai bawaan server. Satu direktif mengubah kemudahan itu menjadi gerbang, sehingga berkas yang hilang berarti koneksi ditolak.

client-config-dir /etc/openvpn/service-a/clients
ccd-exclusive

Edisi komunitas OpenVPN 2.6 ccd-exclusive di halaman manualnya mendokumentasikan persis syarat ini, dan pencarian berkas bernama bergantung pada identitas efektif klien. Build lain dan server yang dikelola produk bisa berbeda, jadi pastikan versi terpasang sebelum mengandalkan semantik yang sama di tempat lain.

Perlakukan jalur di atas sebagai contoh dan periksa tata letak yang benar-benar diterapkan alih-alih membuat direktori yang diciptakan panduan. Biarkan pemeriksaan sertifikat, pemeriksaan identitas server, dan autentikasi akun yang ada persis seperti sebelumnya, karena fragmen ini menambah syarat dan tidak menghapus apa pun. Siapkan perubahan sebelum produksi, karena penolakan yang muncul di titik keliru tampak seperti kegagalan sertifikat dan mengarahkan penyelidikan ke otoritas. Setelah itu pastikan baris log untuk klien yang ditolak menyebut berkas konfigurasi yang hilang, bukan rantainya.

Satu direktori per layanan, bukan satu daftar bersama

Keanggotaan milik layanan yang menegakkannya, jadi setiap layanan menyimpan direktorinya sendiri dan berkasnya sendiri. Mengarahkan dua layanan ke satu daftar membuat keduanya berbagi keanggotaan entah ada yang bermaksud demikian atau tidak, dan perubahan yang dihasilkan sulit dilacak kembali ke sebuah keputusan. Otoritas bersama boleh tetap bersama; berkas penerimaan tidak bisa. Memisahkannya juga berarti kesalahan di satu layanan tidak dapat diam-diam memperluas layanan lain.

Entri DEFAULT adalah kasus yang menyesatkan orang. Entri itu menyediakan pengaturan cadangan ketika berkas bernama tidak ditemukan, tetapi bukan berkas bernama yang dituntut gerbang, jadi ia tidak dapat menerima klien sendiri. Uji klien yang tidak punya entri sama sekali dan pastikan penolakannya; jika klien itu diterima, nilai cadangan sedang berlaku dan ccd-exclusive tidak berlaku pada instans tersebut.

Identitas efektif menentukan berkas mana yang dibaca

Pencarian memakai identitas yang benar-benar dipakai klien untuk mengautentikasi, yang biasanya nama umum sertifikat. Ketika server juga memverifikasi nama pengguna dan kata sandi lalu memetakan nama itu ke nama umum, berkas harus cocok dengan nama pengguna terautentikasi sebagai gantinya. Ketidakcocokan meninggalkan direktori penuh nama berkas yang masuk akal tetapi tidak pernah dipilih.

Pembacaan adalah separuh lainnya. Daemon biasanya melepaskan hak istimewa setelah mulai, jadi akun yang dikurangi memerlukan akses baca ke direktori dan setiap entri di dalamnya. Klien tidak boleh dapat membuat entri mereka sendiri melalui jalur mana pun yang dapat ditulis, karena penerimaan mandiri meniadakan mekanismenya sepenuhnya. Periksa izin pemasangan dan berbagi, bukan hanya mode berkas, karena direktori yang tampak tertutup bagi satu akun bisa terbuka bagi akun lain. Lalu pastikan akun mana yang benar-benar dipakai proses yang berjalan, bukan akun mana yang disebut berkas unit. Keduanya sama hanya ketika tidak ada hal lain yang mengubahnya.

Amati penolakan, penerimaan, dan pencabutan secara terpisah

Coba identitas yang termasuk layanan dan pastikan ia terhubung. Coba sertifikat sah tanpa entri dan pastikan ia ditolak. Coba identitas yang diterima di layanan lain dan pastikan ia tidak diterima di sini. Catat instans layanan dan identitas efektif di samping setiap hasil, karena hasil tanpa konteks itu tidak dapat direproduksi orang lain.

Penarikan adalah operasi terpisah dari pencabutan. Menyunting berkas penerimaan menghapus satu hak layanan sementara identitas tetap sah di tempat lain, sedangkan kunci yang dikompromikan memerlukan respons pencabutan organisasi. Putuskan lebih dulu apa yang terjadi pada sesi yang sudah aktif, karena baik penyuntingan direktori maupun daftar pencabutan tidak mengakhirinya sendiri.

Penerimaan juga hanya gerbang pertama. Bergabung dengan layanan tidak mengatakan apa pun tentang subnet, basis data, atau antarmuka manajemen di belakangnya, dan kebijakan sumber daya itu harus ditulis dan diuji sendiri.

Artikel terkait