Tôi hiện đang làm việc ở mặt sau của hệ thống cuộc thi lập trình công cộng giống như ACM. Trong hệ thống như vậy, bất kỳ người dùng nào cũng có thể gửi mã nguồn, sẽ được biên dịch và chạy tự động (có nghĩa là không có kiểm duyệt trước mắt người) được thực hiện để giải quyết một số vấn đề về tính toán.Làm thế nào để cấm các cuộc gọi hệ thống, GNU/Linux
Back-end là một máy chuyên dụng GNU/Linux, nơi người dùng sẽ được tạo cho từng thí sinh, tất cả những người dùng đó là một phần của nhóm người dùng. Các nguồn được gửi bởi bất kỳ người dùng cụ thể nào sẽ được lưu trữ tại thư mục chính của người dùng, sau đó được biên dịch và thực hiện để được xác minh đối với các trường hợp thử nghiệm khác nhau.
Điều tôi muốn là cấm sử dụng các cuộc gọi hệ thống Linux cho các nguồn. Đó là bởi vì các vấn đề đòi hỏi các giải pháp độc lập nền tảng, trong khi cho phép các cuộc gọi hệ thống cho nguồn không an toàn là một vi phạm an ninh tiềm ẩn. Các nguồn như vậy có thể được đặt thành công trong FS, thậm chí được biên dịch, nhưng không bao giờ chạy. Tôi cũng muốn được thông báo bất cứ khi nào có chứa các cuộc gọi hệ thống đã được gửi.
Bởi bây giờ, tôi thấy các địa điểm sau khi kiểm tra như vậy có thể được đặt: Phân tích
- Front-end/pre-biên soạn - nguồn đã kiểm tra trong hệ thống, nhưng chưa được biên dịch. Kiểm tra văn bản đơn giản đối với tên cuộc gọi hệ thống. Giải pháp phụ thuộc vào ngôn ngữ, phụ thuộc vào trình biên dịch, độc lập.
- Vá biên dịch - sự cố GCC (hoặc bất kỳ trình biên dịch nào khác được bao gồm trong chuỗi công cụ) bất cứ khi nào cuộc gọi hệ thống gặp phải. Giải pháp dựa trên nền tảng, phụ thuộc vào trình biên dịch, độc lập ngôn ngữ (nếu chúng ta đặt trình kiểm tra "đủ xa"). Khả năng tương thích cũng có thể bị mất. Trong thực tế, tôi không thích điều này thay thế nhiều nhất.
- Trình kiểm tra thời gian chạy - bất cứ khi nào cuộc gọi hệ thống được gọi từ quy trình, hãy chấm dứt quá trình này và báo cáo. Giải pháp này là trình biên dịch và ngôn ngữ độc lập, nhưng phụ thuộc vào nền tảng - Tôi đồng ý với điều đó, vì tôi sẽ triển khai back-end trên các nền tảng tương tự trong ngắn hạn và trung hạn.
Vì vậy, câu hỏi đặt ra là: GNU/Linux có cung cấp cơ hội cho quản trị viên cấm sử dụng cuộc gọi hệ thống cho nhóm người dùng, người dùng hoặc quy trình cụ thể không? Nó có thể là một chính sách bảo mật hoặc một tiện ích GNU nhẹ.
Tôi đã cố gắng sử dụng Google, nhưng Google không thích tôi hôm nay.
_Front-end/pre-compilation analysis_ ← thủ thuật tiền xử lý có thể tránh được điều này một cách dễ dàng. Có 'seccomp' là một chế độ mà trong đó một quá trình chỉ có thể đọc/ghi vào một ống được mở trước. Nó được kích hoạt thông qua một cuộc gọi 'prctl()'. Có những câu hỏi tương tự ở đây trên SO: http://www.google.com/search?q=seccomp+site%3Astackoverflow.com&btnG=Buscar&oe=utf-8 – ninjalj
@ninjalj đã thử nhưng không tìm thấy. Tâm trí để chia sẻ một liên kết? – iehrlich
Chỉ cần thêm liên kết vào nhận xét trước của tôi. – ninjalj