Bạn nên sử dụng chroot
. Các chroot
lệnh thay đổi thư mục gốc mà tất cả các tiến trình con xem. Tôi sẽ đưa ra một ví dụ để chứng minh cách nó hoạt động.
Điều này đã được viết tại chỗ; Tôi không thực sự đứng trước một máy UNIX ngay bây giờ. Trong ví dụ này, có một thư mục có tên dir
với ba tác phẩm: a
, b
, c
, và ls
. Ba đầu tiên là các tập tin thường xuyên. ls
là một liên kết cứng đến ls
nhị phân thực để chúng ta có thể liệt kê các tệp khi ở trong chroot.
Tôi sẽ đi chroot
vào dir
. (Lưu ý rằng tôi có thể quên một số thư mục trong thư mục gốc.)
Đây là thiết lập, ở dạng đầu ra shell:
$ pwd
/home/alex/test
$ l
dir
$ ls dir
a b c ls
$ ./ls dir # does the same thing
a b c ls
$ ls /
bin boot dev etc home mnt media proc sbin sys usr var
Bây giờ tôi sẽ chroot
vào dir
. Đối /bin/bash
số chọn quá trình nên được chạy với thư mục gốc mới. Nó mặc định là /bin/sh
.
$ chroot /bin/bash dir
$ # this prompt is now from a subprocess running in the new root directory
$ PATH=/ ls
a b c ls
$ pwd
/
Bây giờ chúng tôi thoát khỏi chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Tôi hy vọng điều này minh họa cách chroot
hoạt động của lệnh. Về cơ bản những gì bạn phải làm để giải quyết vấn đề của mình là chạy một chroot
lệnh như người dùng đó mỗi khi họ đăng nhập. Có lẽ đặt nó trong một kịch bản khởi động?
Một liên kết cứng đến một tệp sẽ tiếp tục hoạt động bên trong một chroot
, ngay cả khi tệp đó không thể được truy cập bằng các phương tiện khác (điều này hoạt động vì các liên kết cứng trỏ đến inodes, không phải đường dẫn). Vì vậy, để cho phép người dùng truy cập, ví dụ mysql
lệnh, bạn sẽ thực thi:
ln /usr/bin/mysql /path/to/chroot/target