วันนี้ฉันจะลองกำหนดค่า User Directory บนเซิร์ฟเวอร์ Apache ประสบปัญหายุ่งยาก ขั้นตอนการกำหนดค่า ปัญหา และแนวทางแก้ไขสรุปได้ดังนี้
1. การกำหนดค่าทั่วไป:
เพิ่มเว็บผู้ใช้:
เว็บผู้ใช้เสริม
เว็บพาสเวิร์ด
สร้างไดเร็กทอรี public_html ในไดเร็กทอรีผู้ใช้เว็บและตั้งค่าการอนุญาตเป็น 755:
mkdir public_html
chmod 755 public_html -R
แก้ไข /etc/http/httpd.conf:
-
# UserDir: ชื่อของไดเร็กทอรีที่ต่อท้ายโฮมของผู้ใช้
# ไดเร็กทอรีหากได้รับ ~ คำขอของผู้ใช้
-
# เส้นทางไปยังไดเรกทอรีของบัญชีผู้ใช้ปลายทาง 'public_html' จะต้องเป็น
# เข้าถึงได้โดยรหัสผู้ใช้ของเว็บเซิร์ฟเวอร์ ซึ่งมักจะหมายความว่า ~userid
# ต้องมีสิทธิ์ 711 ~userid/public_html ต้องมีสิทธิ์
# จาก 755 และเอกสารในนั้นจะต้องสามารถอ่านได้ทั่วโลก
# มิฉะนั้น ลูกค้าจะได้รับข้อความ "403 Forbidden" เท่านั้น
-
# ดูเพิ่มเติม: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
-
<IfModule mod_userdir.c>
-
# UserDir ถูกปิดใช้งานโดยค่าเริ่มต้นเนื่องจากสามารถยืนยันการมีอยู่ได้
# ของชื่อผู้ใช้ในระบบ (ขึ้นอยู่กับโฮมไดเร็กตอรี่
# สิทธิ์)
-
#UserDir ปิดการใช้งาน
-
# เพื่อเปิดใช้งานคำขอไปยัง /~user/ เพื่อให้บริการ public_html ของผู้ใช้
# ไดเร็กทอรี ลบบรรทัด "UserDir ปิดการใช้งาน" ด้านบน และไม่แสดงข้อคิดเห็น
# บรรทัดต่อไปนี้แทน:
-
UserDir public_html
</ถ้าโมดูล>
2. การทดสอบและปัญหาเกิดขึ้น:
http://127.0.0.1/~เว็บ
ต้องห้าม
คุณไม่ได้รับอนุญาตให้เข้าถึง /~web บนเซิร์ฟเวอร์นี้
นอกจากนี้ ยังพบข้อผิดพลาด 403 Forbidden ขณะพยายามใช้ ErrorDocument เพื่อจัดการคำขอ
-------------------------------------------------- -------------------------------------------------- ----------------------------------
เซิร์ฟเวอร์ Apache/2.0.54 (Fedora) ที่ 127.0.0.1 พอร์ต 80
โดยทั่วไป เมื่อปัญหานี้เกิดขึ้น ปัญหาที่อยู่ในใจคือการอนุญาตการเข้าถึงไดเร็กทอรี หลังจากตรวจสอบและปรับเปลี่ยนเป็นเวลานาน ปัญหายังไม่ได้รับการแก้ไข ช่วงนี้ก็คิดว่าจะมีปัญหากับ Selinux หรือเปล่า เลยเข้าไปดูรอบๆ แต่ก็พบว่าไม่มีอะไรเปลี่ยนแปลง (ข้อเท็จจริงภายหลังพิสูจน์ว่าบางครั้งสัญชาตญาณก็มีความแม่นยำมาก ความแตกต่างระหว่างว่าคุณสามารถหาคำตอบได้หรือไม่ มักจะอยู่ที่ว่าคุณเจาะลึกเข้าไปในสัญชาตญาณหรือไม่)
3. วิธีแก้ไขปัญหา หลังจากค้นหา Apache 403 บน Google มาเป็นเวลานาน ในที่สุดฉันก็เห็นในบล็อกที่ผู้เขียนพบปัญหาเดียวกันกับฉันทุกประการ: การกำหนดค่าของ Apache และไดเร็กทอรีนั้นใช้ได้ แต่หน้าสามารถทำได้ จะไม่ถูกแสดง วิธีแก้ไขคือแก้ไขการควบคุมการเข้าถึงของ Selinux เป็น public_html
ใช้คำสั่งต่อไปนี้เพื่อแก้ไขคุณลักษณะความปลอดภัยของโฟลเดอร์
chcon -R -t httpd_user_content_t public_html/
4. สรุปความรู้ที่เกี่ยวข้อง:
คำถามที่พบบ่อยเกี่ยวกับ Fedora Core 5 SELinux
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html ถาม: ฉันจะทำให้ไดเรกทอรี public_html ของผู้ใช้ทำงานภายใต้ SELinux ได้อย่างไร
ตอบ: กระบวนการนี้ถือว่าคุณได้เปิดใช้งานไดเรกทอรี HTML สาธารณะของผู้ใช้ในไฟล์การกำหนดค่า Apache ของคุณ /etc/httpd/conf/httpd.conf กระบวนการนี้ครอบคลุมเฉพาะการให้บริการเนื้อหาเว็บแบบคงที่เท่านั้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Apache HTTP และ SELinux โปรดดูที่ http://fedora.redhat.com/docs/selinux-apache-fc3/
หากคุณยังไม่มีไดเร็กทอรี ~/public_html ให้สร้างไดเร็กทอรีและเติมไฟล์และโฟลเดอร์ที่จะให้บริการ
ซีดี ~mkdir public_htmlcp /path/to/content ~/public_html
ณ จุดนี้ httpd ได้รับการกำหนดค่าให้ให้บริการเนื้อหา แต่คุณยังคงได้รับข้อผิดพลาด 403 ที่ต้องห้าม เนื่องจาก httpd ไม่ได้รับอนุญาตให้อ่านประเภทความปลอดภัยสำหรับไดเร็กทอรีและไฟล์ตามที่ถูกสร้างขึ้นในโฮมไดเร็กทอรีของผู้ใช้ บริบทความปลอดภัยของโฟลเดอร์และเนื้อหาในนั้นซ้ำโดยใช้ตัวเลือก -R:
ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:user_home_t public_htmlchcon -R -t httpd_user_content_t public_html/ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ls -Z public_html/- rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t bar.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t baz.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t foo.html
คุณอาจสังเกตเห็นในภายหลังว่าฟิลด์ผู้ใช้ซึ่งตั้งค่าที่นี่เป็น user_u เปลี่ยนเป็น system_u ซึ่งจะไม่ส่งผลต่อวิธีการทำงานของนโยบายเป้าหมาย ฟิลด์ที่สำคัญคือฟิลด์ประเภท
หน้าเว็บแบบคงที่ของคุณควรแสดงผลอย่างถูกต้องแล้ว หากคุณยังคงพบข้อผิดพลาด โปรดตรวจสอบให้แน่ใจว่าได้เปิดใช้งานบูลีนซึ่งเปิดใช้งานโฮมไดเร็กตอรี่ของผู้ใช้แล้ว คุณสามารถตั้งค่าได้โดยใช้ system-config-securitylevel เลือกแท็บ SELinux จากนั้นเลือก Modify SELinux พื้นที่นโยบาย เลือกอนุญาตให้ HTTPD อ่านโฮมไดเร็กทอรี การเปลี่ยนแปลงจะมีผลทันที
การวิเคราะห์คำสั่งที่ใช้:
ls -Z -d public_html/
#Display บริบทความปลอดภัยของไฟล์/ไดเร็กทอรี -Z, --context
แสดงบริบทด้านความปลอดภัยเพื่อให้พอดีกับจอแสดงผลส่วนใหญ่ แสดงเฉพาะโหมด ผู้ใช้ กลุ่ม บริบทด้านความปลอดภัย และชื่อไฟล์-d, --directory
แสดงรายการไดเรกทอรีแทนเนื้อหา และไม่อ้างอิงลิงก์สัญลักษณ์
chcon -R -t httpd_user_content_t public_html/
#Modify บริบทความปลอดภัยของไฟล์/ไดเร็กทอรี -R, --recursive
เปลี่ยนไฟล์และไดเร็กทอรีแบบวนซ้ำ-t, --type
ตั้งค่าประเภท TYPE ในบริบทความปลอดภัยเป้าหมาย