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


99

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?

chroot 

câu trả lời ở đây dường như là ngắn gọn về "làm thế nào để tôi sử dụng nó?" :(
Alexander Mills

Câu trả lời:


88

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 chroot()gọi hệ thống để 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 điều đó, bạn có thể kéo vào các thư mục như /lib/usr/libtrong 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.


10
Câu trả lời của bạn rất hay. Mặc dù vậy, một điều cần đề cập, chroot không phải là một cơ chế an toàn (một quá trình có thể thoát ra khỏi nhà tù nếu nó trở thành root và đôi khi ngay cả khi không). Nhà tù thực sự có thể được thực thi với nhà tù freebsd và tương tự. Xem này en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologists
nc3b

3
Quá trình cài đặt Gentoo sử dụng một chroot để bạn có thể thiết lập HĐH mới trước khi cài đặt GRUB và nhân Linux, v.v.
Chris Huang-Leaver

3
Hãy xem firejail cho một vỏ hoàn chỉnh bằng cách sử dụng tất cả các không gian tên Linux. Có gói deb và vòng / phút có sẵn. Tuy nhiên, nói chung, tôi khuyên dùng kernel 3.18 trở lên, do vấn đề đã biết là không thể cài đặt phần mềm mới hoặc quản lý người dùng khi firejailđang chạy.
CivilFan

Câu trả lời tuyệt vời! - mặc dù một số ví dụ cơ bản sẽ rất hay để xem.
Gabriel Staples

Người dùng dưới chroot jail có thể gọi các tệp nhị phân nằm dưới /binđó được cài đặt bởi người dùng root không? @Ben Combee
bắt đầu từ

50

"Nhà tù chroot" là một cách hiểu sai nên thực sự chết, nhưng mọi người vẫn tiếp tục sử dụng nó. chrootlà 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 tin của bạn như là thư mục gốc của hệ thống tập tin. Đ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 foovà làm ls /, bạn sẽ thấy:

-- bar
-- baz

Theo như ls(và bất kỳ công cụ nào khác mà bạn chạy) có liên quan, đó là những thư mục duy nhất trên hệ thống tập tin. Lý do "tù" là một cách gọi sai chrootkhông nhằm mục đích buộc một chương trình ở lại 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 chrootnhư 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


16
Sẽ rất hữu ích khi có một ví dụ về cách thoát khỏi chroot"nhà tù". Các trường hợp tôi đã nhìn thấy đòi hỏi leo thang tới quyền root. Có khó khăn để ngăn chặn một quá trình tự leo thang đến các đặc quyền gốc?
CivilFan

4
Nó vẫn còn "giam cầm" nên "tù" là một cách viết tắt tốt. "Trường ngăn chặn cấp 3" sẽ tốt hơn?!
MikeW

4
Thuật ngữ này xuất phát từ các nhà tù FreeBSD. Nhà tù được xây dựng trên chroot. Nhà tù được dự định để giải quyết các vấn đề bảo mật chrootkhông. Vì lý do này, mọi người thường trộn lẫn chrootjailscó nghĩa là điều tương tự. Họ không. Thuật ngữ "nhà tù" được cho là do Bill Cheswick đặt ra khi ông thiết lập một honeypot để bắt một kẻ bẻ khóa: csrc.nist.gov/publications/secpub/berferd.pdf
BugHunterUK

Vì vậy, bạn có điều, không sử dụng chroot jailmột ý tưởng tốt trong trường hợp của tôi ?
Shafizadeh

10

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 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.


6

"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 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 với lỗi bất cứ khi nào nó cố chạy lệnh hoặc tập lệnh shell không có trong "chroot jail".

(Tất nhiên, để đi hết 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 hình ảnh VM, v.v. - nhiều công việc hơn)

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.