Cách tạo nhãn SELinux tùy chỉnh


11

Tôi đã viết một dịch vụ / ứng dụng nhị phân duy nhất mà tôi đang cố chạy trên Fedora 24, nó chạy bằng systemd, tệp nhị phân được triển khai để /srv/bot

dịch vụ / ứng dụng này tôi đã viết cần tạo / mở / đọc và đổi tên các tệp trong thư mục này.

Lần đầu tiên tôi bắt đầu tạo một chính sách mới dựa trên SELinux: cho phép một quá trình tạo bất kỳ tệp nào trong một thư mục nhất định

nhưng khi ứng dụng của tôi cần đổi tên, đầu ra có cảnh báo:

#!!!! WARNING: 'var_t' is a base type.
allow init_t var_t:file rename;

Tôi đã đi vòng quanh và tôi phát hiện ra rằng tôi nên sử dụng nhãn SELinux cụ thể hơn loại cơ sở, nhưng tất cả các ví dụ trực tuyến hiển thị cho bạn các nhãn hiện có từ httpd / nginx / vv.

Có cách nào để tôi có thể tạo nhãn tùy chỉnh chỉ cho ứng dụng của mình không?

Ý tưởng của tôi là tạo ra một cái gì đó như myapp_var_t, sử dụng

semanage fcontext -a -t my_app_var_t '/srv/bot(/.*)?'
restorecon -R -v /srv/bot

và một .pptệp tùy chỉnh sẽ sử dụng loại tùy chỉnh này

Nếu có một cách tốt hơn để giải quyết nó, điều đó cũng làm việc.

Cảm ơn

Cập nhật

Sau khi tìm kiếm nhiều hơn, tôi nghĩ thuật ngữ thích hợp cho những gì tôi muốn làm là tạo ra cái mới typesdẫn tôi đến https://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3036916

về cơ bản là nói, chạy

sepolgen /path/to/binary

và tôi đã có thể lấy một mẫu mà sau đó tôi có thể biên dịch thành tệp pp và tải, vẫn gặp một số lỗi nhưng có vẻ như tôi gần với những gì tôi muốn làm hơn.

Nếu tôi làm cho nó hoạt động, tôi sẽ cập nhật bài viết này

Câu trả lời:


11

Với điểm bắt đầu chạy

sepolgen /path/to/binary

cung cấp cho bạn:

app.fc
app.sh
app.if
app.spec
app.te

Để tạo một cái mới SELinux file contextđể áp dụng cho thư mục mẹ chứa các tệp mà chương trình / trình nền của bạn sẽ sửa đổi, bạn chỉnh sửa tệp app.te và thêm:

type app_var_t;
files_type(app_var_t)

Dòng đầu tiên khai báo loại mới và dòng thứ hai gọi một macro thực hiện một số phép thuật và biến nó thành một loại tệp (hóa ra bạn không thể sử dụng một dòng ngữ cảnh quá trình app_exec_t trên một tệp hoặc thư mục), xem "Loại tự động được xem lại" để biết thêm thông tin về các loại khác nhau

Khi bạn đã khai báo loại, bạn cần nói với SELinux rằng ứng dụng của bạn được phép sử dụng nó, trong trường hợp của tôi, tôi đã thêm

allow app_t app_var_t:dir { add_name remove_name write search};
allow app_t app_var_t:file { unlink create open rename write read };

Về cơ bản, hai dòng này cho phép loại app_t là miền của ứng dụng của tôi, viết thư mục / search / etc với ngữ cảnh app_var_tvà cho phép nó tạo / mở / xóa / etc với ngữ cảnh app_var_t

Phần cuối cùng của câu đố là bằng cách nào đó nói với SELinux thư mục và tệp nào sẽ nhận được từng loại, bạn làm điều này bằng cách chỉnh sửa app.fctệp (fc => bối cảnh tệp)

tập tin này chỉ có hai dòng trong trường hợp của tôi:

/srv/bot/app        --  gen_context(system_u:object_r:app_exec_t,s0)
/srv/bot(/.*)?          gen_context(system_u:object_r:app_var_t,s0)

dòng đầu tiên trỏ thẳng đến nhị phân như được triển khai trên các máy chủ của tôi, vì vậy dòng này nhận được bối cảnh app_exec_t.

Dòng thứ hai có nghĩa là:

Áp dụng app_var_t cho thư mục / srv / bot và cả các tệp bên trong dir / srv / bot

Lưu ý cách dòng đầu tiên có --giữa đường dẫn và lệnh gọi đến gen_context. --có nghĩa là, áp dụng điều này cho chỉ các tập tin. trong trường hợp thứ hai, chúng ta không có bất cứ thứ gì (chỉ là khoảng trắng), có nghĩa là, áp dụng cho tất cả các thư mục và tệp phù hợp, đó là những gì tôi muốn, một tùy chọn khác là -dchỉ áp dụng các thư mục.

Bây giờ tôi có một chính sách làm việc, tôi có thể triển khai ứng dụng của mình với chính sách tùy chỉnh và tất cả đều hoạt động. (chính sách của tôi có nhiều mục hơn trong .tetệp nhưng nó nằm ngoài phạm vi của câu hỏi này.)

Tài liệu đọc thêm đã giúp tôi có được giải pháp này:

Làm cho mọi thứ dễ dàng hơn với sepolgen

Hãy suy nghĩ trước khi bạn mù quáng kiểm toán2allow -M mydomain

TỰ TIN CHO CÁC NHÀ PHÁT TRIỂN HAT ĐỎ (PDF dài)

Một mô-đun SElinux (1): loại và quy tắc

Chính sách mẫu (đặc biệt là postgresql)

Hiểu các tệp ngữ cảnh tệp


Hoặc sử dụng CIL
Jakuje

sepolgen /path/to/binaryphun ra một lỗi cú pháp cho tôi. Tôi đang trên RHEL 7.6. Tôi nghĩ sepolgen --application /path/to/binarylà cú pháp thích hợp nếu mục tiêu của bạn là viết một chính sách cho một ứng dụng cụ thể ??
jayhendren

Tệp của bạn .tecũng gây ra lỗi cú pháp cho tôi khi biên dịch mô-đun : app.te:5:ERROR 'This block has no require section.' at token 'files_type' on line 5:. Và nếu tôi thêm một requirephần, tôi nhận được:ERROR 'syntax error' at token 'files_type' on line 13:
jayhendren

Xin lỗi, tôi không còn có quyền truy cập vào máy Fedora để kiểm tra nó, nhưng có thể là từ phiên bản 24, họ đã thay đổi cú pháp.
fmpwizard
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.