PDA

View Full Version : Chroot anything!


VuThu
09-17-2002, 06:33 PM
Chroot anything ! Viết bởi Nguyễn Thành Biên

1. Nguyên tắc
Lệnh "chroot" hầu như sẵn có trên tất cả các hệ thống UNIX, cú pháp của nó như sau:
chroot <newroot>[command]
new root : Đường dẫn tuyệt đối tới thư mục gốc mới
command: Lệnh được thi hành trong chế độ chroot, nếu tham số này không được chỉ ra, lệnh ngầm định được gọi sẽ là shell tương ứng với shell ngầm định của user thực hiện lệnh.

"chroot" sẽ thực hiện lệnh được chỉ ra trong tham số "command" giả như lệnh đó được thực hiện trong thư mục gốc "new root".
Ví dụ:
Cấu trúc thư mục gốc của một hệ thống UNIX nào đó có rất nhiều thư mục, phần mềm. Một chương trình nào đó trên hệ thống có thể truy xuất rất nhiều thành phần dữ liệu trên đó (bao gồm cả các file chương trình, thư viện, các file cấu hình, thông tin hệ thống .v.v..). Một chương trình nào đó (testapp chẳng hạn) khi chạy, ta không biết nó tạo ra một backdoor hay không, có thu thập thông tin gì về hệ thống nhằm phục vụ cho các mục đích xấu hay không. Để đảm bảo an toàn, ta cần che dấu các thành phần dữ liệu quan trọng của hệ thống thoát khỏi sự nhòm ngó của các chương trình đó (không an toàn nhưng vẫn phải chấp nhận). Nhưng việc liệt kê các thành phần dữ liệu cần bảo vệ (thư viện, chương trình, thông tin cấu hình, thông tin hệ thống..) thường khó làm hơn là làm điều ngược lại: Chỉ cung cấp những gì mà chương trình testapp kia thực sự cần, và ta biết chắc là chỉ cần có thế, giấu đi tất cả những thứ còn lạị Cách trên được thực hiện như sau:
a) Tạo ra thư mục /newroot
b) Copy testapp vào một thư mục con trong đó, chẳng hạn /newroot/bin/testapp
c) Copy các file cấu hình, thư viện, các chương trình khác thực sự cần thiết cho testapp mà ta cho rằng sẽ an toàn vào trong thư mục /newroot theo một cấu trúc hệt như các file trên được lưu trong hệ thống thư mục gốc thực. Ví dụ file /etc/testapp.conf là file cấu hình của testapp. Ta lưu file này tương ứng vào thư mục /newroot/etc/testapp.conf
d) Khi đã tạo, copy đầy đủ những file, thư mục cần thiết vào trong thư mục /newroot, thực hiện lệnh:
chroot /newroot /bin/testapp
Chương trình testapp sẽ chỉ nhìn thấy các file, thư mục có trong toàn bộ cây thư mục /newroot, nó sẽ vẫn hoạt động bình thường trong thư mục newroot mà không biết một thông tin gì về các file, thư mục bên ngoài thư mục /newroot

2. Lỗi thường gặp và cách khắc phục Nguyên tắc để xây dựng một hệ thống "chroot jail" như trên có thể được áp dụng cho nhiều chương trình, nhiều hệ thống UNIX khác nhau, tuy nhiên khi thực hiện với một chương trình cụ thể nào đó sẽ gặp khó khăn sau:
- Không rõ được đầy đủ là chương trình đó cần các file nào, thư viện nào, cần cung cấp thông tin gì để nó có thể chạy được bình thường.
Hướng giải quyết:

a) Chương trình testapp là một chương trình nhị phân (native code): Sử dụng lệnh "lđ testapp" để lấy thông tin về các thư viện mà chương trình đó cần sử dụng. Sau đó copy các thư viện đó vào trong thư mục /newroot/lib hoặc /newroot/usr/lib.
b) Chương trình testapp là một script (shell, perl, python, tcl..): Kiểm tra xem nó là loại script được viết theo ngôn ngữ nào: Nếu là shell script, kiểm tra xem nó được viết trên csh, sh hay ksh .. copy các chương trình đó cùng các thư viện tương ứng của nó (sh, csh, ksh) vào trong thư mục /newroot. Tương tự như vậy, nếu testapp là perl script, cần copy chương trình perl cùng với thư viện, các module cần thiết, nếu là tcl/tk script cần copy chương trình wish cùng các file liên quan.

3. Chương trình testapp khi chạy sẽ gọi đến một chương trình, đọc một file hay một thư mục nào đó: Cân nhắc xem có nên copy các file, thư mục, chương trình tương ứng đó vào /newroot hay không ? Ngay cả khi biết chắc chắn là cần copy, cũng cần cân nhắc xem có nên thay đổi nội dung của file đó hay không ? (Xóa bớt những nội dung không cần thiết, thay đổi nội dung thực tế cho phù hợp với cấu hình chroot)