Настоятельно рекомендую настраивать параметр open_basedir, в котором перечисляются директории за пределы которых нельзя будет выйти php скриптам, так как по умолчанию open_basedir не указан.
Если на веб сервере не указан open_basedir, то при наличии уязвимостей Path Traversal например, можно получить доступ ко всем файлам на сервере на которые есть права чтения «read by others», то есть к директории /etc/, /var/ и другим.
Посмотрим указан ли open_basedir:
php -i | grep open_basedir
open_basedir => no value => no value
<?php
var_dump(ini_get('open_basedir'));
?>
Я посмотрел текущую директорию для сессий:
php -i | grep session.save_path
session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
Теперь откроем конфигурацию php-fpm и укажем нужные директории:
nano /etc/php/8.3/fpm/pool.d/www.conf
php_admin_value[open_basedir] = /var/www/:/var/lib/php/sessions:/tmp
Перезапустим php-fpm чтобы применить изменения:
systemctl restart nginx
systemctl restart php8.3-fpm
То есть я привел пример стандартного /var/www/ с веб файлами и директории для хранения сессий, если php скрипты обращаются еще к каким-то директориям, то об этом можно увидеть ошибки в логах веб сервера, потом их также указать в open_basedir.
Если используется Apache2, то можно указать через .htaccess:
php_value open_basedir "/var/www/:/var/lib/php/sessions:/tmp:/ixnfo/com"
Также есть еще более безопасный способ настроить chroot, или поместить веб сервер в docker и показывать через прокси nginx, а еще можно настроить open_basedir для каждого сайта по отдельности, чтобы уязвимость на одном сайте не позволила получить доступ к другим сайтам.
Смотрите также мою статью:
Настройка mTLS
