Chroot trong Linux là gì và nó hoạt động như thế nào?
Bạn đang muốn chạy các ứng dụng hoặc dịch vụ trong một không gian biệt lập trên Linux? Hoặc có thể bạn muốn kiểm tra và gỡ lỗi một ứng dụng mà không ảnh hưởng đến phần còn lại của hệ thống? Nếu vậy, bạn sẽ muốn tìm hiểu về chroot, một cơ chế mạnh mẽ được tích hợp trong Linux cho phép bạn tạo một môi trường riêng biệt trong hệ thống của mình.
Hãy khám phá chroot một cách chi tiết, tìm hiểu về lợi ích của nó, các trường hợp sử dụng, cách thiết lập nó trên hệ thống Linux và nếu cần, cách thoát khỏi nó.
Mục Lục
Chroot trong Linux là gì?
chroot hoặc change-root được cho là một trong những dạng phần mềm chứa dễ dàng và cổ xưa nhất cho phép người dùng sử dụng các ứng dụng và dịch vụ sandbox một cách an toàn. Sandboxing, theo thuật ngữ điện toán, là quá trình cô lập một chương trình trong một không gian hạn chế với các tài nguyên được xác định trước.
Nếu bạn đã quen thuộc với Docker và cách thức hoạt động của nó, bạn có thể coi chroot là một phiên bản rút gọn nhiều của nó. chroot hoạt động bằng cách thay đổi thư mục gốc của chương trình, hạn chế quyền truy cập và khả năng hiển thị, đồng thời cung cấp thêm một lớp cách ly và bảo mật.
Về cơ bản, bạn tạo một thư mục riêng, sao chép tất cả các phụ thuộc của chương trình vào thư mục mới, sau đó chạy lệnh chroot. Điều này cho phép chương trình hoạt động bình thường trong khi không có quyền truy cập vào hệ thống tệp cơ sở.
chroot một chương trình là một cách tuyệt vời để kiểm tra độ tin cậy của nó trong một không gian an toàn mà không làm thay đổi các tệp của hệ thống thực tế. Ngoài ra, bạn cũng có thể giảm rủi ro bảo mật do gói bị xâm phạm gây ra vì trong môi trường chroot, gói bị xâm phạm sẽ không thể truy cập và sửa đổi các tệp hệ thống nhạy cảm.
Chương trình sẽ chỉ có thể truy cập và xem các tệp được nhập vào thư mục chroot, còn được gọi là “nhà tù chroot”. Điều này giữ cho chương trình và các quy trình phụ của nó không can thiệp vào hệ thống cơ sở.
Nhà tù chroot là gì?
Nhà tù chroot là một môi trường biệt lập nơi các chương trình chroot cư trú và được thực thi. Thuật ngữ nhà tù chroot bắt nguồn từ khái niệm rằng quy trình và các quy trình con của nó bên trong môi trường chroot không có quyền truy cập hoặc khả năng hiển thị đối với hệ thống tệp cơ sở và bị mắc kẹt trong giới hạn của chroot với các tài nguyên được xác định trước.
Giờ đây, khái niệm về chroot đã rõ ràng với bạn, hãy bắt tay vào thực hiện và tìm hiểu cách bạn có thể tạo một nhà tù chroot và sinh ra các quy trình trong đó.
Cách tạo một nhà tù chroot và thực thi các chương trình trong đó
Nhà tù chroot về cơ bản là một thư mục chứa tất cả các tài nguyên, tệp, tệp nhị phân cần thiết và các phụ thuộc khác mà chương trình sẽ cần để hoạt động bình thường.
Tuy nhiên, không giống như trong môi trường Linux thông thường, môi trường của chroot jailbreak rất hạn chế và chương trình không thể truy cập các tệp và tài nguyên hệ thống bên ngoài hoặc bổ sung.
Chẳng hạn, để chạy trình bao Bash trong nhà tù chroot, bạn sẽ cần sao chép tệp nhị phân Bash và tất cả các phụ thuộc của nó vào thư mục chroot.
Dưới đây là các bước để tạo một nhà tù chroot và sinh ra một vỏ Bash:
- Để chương trình chạy thành công, bạn cần sao chép tất cả các phụ thuộc của nó vào thư mục chroot. Hãy tìm tệp nhị phân, trong trường hợp này là Bash và vị trí của tất cả các phụ thuộc của nó bằng lệnh which và ldd:
which bash
ldd /usr/bin/bash - Bây giờ bạn đã biết vị trí của tệp nhị phân và các phần phụ thuộc của nó, hãy sao chép chúng vào thư mục mà bạn muốn chuyển thành chroot Prison. Sử dụng lệnh mkdir tạo các thư mục cần thiết và sử dụng lệnh cp, sao chép tất cả các tệp vào các thư mục tương ứng:
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/ - Cuối cùng, với chương trình và các phần phụ thuộc của nó đã được sao chép, bạn có thể chạy lệnh chroot với các đặc quyền nâng cao bằng cách sử dụng tiền tố sudo để sinh ra môi trường chroot trong thư mục đã chọn. Theo mặc định, nó sẽ sinh ra Bash shell. Đây là lệnh để gõ vào:
sudo chroot directory_name
Đó là tất cả các bước để sinh ra một nhà tù chroot và chạy một chương trình bên trong nó.
Làm thế nào để thoát khỏi nhà tù chroot
Mặc dù các nhà tù chroot rất tốt để kiểm tra phần mềm không ổn định, nhưng chúng cũng hữu ích khi xử lý các kết nối SSH vì chroot người dùng được kết nối là một trong nhiều cách để bảo mật máy chủ SSH của bạn.
Mặt khác, nếu bạn là người kiểm tra thâm nhập và đã đăng nhập vào máy chủ SSH của mục tiêu, thì việc nhận thấy môi trường đó là một môi trường chroot có thể gây khó chịu và giống như ngõ cụt.
Tuy nhiên, có khá nhiều cách để thoát khỏi nhà tù chroot bị định cấu hình sai, một số cách yêu cầu kỹ năng lập trình C trong khi những cách khác có thể được tự động hóa bằng công cụ. Một vài cách dễ dàng để thoát khỏi chroot là:
- Các cuộc gọi chroot lồng nhau
- Các cuộc gọi chroot lồng nhau với bộ mô tả tệp đã lưu
- Phương pháp gắn kết gốc
- procfs thoát
- lối thoát ptrace
Xin lưu ý rằng để thực hiện thoát chroot bằng bất kỳ phương pháp nào trong số này, bạn sẽ cần phải có các đặc quyền leo thang trong hệ thống. Tìm hiểu thêm về các phương pháp thoát này bằng cách truy cập kho lưu trữ GitHub của chw00t, một công cụ tự động thoát chroot.
Bây giờ bạn đã biết tất cả về chroot trong Linux
Bây giờ bạn đã biết chroot là gì, cách thức hoạt động và cách triển khai nó, bạn sẽ có thể dễ dàng tạo các ứng dụng hộp cát từ thiết bị đầu cuối. Hãy nhớ rằng, như bạn đã biết, có nhiều cách để thoát ra khỏi môi trường chroot.
Điều này chứng tỏ rằng chroot không hề được thiết kế để triển khai như một tính năng bảo mật. Vì vậy, bạn nên thận trọng khi sử dụng chroot vì cấu hình không phù hợp có thể gây tác dụng ngược và ảnh hưởng đến sự an toàn của hệ thống của bạn.
Tốt nhất là nên sử dụng các giải pháp hộp cát chuyên dụng như phần mềm bộ chứa hoặc máy ảo. Cả hai đều tập trung vào hộp cát và bảo mật, vì vậy trừ khi có một ngày không mới trong thị trấn, bạn sẽ không cần phải lo lắng về tính bảo mật và tính toàn vẹn của hệ thống của mình.
Nếu không chắc nên chọn giữa phần mềm container hóa và phần mềm ảo hóa, bạn nên dùng thử cả hai và tự mình xem cái nào tốt hơn.