TL;DR: Как я могу включить mod_userdir безопасным способом? (имеется в виду: каждый пользователь должен иметь возможность создавать и обслуживать свой контент в ~/public_html, но им не должно быть разрешено читать контент друг друга или напрямую - кот /home/userX/public_html/файл
- ни через функции PHP (file_get_contents('/home/userX/public_html/файл'
))
Подробности:
Я настроил 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-данные
(также может работать создание группы и добавление всех пользователей, включая www-данные
, к нему)
Вся конфигурация работает как положено. Любой пользователь может получить доступ к его содержимому с https://server/~user и не может читать чужие файлы:
userA@ubuntu:/home$ cat userB/public_html/index.php
cat: userB/public_html/index.php: Отказано в доступе
Все идет нормально. Но проблема в том, что, поскольку Apache работает как www-данные
и он имеет групповой доступ к любому файлу внутри /home/*, любой пользователь может создать файл PHP для чтения чужого контента, используя такие функции, как исполнитель
, система
, file_get_contents
, и т.д.
Я знаю, что могу запретить выполнение таких функций, добавив их в отключить_функции
заблокировать php.ini
но я вижу в этом патч, а не решение. Поэтому мне кажется, что должен быть другой, более безопасный способ настройки этой конфигурации Apache с поддержкой userdir. Я искал способ сделать это правильно, но не нашел правильного решения.