การรันunshare -m
ให้กระบวนการเรียกใช้สำเนาส่วนบุคคลของเนมสเปซการเมานท์และยังยกเลิกการแชร์แอตทริบิวต์ของระบบไฟล์เพื่อที่จะไม่แชร์ไดเรกทอรีรากไดเรกทอรีปัจจุบันหรือแอตทริบิวต์ umask กับกระบวนการอื่น ๆ อีกต่อไป
ดังนั้นวรรคข้างต้นพูดอะไร? ให้เราลองและเข้าใจโดยใช้ตัวอย่างง่ายๆ
อาคาร 1:
ฉันทำตามคำสั่งด้านล่างในเทอร์มินัลแรก
#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
คำสั่งสุดท้ายให้ผลลัพธ์เป็น
tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0
ตอนนี้ฉันก็ทำตามคำสั่งต่อไปนี้เช่นกัน
cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa
ผลลัพธ์ของls
คำสั่งคือ
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
ดังนั้นเรื่องใหญ่ในการทำสิ่งนี้คืออะไร? ทำไมฉันต้องทำมัน?
ฉันเปิดเทอร์มินัลอื่นตอนนี้ ( เทอร์มินัล 2 ) และทำตามคำสั่งด้านล่าง
cd /tmp/tmp.7KtrAsd9lx
ls - lFa
ผลลัพธ์มีดังนี้
ls -lFa
total 8
drwx------ 2 root root 4096 Sep 3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep 3 22:22 ../
ไฟล์hello
และhelloagain
ไม่สามารถมองเห็นได้และฉันยังเข้าสู่ระบบในฐานะ root เพื่อตรวจสอบไฟล์เหล่านี้ ดังนั้นข้อดีคือคุณสมบัตินี้ทำให้เราสามารถสร้างระบบไฟล์ชั่วคราวส่วนตัวที่แม้แต่กระบวนการที่เป็นเจ้าของรูทอื่น ๆ ก็ไม่สามารถมองเห็นหรือเรียกดูได้
จากหน้าคนของunshare
,
mount namespace การติดตั้งและยกเลิกการต่อเชื่อมระบบไฟล์จะไม่ส่งผลกระทบต่อส่วนที่เหลือของระบบ (แฟล็ก CLONE_NEWNS) ยกเว้นระบบไฟล์ที่ทำเครื่องหมายไว้อย่างชัดเจนว่าใช้ร่วมกัน (ด้วย mount --make-shared; ดู / proc / self / mountinfo
ขอแนะนำให้ใช้ Mount --make-rprivate หรือ Mount --make-rslave หลังจากยกเลิกการแชร์ - เมานท์เพื่อให้แน่ใจว่าจุดเมานท์ในเนมสเปซใหม่นั้นไม่ได้ใช้ร่วมกันจากเนมสเปซผู้ปกครองจริงๆ
หน่วยความจำที่ใช้สำหรับเนมสเปซคือ VFS ซึ่งมาจากเคอร์เนล และ - ถ้าเราตั้งค่าไว้ตั้งแต่แรก - เราสามารถสร้างสภาพแวดล้อมเสมือนทั้งหมดที่เราเป็นผู้ใช้รูทโดยไม่มีสิทธิ์รูท
อ้างอิง:
ตัวอย่างมีการใช้กรอบโดยใช้รายละเอียดจากการโพสต์บล็อกนี้ นอกจากนี้คำพูดของคำตอบนี้มาจากคำอธิบายที่ยอดเยี่ยมนี้จากไมค์ อีกอ่านที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้สามารถพบได้จากคำตอบจากที่นี่