Tại sao gắn kết liên kết của tôi hiển thị bên ngoài không gian tên gắn kết của nó?


12

Vì vậy, tôi đang cố gắng kiểm soát cách thức không gian tên mount của Linux hoạt động. Vì vậy, tôi đã làm một thí nghiệm nhỏ và mở ra hai thiết bị đầu cuối và chạy như sau:

Nhà ga 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

Nhà ga số 2

root@goliath:~# ls b
foo.txt

Làm thế nào đến gắn kết có thể nhìn thấy trong Terminal 2? Vì nó không phải là một phần của không gian tên mount, tôi dự kiến ​​thư mục sẽ xuất hiện ở đây. Tôi cũng đã thử vượt qua -o shared=novà sử dụng --make-privatecác tùy chọn với mount, nhưng tôi đã nhận được kết quả tương tự.

Tôi còn thiếu gì và làm thế nào để tôi thực sự riêng tư?


gắn kết là toàn hệ thống, không dành riêng cho môi trường vỏ. chia sẻ, nô lệ, riêng tư và không thể ràng buộc không phải là những gì bạn nghĩ rằng họ là. đọc man mount.
cas

3
@cas: Đồng ý đó --make-privatekhông phải là điều tôi muốn. Nhưng, đó không phải là điểm của không gian tên gắn kết (mà chúng không phải là hệ thống rộng)?
FatalError

Câu trả lời:


11

Nếu bạn đang ở trên một bản phân phối dựa trên hệ thống với util-linuxphiên bản nhỏ hơn 2,27, bạn sẽ thấy hành vi không trực quan này. Điều này là do các CLONE_NEWNScờ propogates như sharedtùy thuộc vào một cài đặt trong kernel. Cài đặt này là bình thường private, nhưng systemd thay đổi điều này thành shared. Kể từ util-linux2.27, một bản vá đã được thực hiện để thay đổi hành vi mặc định của unsharelệnh để sử dụng privatelàm hành vi lan truyền mặc định để trực quan hơn.

Giải pháp

Nếu bạn đang sử dụng hệ thống systemd với <2.27 util-linux, bạn phải truy xuất lại hệ thống tập tin gốc sau khi chạy unsharelệnh:

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

Nếu bạn đang ở trên một hệ thống systemd có> = 2.27 util-linux, thì nó sẽ hoạt động như mong đợi trong ví dụ bạn đưa ra trong câu hỏi của bạn, nguyên văn, mà không cần phải kể lại. Nếu không: truyền --propagation privatevào unsharelệnh để buộc việc truyền bá không gian tên mount thành riêng tư.


0

cái này không hoạt động trong Ubuntu, (15.04 và 14.04). nó đã làm việc trên fedora. và cho fedora. cho dù bạn cần - riêng tư hay không, bạn cũng có thể kiểm tra

mèo / Proc / tự / mountinfo | grep chia sẻ

nếu được chia sẻ, điều đó có nghĩa là một số không gian tên khác vẫn có thể thấy sự gắn kết đó. Sau đó, nó là vấn đề liên quan đến systemd. Bạn có thể sử dụng --make-private để làm cho nó hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.