温馨提示×

Debian PHP安全如何设

小樊
56
2026-09-14 07:06:14
栏目: 编程语言

在 Debian 上加强 PHP 安全配置,可以从系统层面、PHP 本身、Web 服务器、运维习惯几个维度来做。下面是一套实用、可落地的建议(以 Debian + PHP-FPM 为例)。


一、系统与软件层面

1. 使用官方/稳定源,及时更新

sudo apt update
sudo apt upgrade
  • 只使用 Debian 官方源
  • 不要随意加第三方 PHP 源(除非必要)
  • 开启自动安全更新(可选):
sudo apt install unattended-upgrades

2. 最小安装原则

只安装需要的 PHP 模块:

apt install php-fpm php-cli

避免安装不必要的扩展,如:

  • php-imap
  • php-tidy
  • 旧版本 PHP(如 PHP 5/7.0)

二、PHP 安全配置(php.ini)

常见位置:

/etc/php/8.x/fpm/php.ini
/etc/php/8.x/cli/php.ini

1. 关闭危险功能

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval

如业务确实需要,可酌情开放

2. 关闭危险特性

expose_php = Off
allow_url_include = Off
allow_url_fopen = Off   # 如不需要远程文件

3. 错误信息不暴露

display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log

4. 文件上传安全

file_uploads = On
upload_max_filesize = 8M
post_max_size = 10M
max_file_uploads = 20

5. 会话安全

session.cookie_secure = On     # HTTPS
session.cookie_httponly = On
session.cookie_samesite = Lax
session.use_strict_mode = On

三、PHP-FPM 安全

1. 使用独立用户

user = www-data
group = www-data

不同站点可用不同 pool:

/etc/php/8.x/fpm/pool.d/site1.conf

2. 限制权限

listen = /run/php/php8.x-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

3. 资源限制(防DoS)

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.max_spare_servers = 10

四、Web 服务器(Nginx / Apache)

Nginx 示例

  • 禁止访问敏感文件
location ~* \.(env|ini|log|sql|bak)$ {
    deny all;
}
  • 禁止执行 PHP 在上传目录
location /uploads/ {
    location ~ \.php$ {
        deny all;
    }
}

五、文件与目录权限

推荐权限

chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

写目录单独处理

如 storage/, uploads/

chmod 750 uploads

六、HTTPS 与头部安全

  • 强制 HTTPS
  • 添加安全头(Nginx/Apache):
Content-Security-Policy
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer

七、日志与监控

  • PHP 错误日志
  • Web 服务器访问/错误日志
  • 使用 fail2ban 防止暴力破解
apt install fail2ban

八、常用安全检查命令

php -v
php -m
grep -R "disable_functions" /etc/php/

九、总结(最小安全清单)

✅ 更新系统
✅ 关闭 expose_php
✅ disable_functions
✅ 不显示错误
✅ HTTPS + 安全头
✅ 正确文件权限
✅ 日志监控


如果你愿意,可以告诉我:

  • Debian 版本(11 / 12)
  • PHP 版本(7.4 / 8.1 / 8.2)
  • Web 服务(Nginx / Apache)
  • 用途(网站 / API / 内网系统)

我可以给你一份可直接用的 php.ini + Nginx 配置模板。

0 踩