- Автор темы
- Администратор
- Модер.
- Команда форума
- #1
1. Установка пакета
Сначала проверьте версию PHP:php -v
Для FreeBSD чаще используются php82, php83 или php84.
Установка через pkg
sudo pkg install php83-snuffleupagus
Если используете другую версию PHP:
php82-snuffleupagus
php84-snuffleupagus
Пакет установит:
/usr/local/lib/php/20230831/snuffleupagus.so
(путь зависит от PHP API version)
2. Подключение модуля в PHP
Создайте файл:
/usr/local/etc/php/ext-20-snuffleupagus.ini
Содержимое:
extension=snuffleupagus.so
sp.configuration_file=/usr/local/etc/php/snuffleupagus.rules
Проверить загрузку модуля:
php -m | grep snuffleupagus
3. Создание файла правил
Создайте:
/usr/local/etc/php/snuffleupagus.rules
Минимальный безопасный базовый набор:
# уровень логирования
sp.global.log_level("info");
# запрет опасных функций
sp.disable_function.function("system").drop();
sp.disable_function.function("exec").drop();
sp.disable_function.function("shell_exec").drop();
sp.disable_function.function("passthru").drop();
sp.disable_function.function("proc_open").drop();
# защита от небезопасной десериализации
sp.disable_function.function("unserialize").drop();
# защита cookie
sp.cookie.name("PHPSESSID").secure().httponly();
# защита от weak random
sp.disable_function.function("mt_rand").drop();
4. Перезапуск PHP
Если используется PHP-FPM:
service php_fpm restart
Если Apache:
service apache24 restart
Если nginx + php-fpm:
service php_fpm restart
service nginx restart
5. Проверка работы
php -i | grep snuffleupagus
Должно быть:
snuffleupagus support => enabled
Также можно проверить загрузку правил:
tail -f /var/log/php-fpm.log
6. Рекомендуемые настройки для FreeBSD production
Дополнительно в php.ini:
expose_php = Off
display_errors = Off
allow_url_include = Off
session.cookie_httponly = On
session.cookie_secure = On
7. Проверка через тестовый скрипт
Создайте файл:
<?php
system("id");
?>
Если правило работает — Snuffleupagus заблокирует выполнение.
