Я использую веб-сервер apache на debian, обрабатывая 12 разных веб-сайтов. Два дня назад я подвергся атаке, и хакер загрузил оболочку php через ftp на одном из этих 12 сайтов.
Что я бы сказал об этой оболочке, это «ах, это может получить доступ только к папке www /, он не может вернуться», но вот проблема, с этой оболочкой он мог получить доступ даже в папку / и увидеть все папки - документы, которые он хотел бы (mailq, пользователи, все файлы веб-сайтов ...), он мог перемещаться по ВСЕМ моим vps, просматривая все документы и их содержимое (не изменяя их!), не изменяя их.
Я думал об этом в последние дни и подозреваю, что это проблема с разрешением www-data или что-то в этом роде, но не смог найти никакого решения.
Итак, как я могу сделать это, если я перейду на site1.com (на моем vps), я буду использовать пользователя, который может получить доступ только к этому каталогу?
В общем, если хакер снова загрузит оболочку php, я хочу, чтобы он не смотрел на остальные документы, стоящие за /var/www/site1.com/www/
Спасибо, парни!
Я бы рекомендовал использовать chroot-окружение с mod_security
. Таким образом, при любом взломе демона Apache (или пользователя chroot, от имени которого запускается Apache) будет открываться только chroot-дерево, а не весь сервер.
Документация здесь: http://www.modsecurity.org/documentation/apache-internal-chroot.html
То, о чем вы просили, - хорошая идея, но на практике ее может быть очень сложно реализовать.
На самом деле нет никакого способа остановить злоумышленника от просмотра файлов, доступных веб-серверу ... поскольку атака происходит через веб-сервер, вы не можете заблокировать доступ, не сделав файлы полностью недоступными. Вы можете защитить другие конфиденциальные данные в своей системе, убедившись, что к ним могут получить доступ только определенные группы ... например, убедитесь, что только группа «mail» может получить доступ к нашему mailq. Это означает (а) создание необходимых групп, (б) установку необходимых разрешений для файлов / каталогов и (в) обеспечение того, чтобы все демоны работали с правильными учетными данными.
Если вы ищете более надежное решение, вы можете использовать какое-нибудь облегченное решение для виртуализации (например, контейнеры Linux, http://lxc.sourceforge.net/) для создания виртуальных частных серверов для каждого сайта, но это требует больше времени и ресурсов.
Вы можете запускать каждый веб-сайт как отдельный идентификатор пользователя. Это немного сложно; Самый простой - запустить по одному экземпляру Apache для каждого сайта на определенном порту, а затем использовать модуль Apache Proxy для делегирования доступа с вашего основного сервера на порт 80. Поскольку это решение включает один экземпляр Apache на сайт, оно также имеет последствия для ресурсов. Существуют модули, которые позволят вам выполнить это в рамках одного экземпляра Apache, см. http://blog.andreaolivato.net/open-source/running-apache2-virtualhost-with-different-users.html для примера.