Chỉ đọc ràng buộc gắn kết?


9

Tôi sử dụng mount -o bind để gắn kết các thư mục bên trong chroots, hoạt động rất tốt. Vấn đề là tôi muốn một số thư mục gắn kết này chỉ được đọc trong chroot.

Có thể không? Nếu không - có cách nào khác để đạt được nó?

Tôi đã suy nghĩ về việc sử dụng NFS cho mount localhost, nhưng có vẻ như quá mức cần thiết.

Câu trả lời:


6

Theo bài viết này là có thể. Bạn cần một kernel gần đây.

mount --bind -o ro /vital_data /untrusted_container/vital_data

16

Câu trả lời trực tiếp từ bài viết của LWN :

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

Được hỗ trợ kể từ Linux 2.6.26.


4

Trong Squeeze, nó chỉ hoạt động với:

mount --bind /src /dst

sau đó

mount -o remount,ro /dst

Bây giờ trong Debian Wheezy bạn phải làm:

mount -o remount,ro,bind /dst

để thoát khỏi: thông báo bận tài nguyên.

Chỉnh sửa: Bây giờ trong Debian Jessie, mount cố gắng trở nên thông minh và gắn kết các thư mục con, nếu đã được gắn kết với liên kết, sẽ có đệ quy và điều xấu xảy ra :)

Có một tùy chọn đặc biệt buộc lại sử dụng linux để trở nên 'ngu ngốc'. Giải pháp là thế này:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

Sau đó, bạn có thể gắn kết --bind $ prefix / sbin vào một thư mục khác.

Từ trang người đàn ông:

Các hoạt động cây con chia sẻ. Kể từ Linux 2.6.15, có thể đánh dấu một mount và các phần phụ của nó là chia sẻ, riêng tư, nô lệ hoặc không thể ràng buộc. Giá treo được chia sẻ cung cấp khả năng tạo các gương của giá treo đó sao cho gắn và ngắt kết nối trong bất kỳ gương nào truyền sang gương khác. Một gắn kết nô lệ nhận được sự truyền bá từ chủ của nó, nhưng không phải ngược lại. Một gắn kết tư nhân không có khả năng tuyên truyền. Gắn kết không thể gắn kết là một gắn kết riêng không thể được nhân bản thông qua một hoạt động liên kết. Các ngữ nghĩa chi tiết được ghi lại trong tài liệu / tập tin hệ thống / tập tin sharedsubtree.txt trong cây nguồn kernel. Các hoạt động được hỗ trợ là:

     mount --make-shared mountpoint
     mount --make-slave mountpoint
     mount --make-private mountpoint
     mount --make-unbindable mountpoint

Các lệnh sau cho phép một người thay đổi đệ quy loại của tất cả các giá trị gắn kết dưới một điểm gắn kết nhất định.

     mount --make-rshared mountpoint
     mount --make-rslave mountpoint
     mount --make-rprivate mountpoint
     mount --make-runbindable mountpoint

mount (8) không đọc fstab (5) khi yêu cầu thao tác --make- *. Tất cả các thông tin cần thiết phải được chỉ định trên dòng lệnh. Lưu ý rằng nhân Linux không cho phép thay đổi nhiều cờ truyền với một tòa nhà đơn (2) và các cờ không thể trộn lẫn với các tùy chọn gắn khác.

Vì produc-linux 2.23, lệnh mount cho phép sử dụng một số cờ truyền cùng nhau và cùng với các hoạt động gắn kết khác. Tính năng này là TRẢI NGHIỆM. Các cờ tuyên truyền được áp dụng bởi các tòa nhà gắn kết (2) bổ sung khi các hoạt động gắn kết tiến hành thành công. Lưu ý rằng trường hợp sử dụng này không phải là nguyên tử. Có thể chỉ định các cờ truyền trong fstab (5) là các tùy chọn gắn kết (riêng tư, nô lệ, chia sẻ, không thể ràng buộc, rprivate, rslave, rspl, runbindable).


2

gắn kết --bind / Vital_data / unsrusty_container / Vital_data

gắn kết -o remount, ro, bind / unsrusty_container / Vital_data

trong mount thứ hai, bạn phải sử dụng "remount, ro, bind" nếu không tất cả các phiên bản khác của / Vital_data cũng sẽ chỉ đọc đúng.


Không, bạn không (ít nhất là không có trên Linux 3.19). Trường hợp bạn đã trải nghiệm sự cần thiết của việc thêm bindtùy chọn?
Karl Richter

1
@KarlRichter - Tôi chưa kiểm tra nó, nhưng man 2 mountchỉ ra điều đó bindlà bắt buộc: "Kể từ Linux 2.6.26, MS_REMOUNTcờ có thể được sử dụng MS_BINDđể sửa đổi chỉ các cờ trên mỗi điểm gắn kết. Điều này đặc biệt hữu ích để cài đặt hoặc xóa" đọc " -only "gắn cờ trên một điểm gắn kết mà không thay đổi hệ thống tập tin cơ bản. Chỉ định mountflags là: MS_REMOUNT | MS_BIND | MS_RDONLYsẽ truy cập thông qua điểm gắn kết này chỉ đọc, mà không ảnh hưởng đến các điểm gắn kết khác." (Từ Ubuntu 19.10, Linux man-pagesphát hành 5.0.2, ngày 2019-08 / 02.)
mpb

1
@KarlRichter - Cập nhật: Theo unix.stackexchange.com/a/128388 , các phiên bản mới hơn của chức năng libmountgọi mount()hai lần trong một lần gọi /usr/bin/mountchương trình. Vì vậy, nó là phiên bản của libmount, chứ không phải là phiên bản kernel, sẽ xác định xem có cần hai yêu cầu hay không /usr/bin/mount.
mpb
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.