Tôi có một thiết lập với nhiều người dùng, những người có thể lưu trữ trang web cá nhân của họ (được cung cấp bởi apache qua mod_userdir
), nằm dưới công khai_html
trong nhà của họ. hỗ trợ php cũng được kích hoạt trong apache.
Hiện tại tôi có cấu hình sau trong /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>
Vấn đề là, vì mọi tập lệnh php được điều hành bởi người dùng dữ liệu www
, mỗi trang người dùng có quyền đối với mọi người dùng khác công khai_html
. Ví dụ: tôi có thể lấy trình bao đảo ngược php và kiểm tra nội dung của người dùng khác.
Tôi đã cố gắng thêm
php_admin_value open_basingir "."
bên trong Danh mục
đánh dấu ở trên. Điều này ngăn chặn lỗ hổng bảo mật được mô tả ở trên, nhưng thực tế chỉ cho phép tập lệnh php đi xuống hệ thống phân cấp thư mục. Ví dụ
<?php
chdir('assets');
echo getcwd();
chdir('..');
echo "<br>";
echo getcwd();
?>
sản xuất
<home>/public_html/nội dung
<home>/public_html/nội dung
Vấn đề được giải quyết nếu <home>/public_html
đường dẫn được mã hóa cứng trong open_basedir
nhưng tất nhiên tôi cần có khả năng thực hiện điều này cho tất cả người dùng thông qua một số biến.
Apache có lưu trữ ký tự đại diện không (<home basedir>/*/public_html
) khớp với một số biến mà tôi có thể truy cập bên trong Danh mục
nhãn? Hoặc có cách nào khác tốt hơn để thực hiện việc này không, chẳng hạn như chạy từng trang người dùng trong môi trường giống như chroot?