mỗi quá trình điểm tập tin hệ thống riêng tư


24

Tôi đã kiểm tra unsharelệnh và theo trang của nó,

   unshare - run program with some namespaces unshared from parent

Tôi cũng thấy có một loại không gian tên được liệt kê là,

 mount namespace
              mounting and unmounting filesystems will not affect rest of the system.

Chính xác mục đích của không gian tên mount này là gì? Tôi đang cố gắng để hiểu khái niệm này với sự giúp đỡ của một số ví dụ.



@Gilles, cảm ơn. Tôi sẽ kiểm tra nó. Trong lúc này, xin vui lòng cho tôi biết nếu có điều gì khác cần được thêm vào trong câu trả lời.
Ramesh

Câu trả lời:


29

Việc chạy unshare -mcung cấp cho quá trình gọi một bản sao riêng của không gian tên mount của nó và cũng bỏ các thuộc tính hệ thống tệp để nó không còn chia sẻ thư mục gốc, thư mục hiện tại hoặc các thuộc tính umask với bất kỳ quy trình nào khác.

Vậy đoạn văn trên nói gì? Hãy để chúng tôi thử và hiểu bằng cách sử dụng một ví dụ đơn giản.

Nhà ga 1:

Tôi làm các lệnh dưới đây trong thiết bị đầu cuối.

#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 

Lệnh cuối cùng cho tôi đầu ra là,

tmpfs /tmp/tmp.7KtrAsd9lx tmpfs rw,relatime,size=1024k 0 0

Bây giờ, tôi đã làm các lệnh sau là tốt.

cd /tmp/tmp.7KtrAsd9lx
touch hello
touch helloagain
ls - lFa

Đầu ra của lslệnh là,

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

Vì vậy, vấn đề lớn trong việc làm tất cả điều này là gì? Tại sao tôi nên làm điều đó?

Tôi mở một thiết bị đầu cuối khác bây giờ ( thiết bị đầu cuối 2 ) và thực hiện các lệnh dưới đây.

cd /tmp/tmp.7KtrAsd9lx
ls - lFa

Đầu ra như dưới đây.

ls -lFa
total 8
drwx------   2 root root 4096 Sep  3 22:22 ./
drwxrwxrwt. 16 root root 4096 Sep  3 22:22 ../

Các tập tin hellohelloagainkhông thể nhìn thấy và tôi thậm chí đã đăng nhập bằng root để kiểm tra các tập tin này. Vì vậy, ưu điểm là, tính năng này giúp chúng tôi có thể tạo một hệ thống tệp tạm thời riêng tư mà ngay cả các quy trình thuộc sở hữu gốc khác cũng không thể nhìn thấy hoặc duyệt qua.

Từ trang người đàn ông của unshare,

không gian tên gắn kết Việc gắn kết và ngắt kết nối các hệ thống tệp sẽ không ảnh hưởng đến phần còn lại của hệ thống (cờ CLONE_NEWNS), ngoại trừ các hệ thống tệp được đánh dấu rõ ràng là được chia sẻ (với mount --make-shared; see / Proc / self / mountinfo cho các cờ được chia sẻ).

Bạn nên sử dụng mount --make-rprivate hoặc mount --make-rslave sau unshare --mount để đảm bảo rằng các điểm gắn kết trong không gian tên mới thực sự không được chia sẻ từ không gian tên của cha mẹ.

Bộ nhớ được sử dụng cho không gian tên là VFS từ kernel. Và - nếu chúng ta thiết lập nó ngay từ đầu - chúng ta có thể tạo toàn bộ môi trường ảo trong đó chúng ta là người dùng root mà không có quyền root.

Tài liệu tham khảo:

Ví dụ được đóng khung bằng cách sử dụng các chi tiết từ bài đăng trên blog này . Ngoài ra, các trích dẫn của câu trả lời này là từ lời giải thích tuyệt vời này từ Mike . Một bài đọc tuyệt vời khác liên quan đến điều này có thể được tìm thấy từ câu trả lời từ đây .


1
this feature makes it possible for us to create a private temporary filesystem that even other root-owned processes cannot see or browse through.Và so với chroot, với chrootcác tập tin được hiển thị cho người khác. Điều này thật tuyệt vời, và câu đó có lẽ nên giống như ở đầu câu trả lời. + 1ed.
Sergiy Kolodyazhnyy

1
Không có gì thoát khỏi gốc! Sử dụng nsenterbạn có thể nhập không gian tên và xem các tập tin tạm thời. Giả sử chỉ có một unshare (người sở hữu tempdir), sau đó sudo nsenter -t $(pgrep -P $(ps aux | grep unshare | grep -v grep | awk '{print $2}')) -m -psẽ cho phép xem nội dung
Earcam

2

Nếu bạn đã cài đặt bubblewrap trên hệ thống của mình, bạn có thể thực hiện dễ dàng trong một bước:

bwrap --dev-bind / / --tmpfs /tmp bash

Trong ví dụ trên, bash bên trong sẽ có chế độ xem riêng trên / tmp.

Giải pháp lấy cảm hứng từ câu trả lời của @ Ramesh-s - cảm ơn vì điều đó!

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.