Aplikasi Linux biasa memakai VPN tanpa menyentuh TUN
Daemon memiliki perangkat TUN dan terowongan; aplikasi hanya membuka socket. Jaga hak istimewa penyiapan dan akses jaringan sebagai batas terpisah.
Browser yang memakai VPN Linux yang sudah terbentuk tidak membuka /dev/net/tun. Ia membuka socket, dan kernel memutuskan antarmuka mana yang dilalui paket socket itu. Proses yang membuat terowongan menjalankan pekerjaan berbeda dari proses yang trafiknya diangkut. Menjaga kedua peran itu terpisah menjawab sebagian besar pertanyaan izin sebelum ditanyakan.
Ikuti satu paket dari socket ke terowongan
Aplikasi biasa memanggil connect atau send, dan kernel mencari rute ke tujuan. Jika rute yang dipilih menunjuk ke antarmuka terowongan, paket dimasukkan ke antrean perangkat yang dibaca daemon VPN. Daemon mengenkripsinya dan mengirimkannya keluar melalui antarmuka fisik. Setiap panah dalam uraian itu adalah tempat pertanyaan izin bisa dijawab.
Tidak ada apa pun di jalur itu yang menuntut aplikasi mengenal perangkat. Daemon memegang deskriptor berkas dan melakukan operasi antarmuka, sementara aplikasi hanya melihat API jaringan biasa.
Gambarlah kedua bagian sekali, dan pertanyaan izin menjadi lebih mudah ditempatkan. Bagian atas adalah dunia aplikasi, dan bagian bawah milik daemon.
Putuskan siapa yang memerlukan perangkat dan siapa yang tidak
Membuat atau menyambung ke antarmuka TUN memerlukan akses perangkat ditambah kemampuan untuk mengonfigurasinya, itulah sebabnya layanan VPN yang didukung dimulai dengan wewenang administrasi jaringan atau memakai pembantu istimewa. Persyaratan itu milik daemon. Itu tidak mengatakan apa pun tentang browser, klien basis data, atau alat transfer berkas. Layanan yang memerlukan kemampuan itu memerlukannya untuk langkah penyiapannya sendiri, bukan untuk kliennya.
Setelah rute dan kebijakan siap, proses biasa memakai jalur yang dihasilkan melalui panggilan socket biasanya. Ia tidak memerlukan node perangkat, dan tidak memerlukan root.
Mengubah izin perangkat bukan cara memberi aplikasi akses tujuan. Itu hanya memindahkan batas perangkat ke tempat lain.
Periksa ruang nama tempat aplikasi benar-benar berjalan
Kontainer, atau ruang nama jaringan kedua, memberi prosesnya kumpulan antarmuka dan tabel rute tersendiri. Terowongan di host tidak muncul di sana secara otomatis, dan tidak ada perubahan izin perangkat yang mengubahnya. Aplikasi hanya akan merutekan melalui apa pun yang disediakan ruang nama itu. Itulah sebabnya citra kontainer tidak dapat mewarisi terowongan host secara tidak sengaja.
Periksa dengan ip netns list dan ip -n NAME route, atau dengan memeriksa tautan ruang nama proses itu. Jawabannya biasanya terlihat dalam satu perintah.
Dua pengguna pada host yang sama juga dapat diberi jalur berbeda oleh kebijakan. Itu keputusan jaringan, bukan bukti kepemilikan perangkat.
Pisahkan kemampuan dari kebijakan jaringan
Sebagian alat memerlukan lebih dari socket. Menangkap paket memerlukan socket mentah, dan mengubah rute memerlukan wewenang administrasi. Itu operasi terpisah dengan pemberian terpisah, dan memberi salah satunya tidak boleh dibaca sebagai syarat umum untuk memakai VPN.
Program yang menerapkan terowongannya sendiri adalah kasus ketiga. Ia benar-benar membuka TUN karena mengambil peran daemon, itulah sebabnya ia memerlukan hak istimewa daemon.
Sebutkan operasinya sebelum menyebutkan hak istimewanya. Keduanya biasanya lebih mudah dipisahkan daripada kelihatannya.
Verifikasi pemisahan dengan dua akun
Hubungkan terowongan sebagai layanan, lalu jalankan aplikasi sebagai pengguna biasa dan pastikan ia mencapai sumber daya privat. Periksa ip route get untuk tujuan dari shell pengguna itu guna melihat antarmuka mana yang dipilih. Jika rutenya benar dan koneksi tetap gagal, masalahnya kebijakan, bukan hak istimewa.
Desain yang dihasilkan adalah hak istimewa paling sedikit dengan batas eksplisit: satu komponen memiliki penyiapan dan sumber daya terowongan, beban kerja mempertahankan akun normalnya, dan kebijakan jaringan memutuskan apa yang boleh lewat. Menjalankan semuanya sebagai root meruntuhkan peran itu tanpa menjelaskan apa pun.