ฉันมีการติดตั้งกับผู้ใช้หลายคนที่สามารถโฮสต์หน้าเว็บส่วนตัวของพวกเขา (ให้บริการโดย apache ผ่าน mod_userdir) ตั้งอยู่ใต้ public_html ในบ้านของพวกเขา การสนับสนุน php ยังเปิดใช้งานใน apache
ในขณะนี้ฉันมีการกำหนดค่าต่อไปนี้ใน /etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
        UserDir <home basedir>/*/public_html
        UserDir disabled root
        <Directory <home basedir>/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes Options
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                <Limit GET POST OPTIONS>
                        Require all granted
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Require all denied
                </LimitExcept>
        </Directory>
</IfModule>
ปัญหาคือเนื่องจากสคริปต์ php ทุกตัวถูกเรียกใช้โดยผู้ใช้ www-ข้อมูล, แต่ละหน้าผู้ใช้มีสิทธิ์เหนือผู้ใช้รายอื่นทุกคน public_html. ตัวอย่างเช่น ฉันสามารถรับ php reverse shell และตรวจสอบเนื้อหาของผู้ใช้รายอื่นได้
ฉันได้ลองเพิ่ม
php_admin_value open_baseir ""
ข้างใน ไดเรกทอรี แท็กด้านบน สิ่งนี้จะป้องกันช่องโหว่ด้านความปลอดภัยที่อธิบายไว้ข้างต้น แต่จริง ๆ แล้วอนุญาตให้สคริปต์ php ลงไปที่ลำดับชั้นของไดเร็กทอรีเท่านั้น ตัวอย่างเช่น
<?php
chdir('assets');
echo getcwd();
chdir('..');
echo "<br>";
echo getcwd();
?>
ผลิต
<home>/public_html/ทรัพย์สิน
<home>/public_html/ทรัพย์สิน
ปัญหาจะได้รับการแก้ไขถ้า <หน้าแรก>/public_html เส้นทางถูกฮาร์ดโค้ดในไฟล์ open_baseir ตัวแปร แต่แน่นอนว่าฉันต้องสามารถทำเช่นนี้กับผู้ใช้ทั้งหมดผ่านตัวแปรบางตัวได้
apache เก็บไวด์การ์ด (<ตามบ้าน>/*/public_html) ตรงกับตัวแปรบางตัวที่ฉันสามารถเข้าถึงได้ภายใน ไดเรกทอรี แท็ก? หรือมีวิธีอื่นที่ดีกว่าในการทำเช่นนี้ เช่น การเรียกใช้หน้าผู้ใช้แต่ละหน้าในสภาพแวดล้อมแบบ chroot