在 Debian 上做好 PHP 安全设置,通常从 系统层面 + PHP 配置 + Web 服务器 + 应用层 四个方面入手。下面给你一套实战向的安全配置指南(适用于 Debian 10/11/12,PHP 7.4 / 8.x)。
apt update
apt install php php-fpm
不要一次性全装,按需安装:
apt install php-mysql php-curl php-xml php-mbstring php-zip
查看已安装模块:
php -m
比 mod_php 更安全、性能更好。
systemctl status php8.2-fpm
确认运行用户:
ps aux | grep php-fpm
默认:
www-data/etc/php/8.2/fpm/pool.d/www.conf配置文件位置:
/etc/php/8.2/fpm/php.ini
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
open_basedir = /var/www/html:/tmp
防止 PHP 访问系统敏感目录
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,dl,show_source
根据业务可适度放宽
file_uploads = Off
如需上传:
file_uploads = On
upload_max_filesize = 2M
post_max_size = 2M
allow_url_fopen = Off
allow_url_include = Off
expose_php = Off
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
session.use_only_cookies = 1
编辑池配置:
/etc/php/8.2/fpm/pool.d/www.conf
user = www-data
group = www-data
高级方案(多站点):
user = site1
group = site1
listen.owner = www-data
listen.group = www-data
listen = /run/php/php8.2-fpm.sock
listen.mode = 0660
⚠️ 不要直接暴露 FPM 到公网端口
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
# 禁止执行上传目录中的 PHP
location ~* /uploads/.*\.php$ {
deny all;
}
}
<Directory /var/www/html>
Options -ExecCGI -Indexes
AllowOverride None
</Directory>
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
禁止 PHP 写核心文件
chmod 444 config.php
chmod 755 uploads
Nginx/Apache 层再次限制执行。
touch /var/log/php_errors.log
chown www-data:www-data /var/log/php_errors.log
tail -f /var/log/php_errors.log
htmlspecialchars()apt update && apt upgrade
PHP 版本生命周期:
sury.org 源(谨慎)| 项目 | 状态 |
|---|---|
| PHP 错误不显示 | ✅ |
| 危险函数禁用 | ✅ |
| open_basedir 限制 | ✅ |
| FPM 运行非 root | ✅ |
| 上传目录不可执行 | ✅ |
| HTTPS + Secure Cookie | ✅ |
如果你愿意,我可以:
只要告诉我你的 Web 架构 即可。