Kontainer tidak mau membuka terowongannya, jadi flag istimewa ditambahkan, dan sekarang berhasil. Urutan itu hanya membuktikan bahwa setidaknya satu izin hilang, dan tidak mengatakan apa pun tentang yang mana. Mode istimewa memberikan sekumpulan kemampuan dan akses perangkat yang jauh lebih luas daripada yang dibutuhkan antarmuka terowongan.

Apa yang sebenarnya diubah flag

Kontainer istimewa menerima kemampuan luas dan akses ke perangkat host, yang merupakan pemberian jauh lebih besar daripada yang dibutuhkan jalur jaringan. Himpunan persisnya didokumentasikan oleh lingkungan eksekusi, bukan ditetapkan oleh cerita rakyat, dan dokumentasi Docker tentang menjalankan kontainer menjelaskan opsi istimewa yang tersedia. Membacanya sekali cukup untuk melihat bahwa terowongan adalah bagian kecil dari keseluruhan.

Dua syarat yang lebih sempit mencakup sebagian besar kontainer VPN. Mengonfigurasi antarmuka membutuhkan kemampuan administrasi jaringan, dan membuka perangkat terowongan membutuhkan akses ke simpul perangkat tertentu itu. Itu adalah pemberian terpisah, dan bahkan keduanya bersama masih lebih sempit daripada opsi menyeluruh. Sisa himpunan istimewa tidak ada hubungannya dengan terowongan. Itu ada untuk beban kerja yang benar-benar membutuhkan akses tingkat host, dan kontainer VPN biasanya bukan salah satunya.

Pasangkan setiap galat dengan satu prasyarat

Pesan galat memberi tahu Anda prasyarat mana yang hilang jika Anda membacanya sebelum menekannya. Pesan tentang simpul perangkat menyebut perangkatnya, pesan tentang operasi yang tidak diizinkan menyebut kemampuan, dan pesan tentang modul atau sysctl menyebut dukungan kernel. Masing-masing punya perbaikan berbeda, dan hanya satu di antaranya adalah kemampuan.

Berkas konfigurasi yang hilang tetap hilang setelah semua kemampuan diberikan, itulah sebabnya mode istimewa kadang tidak mengubah apa pun. Kontainer mulai, terowongan tetap gagal, dan galat sebenarnya tidak pernah tentang izin. Dukungan kernel adalah kasus ketiga dan yang paling mudah salah dibaca. Modul yang tidak dimuat di host tidak dapat dimuat dari dalam kontainer tanpa istimewa, dan memberikan lebih banyak kemampuan di dalam kontainer tidak mengubah keadaan host.

Periksa syaratnya, bukan gejalanya

Mulailah dari pemanggilan minimal yang didokumentasikan image, jalankan, dan simpan teks kegagalan yang persis. Lalu tambahkan satu pemberian setiap kali dan catat penambahan mana yang mengubah hasilnya.

ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun image:tag
ip -br link show type tun

Kontainer yang dapat melihat perangkat dan memiliki kemampuan tetapi tetap gagal memberi tahu Anda bahwa masalahnya ada di tempat lain. Itu hasil yang berguna, dan mode istimewa akan menyembunyikannya.

Periksa juga izin perangkat di host, karena simpul perangkat yang diberikan dengan benar namun dengan kepemilikan grup yang salah menghasilkan galat yang sama dengan pemberian yang hilang.

Catat pemberian tersempit yang berhasil

Catat setiap perangkat dan kemampuan yang dibutuhkan penerapan, bersama galat yang membenarkannya. Catatan itulah yang memungkinkan orang berikutnya menghapus sesuatu dengan aman, dan itulah yang akan diminta auditor ketika sebuah kontainer dilaporkan istimewa.

Tinjau juga konteks di sekitarnya, karena jaringan host, pemasangan host, dan opsi lingkungan eksekusi masing-masing dapat memperluas dampak suatu pemberian. Pemanggilan laboratorium terisolasi yang menggabungkan semuanya bukan konfigurasi produksi, sebaik apa pun hasilnya. Uji aplikasi, perilaku DNS-nya, dan kegagalan terowongan sebelum Anda menyatakan penerapan selesai. Izin untuk membuat antarmuka bukan kebijakan keluar, dan kontainer yang dapat menerowongkan dengan sempurna tetap merutekan apa pun yang dikirim aplikasi.

Artikel terkait