ฉันทำงานกับการบริหารระบบที่มหาวิทยาลัยแห่งหนึ่งและเพิ่งพบเจอสิ่งที่อาจเป็นเรื่องธรรมดา แต่ก็น่าตกใจสำหรับฉัน
ไดเร็กทอรี public_html และพื้นที่เว็บทั้งหมดถูกจัดเก็บใน afs พร้อมสิทธิ์การอ่านสำหรับเว็บเซิร์ฟเวอร์ เนื่องจากผู้ใช้ได้รับอนุญาตให้มีสคริปต์ php ใน public_html ของพวกเขาซึ่งหมายความว่าพวกเขาสามารถเข้าถึงไฟล์ของกันและกันได้จากภายใน php (และไฟล์เว็บหลัก!)
สิ่งนี้ไม่เพียงทำให้การป้องกันด้วยรหัสผ่าน. htaccess ไร้ประโยชน์อย่างสมบูรณ์ แต่ยังช่วยให้ผู้ใช้สามารถอ่านไฟล์ต้นฉบับ php ที่มีรหัสผ่านฐานข้อมูล mysql และข้อมูลที่ละเอียดอ่อนที่คล้ายกัน หรือถ้าพวกเขาพบว่าคนอื่นมีไดเรกทอรีที่เว็บเซิร์ฟเวอร์มีการเข้าถึงการเขียน (เช่นบันทึกส่วนตัวหรือบันทึกข้อมูลแบบฟอร์มที่ส่ง) พวกเขาสามารถจัดเก็บไฟล์ในบัญชีเหล่านั้น
ตัวอย่างง่ายๆ:
<?
header("Content-type: text/plain");
print file_get_contents("/afs/example.com/home/smith/public_html/.htpasswd");
?>
นี่เป็นปัญหาที่พบบ่อยหรือไม่? และโดยทั่วไปคุณจะแก้ปัญหาได้อย่างไร
UPDATE:
ขอบคุณสำหรับการป้อนข้อมูล น่าเสียดายที่ไม่มีคำตอบง่ายๆ ในสภาพแวดล้อมที่ใช้ร่วมกันขนาดใหญ่เช่นนี้ผู้ใช้อาจไม่ได้รับตัวเลือกมากมาย วิธีที่ดีที่สุดที่ฉันคิดคือตั้ง "open_basedir" ในการกำหนดค่าหลักสำหรับไดเรกทอรี "public_html" ทั้งหมดเรียกใช้ suphp และอนุญาตเฉพาะ php ที่สะอาด (ไม่มีสคริปต์ cgi, เรียกใช้คำสั่งภายนอกกับ backticks ฯลฯ )
การเปลี่ยนแปลงนโยบายเช่นนี้จะทำให้หลายสิ่งแตกต่างกันและอาจทำให้ผู้ใช้จับโกยและไล่ล่าพวกเรา ... ฉันจะพูดคุยกับเพื่อนร่วมงานของฉันและอัปเดตที่นี่หากเราตัดสินใจว่าจะเปลี่ยนการตั้งค่าอย่างไร
open_basedir
แก้ปัญหาด้านล่างในการผลิตที่ใช้ร่วมกันระบบโฮสติ้ง แต่เราทุกคนแบ่งออกเป็น vhost ของตัวเอง - ไม่แน่ใจว่ามันเหมาะกับไดเรกทอรีเดียว ...