商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > PHP在Ubuntu上的安全配置方法

PHP在Ubuntu上的安全配置方法

  发布于2026-07-19 阅读(0)

扫一扫,手机访问

在Ubuntu上部署PHP应用,安全配置从来不是锦上添花的选项,而是底线。很多开发者在功能开发上投入了大量精力,却在系统加固上草草了事,结果就是给攻击者留了后门。下面从系统基础、PHP参数、Web服务、代码安全到日志监控,梳理一套经得起检验的配置方法。

一 系统与基础加固

首先,系统与PHP版本必须保持最新。这是最基础也最容易被忽视的一步——执行 sudo apt update && sudo apt upgrade -y 就能堵住大多数已知漏洞。同时,只启用必要的PHP扩展,把不需要的模块统统关掉,攻击面自然就小了。防火墙方面,sudo ufw allow 'Apache Full'sudo ufw allow 'Nginx Full',然后 sudo ufw enable,只开放80和443端口就够了。HTTPS是强制项,用Certbot一键搞定:sudo apt install certbot python3-certbot-apache(或对应Nginx插件),再执行 certbot --apache -d yourdomain.com。入侵防护装上fail2ban:sudo apt install fail2ban。AppArmor默认已启用,检查一下 sudo aa-status,并根据需要编辑 /etc/apparmor.d/usr.sbin.php-fpm 后reload。目录权限要严格:sudo chown -R www-data:www-data /var/www/html,目录设为755,文件644,像config.php这样的敏感配置建议直接设为600。

二 php.ini 关键安全参数

PHP配置文件里的参数,每一项都直接关系到安全。首先把版本信息藏起来:expose_php = Off,错误信息不要显示给用户:display_errors = Off,但日志要开:log_errors = On,并指定日志路径 error_log = /var/log/php_errors.log。远程文件包含和远程文件执行是经典攻击入口,直接关掉:allow_url_fopen = Offallow_url_include = Off。高危函数列表要仔细斟酌,业务用不到的一律禁用:disable_functions = eval,exec,system,passthru,shell_exec,proc_open,pcntl_exec,escapeshellcmd,base64_decode。上传限制根据业务来,但别太大:upload_max_filesize = 2Mpost_max_size = 8Mfile_uploads = On。会话cookie设置成httponly和secure:session.cookie_httponly = Onsession.cookie_secure = Onsession.gc_maxlifetime = 1440。执行时间控制在30秒以内:max_execution_time = 30max_input_time = 30memory_limit = 128M。如果场景可控,还可以用 open_basedir = /var/www/html:/tmp 限制文件访问范围,但要注意某些依赖可能受影响。

三 Web服务器与PHP-FPM配置

Apache

对于Apache,隐藏版本信息是第一步:sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-a vailable/security.conf。然后禁用不需要的模块,比如 autoindexxmlrpca2dismod autoindex xmlrpc。安全模块按需开启:a2enmod security2。HTTPS和WAF部分,同样用Certbot并启用mod_security。

Nginx + PHP-FPM

Nginx搭配PHP-FPM时,务必让PHP-FPM只通过Unix socket通信,绝不能监听公网。在 /etc/php/{version}/fpm/pool.d/www.conf 中设置 listen = /run/php/php{version}-fpm.sock,并确保listen.owner/listen.group与Web服务用户一致。配置PHP处理时,典型写法如下:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php{version}-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

敏感文件必须禁止访问,比如WordPress的xmlrpc:location = /xmlrpc.php { deny all; },以及所有.ht文件:location ~ /\.ht { deny all; }

PHP-FPM进程与资源限制

在同一个 www.conf 文件中,确保运行身份是 user = www-datagroup = www-data。并发处理能力要合理配置:pm.max_children = 50,每个进程处理完500个请求后自动回收:pm.max_requests = 500,防止内存泄漏积累。

四 代码与数据安全措施

安全配置只是基础,代码层面的防护同样关键。输入校验和输出编码是防XSS的底线——所有用户输入都要过滤,输出时用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。SQL注入必须靠预处理语句杜绝,PDO或MySQLi的参数绑定手法是标配,永远不要拼接SQL。密码存储用 password_hash($pwd, PASSWORD_DEFAULT) 哈希,验证时用 password_verify()。会话安全方面,启动时设置:session_start(['cookie_httponly' => true, 'cookie_secure' => true, 'cookie_samesite' => 'Strict']);,并在敏感操作后 session_regenerate_id(true);。依赖管理用Composer,定期执行 composer installcomposer audit 检查已知漏洞。

五 日志监控与审计

配置再完善,没有监控也是白搭。实时查看PHP错误日志:tail -f /var/log/php_errors.log,以及PHP-FPM日志:tail -f /var/log/php{version}-fpm.log,Web服务的访问日志和错误日志同样要盯住。文件完整性监控推荐用auditd:sudo apt install auditd,然后设置规则 sudo auditctl -w /var/www/html -p wa -k php_files,定期用 ausearch -k php_files | aureport -f -i 查看改动。日常巡检时,重点关注异常状态码(大量404、500)、可疑User-Agent、POST请求指向可执行脚本、上传目录出现可执行文件等情况。这些迹象往往就是攻击的前兆。

本文转载于:https://www.yisu.com/ask/93691497.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注