TL;DR: ฉันจะเปิดใช้งาน mod_userdir อย่างปลอดภัยได้อย่างไร (ความหมาย: ผู้ใช้แต่ละคนควรสามารถสร้างและให้บริการเนื้อหาของตนใน ~/public_html แต่ไม่ควรได้รับอนุญาตให้อ่านเนื้อหาของกันและกันหรือโดยตรง - แมว /home/userX/public_html/file
- ไม่ผ่านฟังก์ชั่น PHP (file_get_contents('/home/userX/public_html/file'
))
รายละเอียด:
ฉันได้กำหนดค่า Apache ด้วย mod_userdir เพื่อให้ผู้ใช้ของฉันมีตัวเลือกในการให้บริการไฟล์ที่ปล่อยเนื้อหาในโฟลเดอร์ ~/public_html เพื่อป้องกันการเข้าถึงไฟล์และเพื่อหลีกเลี่ยงไม่ให้ผู้ใช้รายใดสามารถอ่านไฟล์ของผู้อื่นได้ ฉันได้กำหนดค่าการอนุญาตดังต่อไปนี้:
/home/userA user.user drwx--x--x (711)
/home/userA/public_html user.user drwxrwx--x (771)
ฉันได้เพิ่ม www-ข้อมูล
ไปยังกลุ่มของผู้ใช้แต่ละคน:
usermod -a -G ผู้ใช้ www-data
(นอกจากนี้ยังสามารถทำงานสร้างกลุ่มและเพิ่มผู้ใช้ทั้งหมด รวมถึง www-ข้อมูล
, ไปมัน)
การกำหนดค่าทั้งหมดทำงานตามที่คาดไว้ ผู้ใช้ทุกคนสามารถเข้าถึงเนื้อหาได้จาก https://server/~user และไม่สามารถอ่านไฟล์ของผู้อื่นได้:
userA@ubuntu:/home$ cat userB/public_html/index.php
แมว: userB/public_html/index.php: ปฏิเสธการอนุญาต
จนถึงตอนนี้ดีมาก แต่ปัญหาก็คือ เนื่องจาก Apache กำลังทำงานเป็น www-ข้อมูล
และมีการเข้าถึงแบบกลุ่มไปยังไฟล์ใด ๆ ภายใน /home/* ผู้ใช้ทุกคนสามารถสร้างไฟล์ PHP เพื่ออ่านเนื้อหาของผู้อื่นโดยใช้ฟังก์ชันเช่น ผู้บริหาร
, ระบบ
, file_get_contents
ฯลฯ
ฉันรู้ว่าฉันสามารถปิดใช้งานฟังก์ชันดังกล่าวจากการดำเนินการเพิ่มไปยัง ปิดการใช้งาน_ฟังก์ชั่น
บล๊อคอิน php.ini
แต่ฉันเห็นว่านี่เป็นการแก้ไขไม่ใช่วิธีแก้ปัญหา สำหรับฉันแล้วดูเหมือนว่าควรมีวิธีอื่นที่ปลอดภัยกว่านี้ในการกำหนดค่า Apache ที่เปิดใช้งาน userdir ฉันได้ค้นหาวิธีการทำอย่างถูกต้อง แต่ยังไม่พบวิธีแก้ไขที่เหมาะสม