Cho phép một số hành vi rủi ro nhất định của một chương trình theo cách an toàn trong SELinux


8

Tôi có một chương trình đang chạy bên trong một Docker container tải một tệp .so làm thay đổi hành vi của chương trình thông qua thao tác nối và bộ nhớ. Hành vi này bị chặn bởi SELinux với thông báo sau trong nhật ký kiểm toán:

type = AVC dir = audi (1548166862.066: 2419): avc: bị từ chối c426, c629 t class = process permissive = 0

Tôi cực kỳ do dự khi chỉ thực hiện điều này audit2allowvì tôi không muốn cho phép hành vi cụ thể này ở bất kỳ nơi nào khác (vì điều đó sẽ khá rủi ro).

  • Làm cách nào tôi có thể nói với SELinux để cho phép hành vi cụ thể này theo cách an toàn nhất có thể?
  • Tôi có thể làm điều này theo cách cho phép tôi sinh ra nhiều container Docker chạy cùng chương trình trong tương lai không?

Câu trả lời:


4

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à:

  1. 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.

  2. 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.

  3. 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 ...

  4. 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.

  5. 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.


Câu trả lời của bạn dường như là con đường để đi - thật không may mặc dù tôi không có bất kỳ kinh nghiệm nào khi tự mình tạo ra các chính sách của Selinux. Đây là những gì tôi nghĩ ra bằng cách xem qua bài đăng trên blog mà bạn liên kết và các tài liệu khác. Tôi có cảm giác tôi không làm đúng ... có lẽ bạn có thể giúp tôi bằng cách chỉ cho tôi đi đúng hướng? Chính sách của tôi có ý nghĩa gì không?
Thomas

Cảm ơn, bây giờ tôi có một cái gì đó dường như làm việc! Đây là những gì tôi đã kết thúc với. Tuy nhiên, tôi đã nhận được một loạt các lỗi liên quan đến các bản sao trong thời gian biên dịch, tôi cho rằng đó là một vấn đề trong các chính sách được bao gồm chứ không phải của chính tôi? Tôi cũng không chắc chắn lý do tại sao chuỗi bên trong câu lệnh gen numquire phải được chấm dứt bằng 'thay vì `(cái sau đã ném lỗi). Dù sao, cảm ơn một lần nữa vì sự giúp đỡ!
Thomas

Tôi nghĩ rằng an toàn để bỏ qua những lỗi cụ thể, xem bugzilla . Trích dẫn bằng cách sử dụng `'là cách nó hoạt động trong ngôn ngữ M4 , được sử dụng để viết các mô-đun chính sách tham chiếu. Bạn có thể kiểm tra (sử dụng, ps axZv.v.) rằng container của bạn chạy trong ngữ cảnh chính xác nếu bạn muốn kiểm tra lại sau khi cài đặt và định cấu hình chính sách tùy chỉnh của mình.
sebasth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.