首页 > 编程语言 >如何在Ubuntu中配置PHP安全

如何在Ubuntu中配置PHP安全

来源:互联网 2026-06-15 08:20:12

在Ubuntu上配置PHP安全需保持系统与PHP更新,修改php.ini关闭错误显示、禁用危险函数、限制文件上传、设置目录访问范围、强化会话Cookie、隐藏版本信息并配置OPcache,加固Apache或Nginx服务器,严格文件权限,安装Fail2Ban与ModSecurity,强制HTTPS,并定期维护监控。

Ubuntu上跑PHP,安全配置得做扎实,这件事比想象中更重要。服务器是拿来做生产环境的,不是拿来练手的,所以下面这几步,值得走一遍。

如何在Ubuntu中配置PHP安全

长期稳定更新的攒劲资源: >>>点此立即查看<<<

1. 版本先行,更新打底

安全的基础,是保持系统和PHP始终处于最新状态。已知漏洞的修复补丁,都藏在版本更新里。没什么好纠结的,直接运行命令:

sudo apt update && sudo apt upgrade -y

2. 核心参数,动一动php.ini

2.1 错误报告,关掉大屏,记入日志

生产环境里把详细的错误信息直接显示在页面上,等于把自家房子的钥匙挂在门外。敏感信息泄露就这么来的。正确的做法是:禁止显示错误,改成写入日志文件。

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

2.2 危险函数,能禁则禁

有些PHP函数,比如evalexecsystemshell_exec这些,一旦被利用,攻击者可以直接拿下服务器的控制权。虽然不是所有场景都需要禁用,但绝大多数Web应用用不上它们。封掉,更安心。

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

2.3 文件上传,勒紧缰绳

允许上传文件是一回事,允许上传多大的文件是另一回事。做严格的限制,防止恶意的大文件攻击。

file_uploads = On
upload_max_filesize = 2M  # 单文件上限2MB
post_max_size = 8M        # POST数据上限8MB

2.4 目录访问,画个圈

open_basedir这个参数可以限制PHP脚本能访问的目录范围。设置好了,就算某个脚本出了问题,攻击者也没法直接跑到系统其他地方去捣乱。

open_basedir = /var/www/html:/tmp

2.5 会话安全,锁死Cookie

会话劫持是个老话题,但依然常见。一样一样来:让Ja vaScript访问不到会话Cookie、强制通过HTTPS传输、限制跨站请求携带Cookie、设置合理的会话过期时间。

session.cookie_httponly = On
session.cookie_secure = On
session.cookie_samesite = Strict
session.gc_maxlifetime = 1440  # 24分钟

2.6 版本信息,藏起来

为什么要把PHP版本号写在响应头里,告诉攻击者用什么版本的漏洞来攻击呢?关掉它。

expose_php = Off

2.7 性能与安全,兼顾OPcache

OPcache不仅能加速PHP运行,还能让源码在缓存里保留,一定程度上减少了源码直接被读取的风险。配置一个合理的参数。

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

3. Web服务器,配合着加固

3.1 如果你用的是Apache

关闭服务器信息泄露,同时装上ModSecurity——这是Apache上最著名的Web应用防火墙之一。

# 关掉版本信息
ServerTokens Prod
ServerSignature Off

# 启用ModSecurity
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2

3.2 如果你用的是Nginx

确保PHP请求通过PHP-FPM处理,配置看起来是这样子的:

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

4. 文件与目录权限,严格一点

网站目录归www-data管,目录权限755,文件权限644,没什么好说的。

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

5. 安全模块,装上就是多一层保险

5.1 Fail2Ban

暴力破解是常见的攻击手段,Fail2Ban能自动识别并封禁那些疯狂尝试的IP。

sudo apt install fail2ban
sudo systemctl enable --now fail2ban

5.2 ModSecurity(针对Apache)

装完ModSecurity后,记得把规则引擎从"仅检测"切换到"开启"状态。

sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/modsecurity/modsecurity.conf
sudo systemctl restart apache2

6. HTTPS,没有商量的余地

Let's Encrypt提供免费的SSL证书,别等了,强制HTTPS是整个配置里的必修课。

sudo apt install certbot python3-certbot-apache   # 如果你用Nginx,改为python3-certbot-nginx
sudo certbot --apache -d yourdomain.com           # 把yourdomain.com换成你自己的域名
sudo certbot renew --dry-run                      # 测试一下自动续期

7. 维护与监控,不是一次性工作

安全配置从来不是做完就算的。每周跑一遍系统更新;盯着tail -f /var/log/php_errors.log看有没有异常;定期用PHPSA之类的工具扫一遍代码,检查依赖包是否存在已知漏洞。

composer global require php-security/phpsa
phpsa check /path/to/your/code

把上面这些流程走一遍,Ubuntu环境下的PHP安全性会提升一个层次。当然,具体配置还得根据你的业务场景微调,比如上传文件大小、会话有效期这些。安全这件事,没有终点,但起点至少得站得稳。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。