Tôi đang làm việc trên một dự án thực hiện các mô phỏng phân tán: mã tùy ý được thực thi trên nhiều nút và kết quả được thu thập và tổng hợp sau đó.
Mỗi nút là một phiên bản của máy ảo Ubuntu Linux và chạy một quy trình chính, đảm nhiệm việc chuyển tiếp mã được thực thi đến một số quy trình worker (1 cho mỗi lõi).
Câu hỏi này là về cách đảm bảo rằng mỗi công nhân hoạt động trong môi trường hộp cát mà không cần sử dụng một ví dụ máy ảo cho mỗi người trong số họ. Các yêu cầu chính xác cho người lao động là:
- fs : không có quyền ghi, quyền chỉ đọc giới hạn trong một thư mục (và thư mục con)
- net : chỉ cho phép truyền thông cục bộ (IPC, TCP, bất cứ điều gì ...)
- mem : giới hạn sử dụng bộ nhớ (không có bộ nhớ trao đổi) giết nếu vượt quá giới hạn mem
- cpu : chỉ cho phép 1 lõi, giết nếu quá thời gian giới hạn
Không có giới hạn nào khác được áp đặt: công nhân sẽ có thể tải các thư viện động (từ thư mục chỉ đọc), sinh ra các luồng hoặc tiến trình mới, chức năng hệ thống gọi, ecc ecc nhưng các giới hạn phải được kế thừa bởi các thực thể được sinh ra / tải và nên áp dụng một cách khôn ngoan (ví dụ: chúng ta không thể có một nhân viên sinh ra hai luồng sử dụng mỗi luồng 800 MB là giới hạn bộ nhớ cho nhân viên đó là 1GB).
Không cần phải nói rằng không có cách nào để người lao động nâng cao quyền của mình.
Tôi đã dành thời gian đáng kể để xem xét các lựa chọn thay thế có sẵn (SELinux, AppArmor, cgroups, ulimit, Linux không gian tên, LXC, Docker, ...) cho giải pháp đơn giản nhất đáp ứng yêu cầu của tôi nhưng kinh nghiệm của tôi về lĩnh vực này còn hạn chế.
Hiểu biết hiện tại: LXC và Docker một chút về mặt nặng cho trường hợp sử dụng của tôi và không hoàn toàn an toàn 1 . AppArmor thích hơn so với SELinux do cấu hình dễ dàng hơn, sử dụng nó cho các hạn chế fs và net; cgroups thích ulimit (hoạt động trên một quy trình duy nhất), đã sử dụng nó cho các hạn chế mem và cpu.
Đây có phải là cách đơn giản nhất để đạt được mục tiêu của tôi? Tôi có thể sử dụng AppArmor hoặc cgroups độc quyền không? Có một số lỗ hổng bảo mật rõ ràng trong mô hình của tôi? Hướng dẫn phải là "công nhân được phép tự hạ mình nhưng không có gì khác" .