温馨提示×

ubuntu php配置怎样安全

小樊
43
2026-09-01 11:51:28
栏目: 编程语言

在 Ubuntu 上配置 PHP 时,安全性是非常重要的一环。下面从系统层面、PHP 本身、Web 服务器、运维习惯几个角度,给你一套比较实用且安全的配置建议(以 Ubuntu + Nginx/Apache + PHP-FPM 常见环境为例)。


一、系统与安装层面

1. 使用官方或稳定源

sudo apt update
sudo apt install php-fpm php-cli
  • 不要用不明 PPA
  • 优先使用 Ubuntu 官方仓库中的 PHP 版本

2. 以非 root 用户运行

  • PHP-FPM 默认使用 www-data
  • 确保网站目录不属于 www-data 可写根目录
sudo chown -R deploy:deploy /var/www/html
sudo chmod 755 /var/www/html

二、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. 关闭错误信息暴露

display_errors = Off
log_errors = On
error_log = /var/log/php/php-error.log

3. 限制文件访问

open_basedir = /var/www/html:/tmp

4. 上传安全

file_uploads = On
upload_max_filesize = 8M
post_max_size = 10M
upload_tmp_dir = /tmp

5. 会话安全

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

6. 关闭危险特性

allow_url_include = Off
expose_php = Off

三、PHP-FPM 安全配置

1. 使用独立 pool

/etc/php/8.x/fpm/pool.d/www.conf
user = www-data
group = www-data
listen = /run/php/php8.x-fpm.sock
listen.owner = www-data
listen.group = www-data

2. 限制资源

pm = dynamic
pm.max_children = 50
pm.max_requests = 500

3. 防止跨站

php_admin_value[open_basedir] = /var/www/html:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec

四、Web 服务器安全(Nginx 示例)

1. 禁止执行上传目录 PHP

location ~* /uploads/.*\.php$ {
    deny all;
}

2. 隐藏版本

server_tokens off;

3. 限制请求方法

if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
}

五、文件与权限安全

推荐权限

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

禁止 .git / 配置暴露

location ~ /\.git {
    deny all;
}

六、日志与监控

sudo tail -f /var/log/php/php-error.log
sudo tail -f /var/log/nginx/access.log

建议:

  • 定期更新 PHP
  • 使用 fail2ban
  • 开启防火墙(UFW)
sudo ufw allow 22,80,443/tcp
sudo ufw enable

七、进阶建议

  • 使用 AppArmor / SELinux
  • 使用 PHP 8.x(不再用 7.4 以下)
  • 使用 Composer 安全扫描
  • 容器化部署(Docker + 最小权限)

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

  • Ubuntu 版本
  • PHP 版本
  • Nginx 还是 Apache
  • 是否生产环境

我可以给你一份可直接用的安全配置模板

0