it-swarm-vi.com

chroot "tù" - nó là gì và làm thế nào để tôi sử dụng nó?

Tôi đã nghe/đọc rất nhiều về nhà tù chroot trong linux nhưng chưa bao giờ sử dụng nó (tôi sử dụng Fedora hàng ngày), vậy "nhà tù" chroot là gì? Khi nào và tại sao tôi có thể sử dụng nó/không sử dụng nó và tôi còn biết gì nữa không? Làm thế nào tôi sẽ đi về việc tạo ra một?

107
user119

Một nhà tù chroot là một cách để cô lập một quá trình và con cái của nó với phần còn lại của hệ thống. Nó chỉ nên được sử dụng cho các quy trình không chạy bằng root, vì người dùng root có thể thoát ra khỏi nhà tù rất dễ dàng.

Ý tưởng là bạn tạo một cây thư mục nơi bạn sao chép hoặc liên kết trong tất cả các tệp hệ thống cần thiết cho một quy trình để chạy. Sau đó, bạn sử dụng lệnh gọi hệ thống chroot() để thay đổi thư mục gốc ở gốc của cây mới này và bắt đầu quá trình chạy trong môi trường chroot'd đó. Vì nó thực sự không thể tham chiếu các đường dẫn bên ngoài gốc được sửa đổi, nên nó không thể thực hiện các thao tác (đọc/ghi, v.v.) một cách độc hại trên các vị trí đó.

Trên Linux, sử dụng một liên kết gắn kết là một cách tuyệt vời để cư trú trên cây chroot. Sử dụng đó, bạn có thể kéo vào các thư mục như /lib/usr/lib trong khi không kéo vào /usr, ví dụ. Chỉ cần liên kết các cây thư mục bạn muốn vào các thư mục bạn tạo trong thư mục jail.

97
Ben Combee

"Nhà tù chroot" là một cách hiểu sai nên thực sự chết, nhưng mọi người cứ sử dụng nó. chroot là một công cụ cho phép bạn mô phỏng một thư mục trên hệ thống tệp của bạn dưới dạng gốc của hệ thống tệp. Điều đó có nghĩa là bạn có thể có một cấu trúc thư mục như:

-- foo
    -- bar
    -- baz
-- bazz

Nếu bạn chroot foo và làm ls /, bạn sẽ thấy:

-- bar
-- baz

Theo như ls (và bất kỳ công cụ nào khác bạn chạy) có liên quan, đó là những thư mục duy nhất trên hệ thống tệp. Lý do "tù" là một cách gọi sai là chroot không có ý định lực lượng một chương trình ở trong hệ thống tập tin mô phỏng đó; một chương trình biết rằng nó trong một "nhà tù" chroot có thể dễ dàng thoát ra, vì vậy bạn không nên sử dụng chroot như một biện pháp bảo mật để ngăn chương trình sửa đổi các tệp bên ngoài hệ thống tệp mô phỏng của bạn

53
Michael Mrozek

Về cơ bản bạn chỉ đang thay đổi thư mục gốc của môi trường của bạn. Vì thế

/

trở thành

/some-jail/ (or whatever directory you want)

Khi một ứng dụng truy cập/họ sẽ nhận được/một số tù /. Ngoài ra, ứng dụng không thể thoát ra khỏi/một số nhà tù/vì vậy bạn biết rằng nó sẽ không truy cập bất cứ thứ gì khác trên máy của bạn. Đó là một cách nói rất đơn giản 'hey bạn chỉ có thể truy cập vào những thứ mà tôi đang đưa cho bạn, và bạn không thể truy cập bất cứ thứ gì khác trên hệ thống.

12
jacksonh

"Khi nào và tại sao tôi có thể sử dụng nó?"

Một cách sử dụng là trong các kịch bản thử nghiệm (thời gian khởi động và cách khác) tạo tham chiếu đường dẫn tuyệt đối hoặc chạy các lệnh mà bạn có thể muốn chặn và ghi nhật ký (và có lẽ không xử lý chúng) - trong môi trường mà bạn không muốn các lệnh đó thực sự hoạt động trên môi trường chạy của bạn.

Ví dụ: tôi có một thiết bị nhúng chạy Linux, tôi muốn kiểm tra hoạt động của một số bash mà không có a) chạy nó trên thiết bị thực (vì tôi có các công cụ tốt hơn trên máy tính để bàn của mình và không muốn gạch thiết bị) b) đang chạy nó thực sự trên máy tính để bàn của tôi (vì tôi không muốn hệ thống máy tính để bàn của mình bị rối tung)

Ngoài ra, sau đó bạn có thể khám phá các lệnh hoặc tệp tập lệnh khác được sử dụng do quá trình chạy sẽ thoát khi có lỗi khi chạy lệnh hoặc tập lệnh Shell không có trong "chroot jail".

(Tất nhiên, để đi toàn bộ con lợn, bạn có thể chạy bên trong QEMU hoặc Docker hoặc VM, nhưng điều đó sẽ liên quan đến việc tạo một VM hình ảnh, v.v. - nhiều công việc hơn)

6
MikeW