Tôi đã gặp khá nhiều khó khăn với SELinux, nhưng đây là lần đầu tiên nó làm tôi hoàn toàn bối rối. Tôi có hai máy chủ CentOS 8 sản xuất có cấu hình giống hệt nhau về chức năng lưu trữ ứng dụng web. Tôi có một mô-đun thực thi loại tùy chỉnh, các phần có liên quan cho câu hỏi này như sau:
mô-đun my_app 1.0;
nhập my_app_rw_content_t;
files_type(my_app_rw_content_t);
yêu cầu {
gõ httpd_t;
tệp lớp { getattr đọc ghi thực thi exec_no_trans mở tạo hủy liên kết đổi tên liên kết ioctl };
thư mục lớp { add_name remove_name đọc ghi tạo };
lớp lnk_file { getattr đọc mở };
}
cho phép httpd_t my_app_rw_content_t:file { getattr mở đọc ghi tạo hủy liên kết ioctl };
cho phép httpd_t my_app_rw_content_t:dir { add_name remove_name đọc ghi };
Tôi muốn chỉ định my_app_rw_content_t
ngữ cảnh vào thư mục mà ứng dụng của tôi sử dụng để tải lên tệp tạm thời, đó là /data/www/my_app_tmp/. Các tùy chỉnh chính sách sau đang hoạt động trên cả hai hệ thống:
fcontext -a -f a -t httpd_sys_content_t -r 's0' '/data/www(/.*)?'
fcontext -a -f a -t my_app_rw_content_t -r 's0' '/data/www/my_app_tmp(/.*)?'
Trên máy chủ 1, nó hoạt động như mong đợi:
[me@server1 ~]$ matchpathcon /data/www/my_app_tmp
/data/www/my_app_tmp system_u:object_r:my_app_rw_content_t:s0
Trên máy chủ 2, nó không:
[me@server2 ~]$ matchpathcon /data/www/my_app_tmp
/data/www/my_app_tmp system_u:object_r:httpd_sys_content_t:s0
Tôi không thể cho cuộc sống của tôi tìm ra lý do tại sao. Đó là một điểm nửa tranh luận vì tôi sẽ sớm chuyển sang các hệ thống mới trên một bản phân phối khác, nhưng tôi vẫn muốn biết điều gì đang xảy ra ở đây.