นี่คือวิธีการสอนเกี่ยวกับกรณี SELinux:
ค้นหาว่า SELinux เปิดใช้งานอยู่หรือไม่:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
ถ้าเป็นเช่นนั้นการตรวจสอบเปรียบเทียบบางอย่างอาจช่วยได้ ยกตัวอย่างเช่นเซิร์ฟเวอร์มี DocumentRoot เริ่มต้นที่แต่เราต้องการที่อื่นเช่น/var/www/html
/path/to/document/root
ถ้า SELinux ไม่ยุ่งกับทรัพยากรls -dZ
บนไดเรคทอรีจะแสดงรายการดังนี้:
$ ls -dZ /path/to/document/root
? /path/to/document/root/
ในทางตรงกันข้ามหากมีการใช้บริบทของ SELinux จะมีls -dZ
ลักษณะดังนี้:
$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root
หากเราเปรียบเทียบกับ DocumentRoot ที่ใช้งานได้มันจะมีลักษณะดังนี้:
$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
_r
และ_t
เกี่ยวข้องกับ-r
( --role
และ-t
( --type
) อาร์กิวเมนต์ไปchcon
นี่คือการตัดลงหน้าคน.
NAME
chcon - change file security context
SYNOPSIS
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
DESCRIPTION
Change the security context of each FILE to CONTEXT. With --reference,
change the security context of each FILE to that of RFILE.
--reference=RFILE
use RFILE's security context rather than specifying a CONTEXT value
-R, --recursive
operate on files and directories recursively
ในขั้นแรกให้เดาสิ่งต่อไปนี้อาจใช้งานได้ แต่อาจไม่ทำงาน
$ sudo chcon -R -t httpd_sys_content_t /path/to/document/root
หากเว็บเซิร์ฟเวอร์ยังมองไม่เห็น DocumentRoot โปรดทราบว่าบริบทมีความสำคัญจนกลับมาสู่รูท:
$ sudo chcon -R -t httpd_sys_content_t /path/to/document
$ sudo chcon -R -t httpd_sys_content_t /path/to
$ sudo chcon -R -t httpd_sys_content_t /path
ณ จุดนี้เว็บเซิร์ฟเวอร์สามารถดูไดเรกทอรี
ใช่ฉันเรียนรู้วิธีที่ยากในคืนนี้
หมายเหตุ: การใช้chcon conceptually มีข้อเสียต่อเอกสาร RedHat ( 5.6.1. การเปลี่ยนแปลงชั่วคราว: chcon ) ที่ระบุ:
The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.
ใช้semanageและrestoreconเพื่อทำการเปลี่ยนแปลงเพิ่มเติมอย่างถาวร ตัวอย่างสั้น ๆ :
$ sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
"/path/to/document/root(/.*)?"
$ sudo restorecon -FR /path/to/document/root
สำหรับการคืนค่าโปรดทราบว่า-Fจำเป็นต้องมีผลกับบริบททั้งหมด (เช่นผู้ใช้และประเภท) นอกจากนี้-Rหมายถึงการเปลี่ยนแปลงแบบวนซ้ำ อาร์กิวเมนต์-vหรือ-pสามารถแสดงความคืบหน้าในแบบ verbose หรือ terse ใช้-FRnvเพื่อดูว่าจะเกิดอะไรขึ้นหากไม่มีการเปลี่ยนแปลงใด ๆ
เมื่อใช้semanageด้วยวิธีนี้คุณสามารถดูการเปลี่ยนแปลงความปลอดภัยในเครื่องได้ด้วยคำสั่งเช่น:
$ sudo semanage export
ผลลัพธ์ของการส่งออก semanageอาจถูกบันทึกและใช้โดยการนำเข้า semanageเพื่อให้ง่ายต่อการใช้ชุดของการเปลี่ยนแปลงกับระบบต่าง ๆ
หมายเหตุ: คำตอบนี้ให้บริบทประเภทพื้นฐานที่สุดสำหรับไซต์ ความปลอดภัยอาจมีความละเอียดมากยิ่งขึ้น ตัวอย่างเช่นดูรายการประเภทที่สามารถใช้กับหน้าเว็บเซิร์ฟเวอร์ด้วยคำสั่งเช่น:
$ seinfo -t | grep http
หมายเหตุ: ยูทิลิตี้เช่นsemanageและseinfoอาจไม่ได้รับการติดตั้งโดยค่าเริ่มต้น อย่างน้อยในการแจกแจงแพคเกจที่จำเป็นอาจมีชื่อดังนี้:
policycoreutils-python
setools-console
DocumentRoot
หรือไม่ซึ่งอาจให้ข้อมูลเชิงลึกเกี่ยวกับสิ่งที่เว็บเซิร์ฟเวอร์เห็น คุณอาจต้องการตรวจสอบไดเรกทอรีอื่น ๆ ตามเส้นทางแม้ว่ามัน/var/www/
จะไม่เป็นปัญหา