Làm thế nào tôi có thể truy cập một thư mục bên ngoài một chroot từ bên trong nó?


33

Tôi có một người dùng được chọn vào thư mục chính của cô ấy, nhưng tôi muốn cô ấy cũng có thể quản lý các tệp trong đó /var/www. Như vậy, tôi đã làm như sau:

root@server:/home/username# ln -s /var/www www
root@server:/home/username# cd www
root@server:/home/username/www# chown username:username *

Tuy nhiên, khi tôi cố mở /wwwbằng FileZilla, nó sẽ trả về "không có tệp hoặc thư mục như vậy". Tôi có thể thấy thư mục được liên kết, nhưng tôi không thể truy cập nó. Tôi đang làm gì sai?

Câu trả lời:


52

Symlinks về cơ bản chỉ là con trỏ đến một tệp khác, bạn không thể trỏ đến một cái gì đó bên ngoài chroot bởi vì nó đang tìm kiếm một tệp có tên đó ( /var/wwwkhông tồn tại bên trong chroot). Mặt khác, các liên kết cứng là con trỏ tới nút. Như vậy, nếu bạn muốn làm điều đó, bạn cần sử dụng một liên kết cứng bằng cách bỏ qua -s. Tuy nhiên, bạn không thể liên kết cứng một thư mục (trừ ...) trong Linux vì nhiều lý do (lý do chính là các hệ thống tệp đó là DAG ).

Có lẽ cách tốt nhất sẽ là sử dụng một liên kết gắn kết. Thử đi:

mount --bind /var/www /home/username/www

ln: '/var/www': hard link not allowed for directory
Dốc

7
@Doc - Các thư mục không thể liên kết cứng trong Linux. Một liên kết gắn kết nên làm việc.
Chris Xuống

1
Tôi có thể thêm cái này vào fstab để làm cho nó bền bỉ không?
Kornel

Bạn có thể tái diễn thông qua các thư mục và sao chép cây với các liên kết cứng? Ví dụ, nếu cha mẹ có /foo/a.txt/foo/bar/b.txtsau đó bạn có thể làm gì mkdir -p ./chroot/foo/; mkdir -p ./chroot/foo/bar; ln /foo/a.txt ./chroot/foo/a.txt; ln /foo/bar/b.txt ./chroot/foo/bar/b.txt? Hoặc điều đó vẫn không hoạt động vì một số lý do? (Rõ ràng đây là việc bạn viết kịch bản để làm, thay vì làm bằng tay).
Shadowtalker

1
@Kornel bạn có thể sử dụng nonechế độ cùng với bindtùy chọn: serverfault.com/questions/613179/iêu
Yvan
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.