Я работаю с системным администратором в университете и просто наткнулся на что-то, что, вероятно, распространено, но было для меня шоком.
Все каталоги 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");
?>
Это общая проблема? И как вы обычно это решаете?
ОБНОВИТЬ:
Спасибо за вклад. К сожалению, кажется, нет простого ответа. В большой общей среде, такой как эта, пользователям, вероятно, не следует предоставлять такой большой выбор. Лучший подход, который я могу придумать, - это установить open_basedir в основной конфигурации для всех каталогов public_html, запустить suphp и разрешить только чистый php (без сценариев cgi, запуска внешних команд с обратными галочками и т. Д.).
Такое изменение политики может привести к поломке многих вещей и, вполне возможно, к тому, что пользователи схватят свои вилы и будут преследовать нас ... Я буду обсуждать это со своими коллегами и обновлять здесь, если мы примем решение о том, как изменить установку.
open_basedir
ниже решение для производственных систем общего хостинга, но мы разделили всех на своих собственных виртуальных хостов - не уверен, работает ли он для отдельных каталогов ...