Namespaces dan mountpoints

0

Ada cara untuk membuat titik mount tersembunyi jika pengguna root menghapus berbagi namespace saat ini dan me-mount direktori tanpa memperbarui mtab. Apakah ada cara mudah mendaftar ini tanpa harus menyaring melalui sistem file proc?


sumber
apakah Anda punya contohnya? apa saja perintah yang terlibat? Saya menemukan keduanya mountdan findmntakan melaporkan semua tunggangan.
Jasen
@ Yasen:, unshare --mount --propagation=slaveitulah yang digunakan wadah seperti Docker.
grawity

Jawaban:

1

Ada cara untuk membuat titik mount tersembunyi jika pengguna root menghapus berbagi namespace saat ini dan me-mount direktori tanpa memperbarui mtab. Apakah ada cara mudah mendaftar ini tanpa harus menyaring melalui sistem file proc?

Pertama-tama, /proc adalah cara utama untuk mengakses informasi pemasangan terkini di Linux.

Banyak distribusi Linux modern tidak pernah memperbarui mtab; itu hanya sebuah symlink ke /proc/self/mounts. (Baik kemampuan untuk berhenti memasang mount namespaces, maupun menyembunyikan mount dengan "lupa" untuk memperbarui mtab, adalah alasan utama untuk perubahan ini. Dan tentu saja, apa gunanya mengulangi pekerjaan yang sudah dilakukan kernel?)

Demikian juga, pengidentifikasi namespace sendiri hanya diekspos melalui /proc/$PID/ns/mnt. Tidak ada cara lain untuk memeriksa proses mana yang berada dalam ruang nama yang terpisah dari yang utama.

Jadi dengan mengatakan itu, cara tercepat untuk mendaftar semua gunung adalah cat /proc/*/mounts. Tetapi jika Anda tidak ingin melakukan itu, util-linux v2.28 memperkenalkan alat lsns yang dapat dengan cepat mendaftar semua ruang nama unik serta proses "pertama" mereka:

$ sudo lsns --type = mnt
        NS TYPE NPROCS PID USER COMMAND
4026531840 mnt 300 1 root / sbin / init
4026531860 mnt 1 38 root kdevtmpfs
4026532247 mnt 1 271 root / usr / lib / systemd / systemd-udevd
4026532359 mnt 2 524 root / usr / bin / NetworkManager --no-daemon
4026532369 mnt 2 267304 root nginx: proses master / usr / bin / nginx -g pid / run/nginx.pid
4026532557 mnt 1 892 colord / usr / lib / colord

Dan setelah Anda memiliki ID proses, Anda dapat melihat tabel mount menggunakan:

$ sudo findmnt --tab = / proc / 267304 / mountinfo

(Anda harus selalu menggunakan /proc/$PID/mountinfofile tersebut, karena mengandung sedikit lebih banyak informasi daripada mountsatau / etc / mtab. Misalnya, ini menggambarkan hierarki aktual ketika tumpang tindih dengan cara yang tidak terduga, dan lebih akurat melaporkan 'sumber' dari bind mount ketika file atau subdirektori.)

Adapun alat tunggal yang hanya akan menunjukkan apa yang "hilang" dari namespace utama - saya tidak tahu. (Seseorang tidak datang dengan coreutils atau util-linux saat ini, walaupun seharusnya tidak sulit untuk menulisnya jika Anda mengizinkannya menggali / proc.)

grawity
sumber
Hmmm ternyata setiap kali saya menjalankan firefox, versi lsns saya tidak menampilkan apa-apa. Sejak itu saya menggantinya dengan lsns lain dari linux-util github.
munchkin