เหตุใดการเชื่อมโยงของฉันจึงมองเห็นได้นอกเนมสเปซการเมานท์


12

ดังนั้นฉันจึงพยายามที่จะจัดการกับ mount namespace ของ Linux ว่าทำงานอย่างไร ดังนั้นฉันจึงทำการทดลองเล็กน้อยและเปิดเทอร์มินัลสองเครื่องและวิ่งต่อไปนี้:

อาคาร 1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

อาคาร 2

root@goliath:~# ls b
foo.txt

ทำไมการมองเห็นการติดตั้งจึงปรากฏในเทอร์มินัล 2 เนื่องจากมันไม่ได้เป็นส่วนหนึ่งของเมานต์เนมสเปซฉันจึงคาดว่าไดเรกทอรีจะว่างเปล่าที่นี่ ฉันพยายามผ่าน-o shared=noและใช้--make-privateตัวเลือกด้วยmountแต่ฉันก็ได้ผลลัพธ์เดียวกัน

ฉันพลาดอะไรไปบ้างและฉันจะทำให้เป็นส่วนตัวได้อย่างไร


การเมาท์ทั้งระบบไม่ใช่เฉพาะกับสภาพแวดล้อมของเชลล์ แบ่งปันทาสส่วนตัวและไม่สามารถผูกมัดได้ไม่ใช่สิ่งที่คุณคิดว่าเป็น man mountอ่าน
cas

3
@cas: ยอมรับว่า--make-privateไม่ใช่สิ่งที่ฉันต้องการ แต่นั่นไม่ใช่จุดเมานต์เนมสเปซ (ที่ไม่กว้างระบบ) ใช่หรือไม่
FatalError

คำตอบ:


11

หากคุณอยู่ในการกระจายตาม systemd กับutil-linuxรุ่นน้อยกว่า 2.27 คุณจะเห็นพฤติกรรมที่ไม่ใช้งานง่ายนี้ นี่เป็นเพราะCLONE_NEWNSpropogates ตั้งค่าสถานะเช่นsharedขึ้นอยู่กับการตั้งค่าในเคอร์เนล การตั้งค่านี้เป็นปกติprivateแต่ systemd sharedการเปลี่ยนแปลงนี้ ตั้งแต่util-linux2.27 แพตช์ได้ทำการเปลี่ยนแปลงพฤติกรรมเริ่มต้นของunshareคำสั่งเพื่อใช้privateเป็นพฤติกรรมการแพร่กระจายเริ่มต้นเพื่อให้เข้าใจได้ง่ายขึ้น

วิธีการแก้

หากคุณอยู่บนระบบ systemd ด้วย <2.27 util-linuxคุณต้องติดตั้งระบบไฟล์รูทใหม่หลังจากรันunshareคำสั่ง:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

หากคุณอยู่ในระบบ systemd ด้วย> = 2.27 util-linuxมันควรจะทำงานได้ตามที่คาดไว้ในตัวอย่างที่คุณให้ในคำถามของคุณคำต่อคำโดยไม่จำเป็นต้องติดตั้งใหม่ ถ้าไม่ใช่: ส่งผ่าน--propagation privateไปยังunshareคำสั่งเพื่อบังคับให้การเผยแพร่เนมสเปซเมาต์เป็นแบบส่วนตัว


0

สิ่งนี้ไม่ทำงานใน Ubuntu, (15.04 และ 14.04) มันทำงานกับ fedora และสำหรับ fedora ไม่ว่าคุณต้องการ - ทำให้เป็นส่วนตัวหรือไม่คุณยังสามารถตรวจสอบ

cat / proc / self / mountinfo | grep แบ่งปัน

หากใช้ร่วมกันหมายความว่าเนมสเปซอื่นยังคงเห็นการเมานต์นั้น จากนั้นเป็นปัญหาที่เกี่ยวข้องกับ systemd คุณสามารถใช้ - ทำให้เป็นส่วนตัวเพื่อให้มันทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.