Назад | Перейти на главную страницу

Последствия, связанные с изменением php-fpm

Я создаю производственный сервер, на котором будет работать nginx с php-fpm. Я хочу, чтобы у меня было хорошее сочетание между безопасностью сервера и хорошим быстрым рабочим процессом.

Теперь одна вещь, которая всегда защищает систему, - это chroot. Я много читал об этом, и chroot nginx довольно сложен.

Говорят, что хорошим способом является использование функции chroot, встроенной в php-fpm. Я прочитал несколько руководств, в которых объясняется, как это настроить, но я не читал о последствиях, которые это несет. Я даже читал, что их нет.

Ну, первая проблема, с которой я столкнулся, была связана со временем. Решение было скопировать /etc/localtime и папка /usr/share/zoneinfo в каталог chroot.

НИ ОДИН из гидов не говорит вам об этом, и это первая ошибка, которую вы замечаете.

Теперь у меня проблемы с file_get_contents, Я получаю следующую ошибку:

не удалось открыть поток: php_network_getaddresses: getaddrinfo не удалось: имя или служба неизвестны

Думаю, решением будет добавить больше файлов в chroot. Я действительно не хочу делать это для каждого разрабатываемого мной веб-сайта.

Вопрос

Так обстоит дело с chrooting даже в php-fpm, или я что-то делаю не так. Есть ли что-то, что я должен включить, чтобы все работало, или мне следует переместить все в каталог.

Да, вам понадобится базовая функциональная файловая система в каталоге chroot. И нет, вам не следует перемещать (или связывать) все - это полностью уничтожит всю цель chroot.

По сути, ресурсы, которые должны присутствовать в chroot, - это те ресурсы, к которым серверу потребуется доступ во время выполнения - любые динамически загружаемые библиотеки, каталоги журналов и вспомогательные структуры, необходимые для всего, что делает сервер.

В этом случае вам не хватает базовой конфигурации разрешения имен - /etc/resolv.conf, /etc/nsswitch.conf, и вещи, связанные с nss / dns / resolv из /lib было бы хорошим началом.

Копирование разрешающие библиотеки и / etc-файлы на самом деле не нужно, если вы можете бежать NSCD на вашем сервере.

Основная идея состоит в том, чтобы связать монтируемый сокет домена Unix nscd (обычно / var / run / nscd / socket) в chroot. (e) glibc попытается связаться с ним для разрешения имен пользователей, имен хостов и т. д. Только если nscd не запущен, (e) glibc прибегает к разрешению вещей самостоятельно.

Более подробную информацию об этом и других вещах, которые вам может потребоваться исправить при запуске PHP в chroot, можно найти в моем сообщении в блоге: