Конфигурация nginx для работы Livestreet
Наша команда активно использует nginx как самостоятельный веб-сервер. Мы с легкостью отказались от apache, и призываем к этому всех наших клиентов.
Для всех неравнодушных к хостингу Livestreet и производительности их сайтов публикуем конфиг для nginx:
Для ваших PR всегда доступен репозиторий: github.com/elasticweb/nginx-configs
Для всех неравнодушных к хостингу Livestreet и производительности их сайтов публикуем конфиг для nginx:
root /home/{username}/domains/{parent_domain}; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~* /templates/.*\.(tpl|php)$ { deny all; } location /tmp { deny all; } location ~ /\. { deny all; } location ~ \.(tpl|xml|log|sql)$ { deny all; } location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 7d; } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/php5-{domain}.sock; }
Для ваших PR всегда доступен репозиторий: github.com/elasticweb/nginx-configs
9 комментариев
Не используйте try_files — это создает проблемы с безопасностью. К тому же зачем вам проверять листинг директории? Не используйте локейшены с шаблоном по *.php — еще одна дырка, ди и они вам вообще не к чему. Или у вас на одном server_name несколько движков с доступом по index.php?
И не придется городить костыли, типа таких (кстати почему только tpl и php)?
Представленный конфиг подразумевает правила для директивы server {} конкретного сайта. Все условия для безопасности описываются выше.
1. Директива try_files позволяет из директории сервера скачать любой файл. Именно для это вы добавляете вот этот костыль
— это очень плохой подход. Вы не можете знать о том, какие еще файлы могут оказаться в директориях движка и как доступ к ним может повлиять на безопасность. Пример: есть скрипты сканирующие стандартные директории типа config/ на предмет артефактов: config.php запрещен, ок, но у вас например не запрещены такие файлы как .swp .bak .~ и т.д., которые могут создаваться редакторами. А как насчет .gz? .backup? .old? Уверены? А если еще какой-то разработчик будет работать в директории он ничего не оставит? Поэтому такой подход очень плохой. Я запускаю скрипт который будет раз в минуту проверять создание копий config.php со всеми возможными расширениями, и как только он появится у меня будет пароль от БД. (примеров может быть сколько угодно).
2. Вот этот локейшен
— разрешает выполнение ЛЮБОГО php файла в серверной директории. То есть представим такую ситуацию — в какой-нибудь поставке какого-нибудь плагина просто тупо лежит уязвимый php скрипт. Да можно хоть специально его туда подложить и раздавать на каких-нибудь левых ресурсах (например раздавать бесплатно платный плагин). Другой пример: предположим каким-то образом разрешена загрузка файлов с расширением php во временные директории внутри серверной директории и мы можем узнать имя файла после загрузки.
И самое главное что все это закрывается элементарно.
Описанные вами ситуации действительно возможны, но от человеческих ошибок разработчиков сложно застраховаться на 100%.
На счёт скрипта проверяющего все возможные расширения config.php — ситуация скорее параноидальная (без обид).
Для наших клиентов всегда доступен nginx редактор, и в случае необходимости они могут запретить доступ к дополнительным папкам и файлам, усовершенствовав свой конфиг.
Будем рады видеть от вас PR на github.com/elasticweb/nginx-configs.
Спасибо за интересный диалог.
Да ну что вы такое говорите, вот беглым поиском пара строчек с access логов моего продуктивного сервера (и такая дребедень постоянно):
(домен изменен)