Việc chạy unshare -m
cung 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 ls
lệ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 hello
và helloagain
khô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 .