ฉันเดาว่าปัญหาคือโฮมไดเร็กทอรีไม่สามารถเรียกใช้แบบสาธารณะได้ในสภาพแวดล้อมของคุณ
คุณสามารถใส่รายการควบคุมการเข้าถึงในโฮมไดเร็กตอรี่ทั้งหมดที่ให้สิทธิ์ผู้ใช้หรือกลุ่มดำเนินการกับไดเรกทอรี จากนั้นเว็บเซิร์ฟเวอร์อาจสามารถเข้าถึงไฟล์ใด ๆ ในโฮมไดเร็กตอรี่ของผู้ใช้ซึ่งอาจมีวิธีในการเพิ่มสิทธิ์ (อย่างน้อยมันจะขยายผลกระทบของช่องโหว่การเข้าถึงไฟล์ในเครื่อง) ตัวอย่างเช่นภายใต้ Solaris หรือ Linux ตรวจสอบให้แน่ใจว่าระบบไฟล์โฮมถูกเมาท์พร้อมกับacl
ตัวเลือกและรัน
setfacl -m user:www-data:x /home/*
(รวมสิ่งนั้นเข้ากับการตั้งค่าการสร้างบัญชีของคุณ) แล้วบอกผู้ใช้ของคุณว่าพวกเขา~/public_html
ไดเรกทอรีจะต้องสามารถอ่านได้โดยwww-data
ผู้ใช้; พวกเขาสามารถเรียกใช้คำสั่งนี้:
setfacl -R -m default:user:www-data:rx ~/public_html
setfacl -R -m user:www-data:rx ~/public_html
ความเป็นไปได้อีกอย่างก็คือการติดตั้งpublic_html
ไดเรกทอรีผู้ใช้ทั้งหมดในที่แยกต่างหากบนระบบไฟล์ วิธีนี้มีข้อดีที่การอนุญาตในโฮมไดเร็กตอรี่จะไม่สำคัญ; มันยังช่วยให้เว็บเซิร์ฟเวอร์เรียกใช้ chroooted ภายใต้ Linux คุณสามารถทำสิ่งนี้กับโฮมไดเร็กตอรี่:
mount --bind /home/joe/public_html /srv/homepages/joe
ไดเรกทอรีและเนื้อหาของมันยังคงต้องมีการทำสามารถเข้าถึงได้public_html
www-data
ตัวแปรในเมธอด Linux bind mount ใช้ระบบไฟล์bindfs วิธีนี้ใช้ได้กับระบบปฏิบัติการใด ๆ ที่รองรับ bindfs (ซึ่งเป็น unices ส่วนใหญ่) และไม่จำเป็นต้องมีการตั้งค่า ACL ในราคาที่ไฟล์ใด ๆ ภายใต้public_html
จะพร้อมใช้งานสำหรับการอ่านโดยเว็บเซิร์ฟเวอร์
bindfs -u www-data -p 500 /home/joe/public_html /srv/homepages/joe