Có một vài cách tiếp cận, một số trong đó chủ yếu là an toàn, một số khác thì không.
Cách không an toàn
Hãy để bất kỳ sử dụng chạy mount
, ví dụ, thông qua sudo. Bạn cũng có thể cung cấp cho họ root; đó là một thứ tương tự. Người dùng có thể gắn kết một hệ thống tập tin với một bản sao gốc tuyệt vời của bash
Mạnhrucky ngay lập tức cung cấp root (có thể không có bất kỳ đăng nhập nào, ngoài thực tế mount
đã được chạy).
Ngoài ra, người dùng có thể gắn hệ thống tệp của riêng mình lên trên /etc
, chứa bản sao của chính họ /etc/shadow
hoặc /etc/sudoers
sau đó lấy root bằng su
hoặc sudo
. Hoặc có thể liên kết-mount ( mount --bind
) trên một trong hai tệp đó. Hoặc một tập tin mới vào /etc/sudoers.d
.
Các cuộc tấn công tương tự có thể được kéo ra /etc/pam.d
và nhiều nơi khác.
Hãy nhớ rằng các hệ thống tập tin thậm chí không cần phải có trên một thiết bị, -o loop
sẽ gắn kết một tập tin được sở hữu (và do đó có thể sửa đổi) bởi người dùng.
Cách an toàn chủ yếu: udisks hoặc tương tự
Các môi trường máy tính để bàn khác nhau đã thực sự xây dựng các giải pháp cho vấn đề này, để cho phép người dùng gắn phương tiện di động. Chúng hoạt động bằng cách gắn vào một thư mục con /media
chỉ và bằng cách tắt hỗ trợ set-user / group-id thông qua các tùy chọn kernel. Tùy chọn ở đây bao gồm udisks
, udisks2
, pmount
, usbmount
,
Nếu bạn phải, bạn có thể viết kịch bản của riêng mình để làm một cái gì đó tương tự, và gọi nó thông qua sudo, nhưng bạn phải thực sự cẩn thận viết kịch bản này để không bị khai thác root. Nếu bạn không muốn người dùng của mình phải nhớ sudo, bạn có thể làm điều gì đó như thế này trong một tập lệnh:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Cách an toàn vào một ngày nào đó: không gian tên người dùng
Không gian tên Linux là một hình thức ảo hóa rất nhẹ (các thùng chứa, để cụ thể hơn). Đặc biệt, với không gian tên người dùng, bất kỳ người dùng nào trên hệ thống đều có thể tạo môi trường riêng mà họ đã root. Điều này sẽ cho phép họ gắn kết các hệ thống tệp, ngoại trừ đã bị chặn rõ ràng ngoại trừ một vài hệ thống tệp ảo. Cuối cùng, các hệ thống tập tin FUSE có thể sẽ được cho phép, nhưng các bản vá gần đây nhất tôi có thể tìm thấy không bao gồm các thiết bị khối, chỉ những thứ như sshfs.
Hơn nữa, nhiều hạt nhân distro đã (vì lý do bảo mật) mặc định không cho phép người dùng không có đặc quyền sử dụng không gian tên người dùng; ví dụ Debian có giá trị kernel.unprivileged_userns_clone
mặc định là 0. Các phân phối khác có cài đặt tương tự, mặc dù thường có các tên hơi khác nhau.
Tài liệu tốt nhất mà tôi biết về không gian tên người dùng là một bài viết
Không gian tên trong bài viết của LWN , phần 5: Không gian tên người dùng .
Bây giờ, tôi sẽ đi với udisks2.
gvfs-mount
-d /dev/sdX