kernel: Dukungan Namespaces

15

Saya bertanya-tanya apa sebenarnya fitur "Namespaces support" di kernel Linux. Saya menggunakan kernel 3.11.1 (kernel stabil terbaru saat ini).

Jika saya memutuskan untuk menonaktifkannya, apakah saya akan melihat ada perubahan pada sistem saya?

Dan jika seseorang memutuskan untuk menggunakan namespaces, apakah itu cukup untuk dikompilasi NAMESPACES=Ydi kernel, atau apakah dia memerlukan alat userspace juga?

Martin Vegter
sumber
5
Ruang nama dijelaskan dengan cukup baik di sini: lwn.net/Articles/531114 (bukan jawaban, karena saya tidak benar-benar menjawab pertanyaan Anda — saya mengarahkan Anda ke setumpuk teks)
derobert

Jawaban:

21

Singkatnya, ruang nama menyediakan cara untuk membangun sistem Linux virtual di dalam sistem Linux yang lebih besar. Ini berbeda dari menjalankan mesin virtual yang berjalan sebagai proses yang tidak terjangkau: mesin virtual muncul sebagai satu proses di host, sedangkan proses yang berjalan di dalam namespace masih berjalan di sistem host.

Sistem virtual yang berjalan di dalam sistem yang lebih besar disebut wadah . Ide wadah adalah bahwa proses yang berjalan di dalam wadah percaya bahwa mereka adalah satu-satunya proses dalam sistem. Khususnya, pengguna root di dalam wadah tidak memiliki hak akses root di luar wadah (perhatikan bahwa ini hanya benar di versi kernel yang cukup baru).

Namespaces melakukan virtualisasi satu fitur pada satu waktu. Beberapa contoh tipe ruang nama adalah:

  • Ruang nama pengguna - ini memungkinkan proses berperilaku seolah-olah mereka berjalan sebagai pengguna yang berbeda di dalam dan di luar ruang nama. Secara khusus, proses yang berjalan sebagai UID 0 di dalam namespace memiliki hak superuser hanya sehubungan dengan proses yang berjalan di namespace yang sama.
    Sejak Linux kernel 3.8, pengguna yang tidak mampu dapat membuat ruang nama pengguna. Ini memungkinkan pengguna biasa untuk menggunakan fitur-fitur yang dicadangkan untuk di-root (seperti mengubah tabel rute atau kemampuan pengaturan).
  • PID namespaces - proses di dalam namespace PID tidak bisa membunuh atau melacak proses di luar namespace itu.
  • Pasang namespace - ini memungkinkan proses untuk memiliki tampilan sendiri dari sistem file. Tampilan ini bisa berupa tampilan sebagian, memungkinkan beberapa bagian dari sistem file disembunyikan dan potongan-potongan dikomposisi ulang sehingga pohon direktori muncul di tempat yang berbeda. Mount namespaces menggeneralisasi chroot fitur Unix tradisional , yang memungkinkan proses dibatasi pada subtree tertentu.
  • Ruang nama jaringan - memungkinkan pemisahan sumber daya jaringan (perangkat jaringan) dan dengan demikian meningkatkan isolasi proses.

Ruang nama bergantung pada kernel untuk menyediakan isolasi antara ruang nama. Ini cukup rumit untuk dikerjakan dengan benar, jadi mungkin masih ada bug keamanan di sekitar Anda. Risiko bug keamanan akan menjadi alasan utama untuk tidak mengaktifkan fitur ini. Alasan lain untuk tidak mengaktifkannya adalah saat Anda membuat kernel kecil untuk perangkat yang disematkan. Dalam kernel tujuan umum yang akan Anda instal pada server atau workstation biasa, ruang nama harus diaktifkan, seperti fitur kernel matang lainnya.

Masih ada beberapa aplikasi yang menggunakan ruang nama. Berikut ini beberapa di antaranya:

  • LXC sudah mapan. Itu bergantung pada cgroup untuk menyediakan wadah.
  • virt-sandbox adalah proyek sandboxing yang lebih baru.
  • Versi terbaru Chromium juga menggunakan ruang nama untuk kotak pasir jika tersedia.
  • The uWSGI framework untuk aplikasi berkerumun penggunaan ruang nama untuk meningkatkan sandboxing.

Lihat seri artikel LWN oleh Michael Kerrisk untuk informasi lebih lanjut.

Gilles 'SO- berhenti menjadi jahat'
sumber
6

Linux kernel namespace adalah konsep yang digunakan untuk mengisolasi sekelompok proses dari yang lain sehubungan dengan akses ke sumber daya sistem. Misalnya dua ruang nama PID yang berbeda dapat berisi proses dengan PID yang identik tetapi gambar proses yang sama sekali berbeda. Mereka sering digunakan dalam virtualisasi tingkat OS, di mana satu kernel secara bersamaan menjalankan berbagai sistem operasi - semua harus berbasis Linux (karena mereka berbagi kernel, jelas), tetapi mungkin distribusi dan versi yang berbeda. Lihat misalnya LXC .

Anda mungkin memperhatikan bahwa menonaktifkannya misalnya pada sistem berbasis sistem, karena systemd dapat menggunakan ruang nama untuk fitur wadahnya . Karenanya banyak tergantung pada distribusi apa yang Anda gunakan dan apa yang ingin Anda lakukan dengan sistem.

Seperti hampir setiap fitur kernel, Anda pasti membutuhkan semacam program ruang pengguna - bahkan jika Anda berbicara dengan kernel melalui file khusus (saya tidak yakin Anda bisa), biasanya jauh lebih baik untuk mengandalkan alat khusus, karena mereka menawarkan API yang ramah.

peterph
sumber
1

Untuk memberikan contoh penggunaan namespace, dalam sistem yang diaktifkan SELinux (MLS atau Strict). Namespace biasanya digunakan untuk membuat direktori individual /tmpdan atau /homeuntuk setiap pengguna. Direktori tersebut hanya dapat dilihat oleh: pengguna, pengguna dengan label yang sama, kernel dan pengguna dengan akses istimewa. Direktori namespace-ed /tmpakan diberi label oleh SELinux-MLS untuk mencocokkan label SELinux-MLS pengguna. Dalam skenario ini /tmpdirektori yang dilihat pengguna mungkin benar-benar dipasang di tempat lain selain /tmp( /var/user-tmp). Namun pengguna hanya melihat /tmpdengan file yang dibuat karena aktivitas pengguna. pengguna tidak akan pernah melihat file apa pun /tmpyang merupakan produk dari pengguna lain.

guestUserX
sumber