Çalıştırma unshare -m
çağıran sürece mount ad alanının özel bir kopyasını verir ve ayrıca dosya sistemi özniteliklerini paylaşır, böylece kök dizinini, geçerli dizini veya umask özniteliklerini başka bir işlemle paylaşmaz.
Peki yukarıdaki paragrafta ne yazıyor? Basit bir örnek kullanarak deneyelim ve anlayalım.
Terminal 1:
İlk terminalde aşağıdaki komutları yapıyorum.
#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
Son komut bana çıktısını verir.
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
Şimdi aşağıdaki komutları da yaptım.
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
ls
Komutun çıktısı ,
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
Öyleyse bütün bunları yaparken asıl mesele nedir? Neden yapmalıyım?
Şimdi başka bir terminal açtım ( terminal 2 ) ve aşağıdaki komutları yapıyorum.
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
Çıktı aşağıdaki gibidir.
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
Dosyalar hello
ve helloagain
görünmez ve hatta bu dosyaları kontrol etmek için root olarak oturum. Bu yüzden avantaj, bu özellik, diğer kök işlemlerinin bile göremediği veya göz atamayacağı özel bir geçici dosya sistemi oluşturmamızı sağlıyor.
Man sayfasından unshare
,
mount ad alanı Dosya sistemlerinin montajı ve bağlantılarının kaldırılması, açıkça paylaşılan olarak işaretlenen dosya sistemleri dışında (paylaşılan -make-paylaşılan; paylaşılan bayraklar için bkz. / proc / self / mountinfo), sistemin geri kalanını etkilemez (CLONE_NEWNS bayrağı).
Yeni ad alanındaki bağlanma noktalarının gerçekten ana ad alanından paylaşılmadığından emin olmak için mount --make-rprivate veya mount --make-rslave'yi paylaşmadan sonra kullanmanız önerilir.
Ad alanı için kullanılan bellek, çekirdekten gelen VFS'dir. Ve - ilk etapta doğru kurarsak - root kullanıcısı olduğumuz tüm sanal ortamları root izinleri olmadan yaratabiliriz.
Referanslar:
Örnek, bu blog gönderisinden ayrıntılar kullanılarak çerçevelenmiştir . Ayrıca, bu cevabın alıntıları Mike'ın bu harika açıklamasından . Bununla ilgili bir başka harika okuma buradan cevap olarak bulunabilir .