Menjalankan unshare -m
memberi proses pemanggilan salinan pribadi dari mount namespace-nya, dan juga membatalkan pembagian atribut sistem file sehingga tidak lagi berbagi direktori root, direktori saat ini, atau atribut umask dengan proses lainnya.
Jadi apa yang dikatakan paragraf di atas? Mari kita coba dan pahami menggunakan contoh sederhana.
Terminal 1:
Saya melakukan perintah di bawah ini di terminal pertama.
#Creating a new process
unshare -m /bin/bash
#creating a new mount point
secret_dir=`mktemp -d --tmpdir=/tmp`
#creating a new mount point for the above created directory.
mount -n -o size=1m -t tmpfs tmpfs $secret_dir
#checking the available mount points.
grep /tmp /proc/mounts
Perintah terakhir memberi saya output sebagai,
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Sekarang, saya juga melakukan perintah berikut.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
Output dari ls
perintahnya adalah,
ls -lFa
total 4
drwxrwxrwt 2 root root 80 Sep 3 22:23 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
-rw-r--r-- 1 root root 0 Sep 3 22:23 hello
-rw-r--r-- 1 root root 0 Sep 3 22:23 helloagain
Jadi, apa pentingnya melakukan semua ini? Mengapa saya harus melakukannya?
Saya membuka terminal lain sekarang (terminal 2 ) dan lakukan perintah di bawah ini.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
Outputnya seperti di bawah ini.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
File hello
dan helloagain
tidak terlihat dan saya bahkan masuk sebagai root untuk memeriksa file-file ini. Jadi keuntungannya adalah, fitur ini memungkinkan kita membuat sistem file pribadi sementara yang bahkan tidak dapat dilihat atau dijelajahi oleh proses milik root lainnya.
Dari halaman manual unshare
,
mount namespace Mounting dan unmount sistem file tidak akan memengaruhi sistem lainnya (flag CLONE_NEWNS), kecuali untuk sistem file yang secara eksplisit ditandai sebagai shared (dengan mount--make-shared; lihat /proc/self/mountinfo untuk flag yang dibagikan).
Sebaiknya gunakan mount --make-rprivate atau mount --make-rslaveafter unshare--mount untuk memastikan titik pemasangan di namespace baru benar-benar tidak dibagikan dari namespace induk.
Memori yang digunakan untuk namespace adalah VFS yang berasal dari kernel. Dan - jika kita mengaturnya sejak awal - kita dapat membuat seluruh lingkungan virtual di mana kita adalah pengguna root tanpa izin root.
Referensi:
Contohnya dibingkai menggunakan detail dari posting blog ini. Juga, kutipan dari jawaban ini berasal dari penjelasan luar biasa dari Mike ini. Bacaan bagus lainnya tentang ini dapat ditemukan dari jawaban dari sini.
Jika Anda memasang bubblewrap di sistem Anda, Anda dapat melakukannya dengan mudah dalam satu langkah:
bwrap --dev-bind / / --tmpfs /tmp bash
Pada contoh di atas, inner bash akan memiliki tampilannya sendiri di /tmp.
Solusi terinspirasi oleh jawaban @ Ramesh - terima kasih untuk itu!