Патч для php-cgi, позволяющий конфигурировать значение listen backlog

По умолчанию значение listen backlog в -cgi жёстко задано — 128. Это означает, что не сможет обработать более 128 запросов одновременно (точнее, что очередь запросов не сможет превысить данного значения). Я столкнулся с тем, что 128 — это мало.

Для тех, кто столкнулся с данной проблемой, но по каким-либо причинам не хочет/не может поставить -fpm (в котором backlog конфигурируется), я сделал небольшой . Далее »

Автор: Vladimir, опубликовано в: C/C++, PHP, комментариев: 9
3
Янв
2010

Модуль поддержки tcpwrappers для nginx

TCP Wrappers — система контроля доступа, используемая для ограничения доступа к серверам на UNIX-подобных операционных системах (, BSD). Контроль доступа может осуществляться, например, по имени хоста (полному или частичному), адресу, подсети. Подробности приведены здесь.

TCP Wrappers очень удобно использовать с программами для защиты от червей (BlackHosts, DenyHosts, Fail2ban), в частности, для защиты от HTTP-сканирования.

Огромным достоинством TCP Wrappers является возможность динамической конфигурации списков контроля доступа (что избавляет от необходимости перезапускать защищаемый сервис) и простота файлов конфигурации (это субъективно).

К сожалению, не поддерживает TCP Wrappers из коробки. К счастью, это можно исправить. Далее »

Автор: Vladimir, опубликовано в: C/C++, Администрирование, Безопасность, комментариев: 1
10
Окт
2009

ngx_drop_privs: принцип минимальных привилегий в nginx

 — замечательный web-сервер, но, как и практически любой программный продукт, не свободен от ошибок, временами весьма критических.

Архитектура такова, что обычно имеется один привилегированный процесс (запускаемый от всемогущего root) и один или более рабочих процессов (обычно работающих от имени непривилегированного пользователя). Тем не менее, я видел конфигурации, в которых все процессы работают под привилегированным пользователем. Один из примеров — многопользовательский сервер, Document Root сайтов на котором имеет права вида 0700 (запускать несколько и настраивать проксирование — тоже не лучший выход).

Кроме того, за последние неполные пять лет в найдено 112 ошибок (segmentation fault), некоторые из которых теоретически могут дать возможность выполнения произвольного кода в системе (wget http://sysoev.ru/nginx/changes.html -q -O - | grep segmentation | wc -l).

Я не знаю, все ли ошибки затрагивали только рабочие процессы, либо были ошибки в главном процессе — рисковать не хочется. Так и родилась идея написать модуль для  — ngx_drop_privs. Далее »

Автор: Vladimir, опубликовано в: C/C++, Linux, Безопасность, комментариев: 3
23
Сен
2009

Последовательность инициализации и сброса в расширениях PHP

Я сейчас занимаюсь написанием расширения , которое меняет UID/EUID (а также GID/EGID) процесса -интерпретатора на UID/GID владельца DocumentRoot сайта. При этом по замыслу расширение должно отключаться, если SAPI не используется (например, запущена CLI-версия интерпретатора).

Для этой задачи оказалось важным знать точную последовательность инициализации и финализации. Далее »

Автор: Vladimir, опубликовано в: C/C++, PHP, комментариев: нет
29
Авг
2009

GCC: освобождение ресурсов для ленивых

Одной из, скажем так, “нетрадиционных” возможностей, которые предоставляет , являются атрибуты типов, переменных и функций.

Я хочу рассказать об одном из них — а именно, отвечающем за удаление использованных ресурсов. Далее »

Автор: Vladimir, опубликовано в: C/C++, комментариев: 2
2
Июнь
2009