ฉันมีส่วนแบ่งที่ยุติธรรมในการต่อสู้กับ SELinux แต่นี่เป็นครั้งแรกที่ทำให้ฉันนิ่งงันโดยสิ้นเชิง ฉันมีเซิร์ฟเวอร์ CentOS 8 ที่ใช้งานจริงสองตัวที่มีการกำหนดค่าการทำงานเหมือนกันซึ่งโฮสต์เว็บแอปพลิเคชัน ฉันมีโมดูลการบังคับใช้ประเภทที่กำหนดเอง ซึ่งส่วนที่เกี่ยวข้องสำหรับคำถามนี้มีดังนี้:
โมดูล my_app 1.0;
พิมพ์ my_app_rw_content_t;
ไฟล์ประเภท (my_app_rw_content_t);
จำเป็นต้อง {
พิมพ์ httpd_t;
ไฟล์คลาส { getattr อ่าน เขียน ดำเนินการ execute_no_trans เปิด สร้าง ยกเลิกการเชื่อมโยง ioctl เปลี่ยนชื่อลิงก์ };
class dir { add_name remove_name อ่าน เขียน สร้าง };
class lnk_file { เปิดอ่าน getattr };
}
อนุญาต httpd_t my_app_rw_content_t:file { getattr เปิด อ่าน เขียน สร้าง ยกเลิกการเชื่อมโยง ioctl };
อนุญาต httpd_t my_app_rw_content_t:dir { add_name remove_name อ่านเขียน };
ฉันต้องการกำหนดให้ my_app_rw_content_t
บริบทไปยังไดเร็กทอรีที่แอปของฉันใช้สำหรับการอัปโหลดไฟล์ชั่วคราว ซึ่งก็คือ /data/www/my_app_tmp/ การปรับแต่งนโยบายต่อไปนี้ใช้งานได้บนทั้งสองระบบ:
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(/.*)?'
บนเซิร์ฟเวอร์ 1 จะทำงานตามที่คาดไว้:
[me@server1 ~]$ matchpathcon /data/www/my_app_tmp
/data/www/my_app_tmp system_u:object_r:my_app_rw_content_t:s0
บนเซิร์ฟเวอร์ 2 จะไม่มี:
[me@server2 ~]$ matchpathcon /data/www/my_app_tmp
/data/www/my_app_tmp system_u:object_r:httpd_sys_content_t:s0
ฉันไม่สามารถหาสาเหตุได้ตลอดชีวิต เป็นจุดกึ่งสงสัยเพราะฉันจะย้ายไปยังระบบใหม่ในไม่ช้าบน distro อื่น แต่ฉันก็ยังอยากรู้ว่าเกิดอะไรขึ้นที่นี่