在 Ubuntu 上“安全配置 PHP”通常包含系统层、PHP 本身、Web 服务、应用层四个方面。下面给你一套实战向、可落地的安全配置指南(以 Ubuntu 20.04/22.04 + PHP 8.x 为例)。
sudo apt update
sudo apt install php-fpm php-cli
✅ 推荐:
php-fpm(比 mod_php 更安全)只装需要的扩展:
php -m
删除不必要模块(如 php-imap、php-tidy 等):
sudo apt remove php-imap
配置文件位置:
/etc/php/8.x/fpm/php.ini
/etc/php/8.x/cli/php.ini
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec
若应用需要(如 Composer),CLI 可单独放开
allow_url_include = Off
allow_url_fopen = Off # 如不需要远程文件
expose_php = Off
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M
display_errors = Off
log_errors = On
error_log = /var/log/php/php-error.log
; /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
listen.mode = 0660
php_admin_value[open_basedir] = /var/www/html:/tmp
location ~ /\.php$ {
deny all;
}
location ~* \.(env|git|sql)$ {
deny all;
}
location /uploads/ {
location ~ \.php$ {
deny all;
}
}
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
✅ 原则:
Ubuntu 默认启用 AppArmor:
sudo aa-status
suhosin(旧)snuffleupagus(现代推荐)sudo apt update && sudo apt upgrade
sudo apt install certbot python3-certbot-nginx
✅ expose_php = Off
✅ disable_functions 已限制
✅ open_basedir 已配置
✅ 上传目录不可执行
✅ 错误不暴露给用户
✅ PHP 版本受支持
如果你愿意,我可以:
你用的是哪种 Web 环境?