audit2allowcó khả năng tạo ra một quy tắc để cho phép execheapcho container_tquá trình loại. Trước tiên, bạn luôn có thể tạo mô-đun và kiểm tra nó trước khi tải.
Một vấn đề có thể là, bây giờ bất kỳ quy trình nào với container_tloại hiện được phép hoạt động tương tự. Để tránh điều này, bạn có thể cần phải tạo loại tùy chỉnh của riêng mình (sử dụngcontainer_t làm mẫu) và chỉ cho phép execheaploại đặc biệt này.
Bài đăng trên blog này của Dan Walsh giải thích cách viết chính sách tùy chỉnh như vậy. Bạn cũng có thể kết hợp điều này với audit2allowđể tạo ra các quy tắc thực tế. Các bước cần thiết là:
Tạo một chính sách container cơ bản, ví dụ container_execheap:
policy_module(container_execheap, 1.0)
virt_sandbox_domain_template(container_execheap_t)
virt_sandbox_domain_templatemacro tạo loại mới container_execheap_tvà tạo các quy tắc cần thiết cho hoạt động của docker mà loại mới có thể được sử dụng làm miền chứa.
Biên dịch và tải mô-đun chính sách (các tệp phát triển cần thiết, bao gồm tệp tạo tệp, nên được cung cấp theo selinux-policy-develgói):
make -f /usr/selinux/devel/Makefile container_execheap.pp
semodule -i container_execheap.pp
Loại mới có thể được cấu hình là một miền cho phép:
semanage permissive -a container_execheap_t
Đối với các miền cho phép, từ chối AVC được ghi lại nhưng các quy tắc không được thi hành. Bằng cách này, nó dễ dàng tạo ra các quy tắc còn thiếu sau khi sử dụng audit2allow.
Chạy container của bạn trong bối cảnh mới này, một cái gì đó như docker run ... --security-opt label:type:container_execheap_t ...
Tạo lỗi dự kiến. Sau đó chạy audit2allowđể tạo quy tắc cho phép các hoạt động cho container_execheap_t. Bạn có thể cập nhật cùng một .tetệp mô-đun (nhớ tăng số phiên bản) với các quy tắc mới. Biên dịch và cài đặt các mô-đun cập nhật.
Khi không còn lỗi nào được tạo, hãy đặt loại thùng chứa tùy chỉnh trở lại chế độ thực thi semanage -d container_execheap.