Kontena tidak mahu membuka terowongnya, jadi bendera istimewa dimasukkan, dan kini ia berfungsi. Urutan itu hanya membuktikan bahawa sekurang-kurangnya satu kebenaran hilang, dan ia tidak menyatakan yang mana. Mod istimewa memberikan satu set keupayaan dan akses peranti yang jauh lebih luas daripada yang diperlukan oleh antara muka terowong.

Apa yang sebenarnya diubah oleh bendera

Kontena istimewa menerima keupayaan luas dan akses kepada peranti hos, yang merupakan pemberian jauh lebih besar daripada yang diperlukan oleh laluan rangkaian. Set tepatnya didokumenkan oleh persekitaran pelaksanaan dan bukan ditetapkan oleh cerita rakyat, dan dokumentasi Docker tentang menjalankan kontena menerangkan pilihan keistimewaan yang tersedia. Membacanya sekali sudah cukup untuk melihat bahawa terowong hanyalah bahagian kecil daripada keseluruhan.

Dua syarat yang lebih sempit meliputi kebanyakan kontena VPN. Mengkonfigurasi antara muka memerlukan keupayaan pentadbiran rangkaian, dan membuka peranti terowong memerlukan akses kepada nod peranti tertentu itu. Itu adalah pemberian berasingan, dan walaupun kedua-duanya sekali pun masih lebih sempit daripada pilihan menyeluruh. Baki set istimewa tidak ada kaitan dengan terowong. Ia wujud untuk beban kerja yang benar-benar memerlukan akses pada tahap hos, dan kontena VPN biasanya bukan salah satunya.

Padankan setiap ralat dengan satu prasyarat

Mesej ralat memberitahu anda prasyarat mana yang hilang jika anda membacanya sebelum menekannya. Mesej tentang nod peranti menamakan peranti, mesej tentang operasi yang tidak dibenarkan menamakan keupayaan, dan mesej tentang modul atau sysctl menamakan sokongan kernel. Setiap satunya mempunyai pembetulan berbeza, dan hanya satu daripadanya ialah keupayaan.

Fail konfigurasi yang hilang kekal hilang selepas setiap keupayaan diberikan, itulah sebabnya mod istimewa kadang-kadang tidak mengubah apa-apa. Kontena bermula, terowong masih gagal, dan ralat sebenar tidak pernah tentang kebenaran. Sokongan kernel ialah kes ketiga dan paling mudah disalah baca. Modul yang tidak dimuatkan pada hos tidak boleh dimuatkan dari dalam kontena tanpa keistimewaan, dan memberikan lebih banyak keupayaan di dalam kontena tidak mengubah keadaan hos.

Periksa syaratnya, bukan gejalanya

Mulakan dengan panggilan minimum yang didokumenkan oleh imej, jalankannya, dan simpan teks kegagalan yang tepat. Kemudian tambah satu pemberian pada satu masa 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

Kontena yang dapat melihat peranti dan mempunyai keupayaan tetapi masih gagal memberitahu anda masalahnya di tempat lain. Itu hasil yang berguna, dan mod istimewa akan menyembunyikannya.

Periksa juga kebenaran peranti pada hos, kerana nod peranti yang diberikan dengan betul tetapi dengan pemilikan kumpulan yang salah menghasilkan ralat yang sama seperti pemberian yang hilang.

Catatkan pemberian paling sempit yang berfungsi

Catatkan setiap peranti dan keupayaan yang diperlukan oleh penggunaan, bersama ralat yang membenarkannya. Rekod itulah yang membolehkan orang seterusnya mengalih keluar sesuatu dengan selamat, dan itulah yang akan diminta oleh juruaudit apabila kontena dilaporkan sebagai istimewa.

Semak juga konteks di sekelilingnya, kerana rangkaian hos, lekap hos dan pilihan persekitaran pelaksanaan masing-masing boleh meluaskan kesan sesuatu pemberian. Panggilan makmal terpencil yang menggabungkan semuanya bukan konfigurasi pengeluaran, sebaik mana pun ia berfungsi. Uji aplikasi, tingkah laku DNSnya dan kegagalan terowong sebelum anda mengisytiharkan penggunaan selesai. Kebenaran untuk mencipta antara muka bukan dasar keluar, dan kontena yang boleh menerowong dengan sempurna masih menghalaukan apa sahaja yang dihantar oleh aplikasi.

Artikel berkaitan