Tôi muốn triển khai hộp cát bằng cách ptrace()
nhập một quy trình tôi bắt đầu và tất cả các con của nó sẽ tạo (bao gồm cả cháu, v.v.). Quy trình cha mẹ ptrace()
, tức là người giám sát. sẽ là một chương trình C hoặc Python đơn giản, và về khái niệm nó sẽ giới hạn truy cập hệ thống tập tin (dựa trên tên đường dẫn và hướng truy cập (đọc hoặc ghi) và truy cập ổ cắm (ví dụ như không cho phép tạo socket). sao cho quy trình ptrace()
d và con của nó (đệ quy) sẽ không thể bỏ qua hộp cát? Có điều gì đặc biệt mà người giám sát nên làm tại thời điểm fork()
để tránh điều kiện chủng tộc? Có thể đọc các đối số tên tệp của ví dụ rename()
từ quá trình con không có tình trạng đua xe?Làm cách nào để ptrace của Linux không an toàn hoặc chứa điều kiện chủng tộc?
Đây là những gì tôi đã lên kế hoạch để làm:
PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE
để tránh (một số) coditions chủng tộc khifork()
ing- disallow tất cả các hệ thống gọi theo mặc định, và soạn một danh sách trắng của hệ thống cho phép gọi
- chắc chắn rằng
*at()
biến thể hệ thống cuộc gọi (nhưopenat
) là đúng được bảo vệ
Tôi nên chú ý đến điều gì khác?
Vì vậy, về cơ bản bạn đang cố gắng sao chép phụ trợ dựa trên ptrace của Systrace (http://www.systrace.org/)? – thkala
Vâng, người giám sát của tôi sẽ làm việc tương tự như systrace. Thật không may, systrace dường như không được duy trì, nó không biên dịch rõ ràng, và nó cũng có vẻ là lỗi (nó treo cứng vô thời hạn khi tôi sandboxed GCC chạy GNU như). – pts