Dua resep hak istimewa minimum yang ditempel bersama tidak menghasilkan penerapan yang lebih ketat. Satu model membiarkan daemon mulai dengan hak istimewa lalu turun ke akun tanpa hak istimewa setelah inisialisasi; model lain membuat manajer layanan menjalankannya dengan identitas terbatas sejak instruksi pertama. Keduanya bekerja sendiri-sendiri, dan kombinasinya sering menghasilkan layanan yang tidak dapat melakukan keduanya dengan bersih. Sisa tulisan ini menelusuri keputusan itu secara berurutan.

Dua model, satu pemilik pergantian

Model pertama milik daemon. Opsi OpenVPN komunitas user dan group mengubah identitas setelah terowongan dan kunci disiapkan, dan persist-key plus persist-tun menjaga sumber daya itu tetap dapat dipakai sesudahnya.

Model kedua milik manajer layanan. Pengaturan systemd User= atau Group= menentukan identitas tempat proses dimulai, dan direktif kemampuan menentukan apa yang boleh dimilikinya. Memilih di antara kedua model adalah soal pengemasan sebelum menjadi soal keamanan, dan pemelihara paket sudah menjawabnya. Tugas Anda adalah menemukan jawaban itu, bukan menciptakan opsi ketiga.

Keduanya sah. Kesalahannya adalah memperlakukannya sebagai lapisan dari satu rancangan, karena model kedua dapat membuat pergantian identitas model pertama menjadi operasi yang tidak lagi diizinkan dilakukan proses.

Tentukan di mana identitas berubah

Jika unit sudah dimulai sebagai akun khusus, menambahkan instruksi daemon untuk menjadi akun lain meminta transisi setuid yang tidak pernah dimaksudkan untuk dilakukan layanan yang diperkeras. Kegagalan muncul sebagai galat izin saat mulai, bukan sebagai pesan kebijakan yang jelas. Ini terbaca seperti kemampuan yang hilang, yang mendorong orang ke himpunan batas yang lebih luas alih-alih ke pertanyaan identitas.

Baca apa yang sebenarnya disediakan paket terpasang sebelum menyunting apa pun, termasuk direktori drop-in-nya. Sebagian unit sengaja menghilangkan penurunan milik daemon karena manajer sudah menanganinya, dan sebagian bergantung pada opsi itu untuk pergantian setelah inisialisasi. Menghapus salah satunya tanpa tahu model mana yang Anda warisi adalah cara layanan yang berfungsi berhenti menyala.

Tulis model yang dipilih dalam satu baris: milik manajer atau milik daemon. Setiap direktif berikutnya harus konsisten dengan kalimat itu, dan unit campuran harus diperlakukan sebagai bug, bukan kompromi.

Kemampuan adalah batas, bukan pemberian

Himpunan batas kemampuan menyatakan apa yang paling banyak boleh dimiliki proses. Itu adalah langit-langit, dan mencantumkan kemampuan di sana tidak memberi apa pun dengan sendirinya, karena itu unit dengan himpunan batas yang longgar pun bisa gagal membuat terowongan.

Yang benar-benar menempatkan kemampuan di himpunan ambien layanan adalah AmbientCapabilities=. referensi eksekusi systemd mendokumentasikan kedua direktif secara terpisah, dan perbedaan itulah yang menjelaskan sebagian besar saran kemampuan yang membingungkan di internet.

Tambahkan kemampuan hanya setelah operasi yang gagal mengidentifikasinya. Himpunan batas yang lebih luas menyembunyikan penyebab sebenarnya dan membiarkan layanan lebih berhak daripada yang dimaksudkan rancangan. Itu juga membuat unit lebih sulit ditinjau, karena langit-langit tidak lagi menggambarkan pekerjaannya. Hapus kemampuan tambahan setelah cacat sebenarnya diperbaiki.

Petakan kewenangan di sepanjang siklus hidup

Daftarkan apa yang harus dilakukan proses pada tiap tahap: mulai, keadaan mantap, autentikasi ulang, dan pembongkaran. Pembuatan antarmuka, perubahan rute, pembacaan kunci terproteksi, dan pemanggilan pembantu tidak semuanya terjadi pada saat yang sama atau dengan persyaratan yang sama. Urutkan daftar menurut tahap sebelum mengurutkannya menurut kemampuan.

Opsi ketahanan mempertahankan sumber daya lintas negosiasi ulang, dan tidak memberikan izin yang tidak pernah dimiliki. Kunci yang tidak dapat dibaca proses saat mulai akan tetap tidak terbaca nanti, apa pun kata bendera ketahanan. Bendera mempertahankan apa yang sudah berhasil.

Gunakan akun khusus, bukan akun bersama. Pengembang OpenVPN memperingatkan kebiasaan memakai nobody sebagai contoh umum, karena layanan lain di host mungkin sudah berjalan dengan akun itu dan isolasi yang Anda kira Anda miliki tidak ada di sana.

Fitur yang mengubah beban kerja lokal, seperti offload kanal data atau build yang menautkan secara berbeda, dapat menggeser operasi mana yang diperlukan. Tinjau peta saat paket berubah, bukan hanya saat sesuatu rusak.

Tuliskan rencananya dan pertahankan akses pemulihan

Catatan penerapan harus menyebut manajer, identitas awal, identitas mantap yang dituju, dan setiap pemberian bersama operasi yang memerlukannya. Catatan itulah yang membuat perubahan berikutnya dapat ditinjau alih-alih eksperimental.

Jaga akses konsol tetap tersedia saat menyunting, karena unit yang gagal saat mulai sulit diperbaiki dari jarak jauh. Uji restart dan boot ulang penuh sebelum menyatakan perubahan selesai. Unit yang bertahan melewati restart masih bisa gagal sebelum jaringan siap.

Keberhasilan adalah siklus hidup kewenangan minimum yang dipahami, bukan proses yang kebetulan berjalan dengan nama selain root.

Artikel terkait