通过PHP配置增强Linux安全性的关键措施
通过php.ini文件移除未使用的扩展(如mysqli、pdo_mysql、curl等,若应用无需对应功能),减少攻击面。例如,若应用仅需本地文件操作,可注释掉extension=curl.so等网络相关扩展。修改后重启PHP服务(如sudo systemctl restart php-fpm)使配置生效。
php.ini中调整upload_max_filesize(单个文件最大大小,如10M)和post_max_size(POST数据总大小,需大于upload_max_filesize,如12M),防止大文件上传导致拒绝服务攻击。.jpg、.png)和MIME类型(如image/jpeg),避免恶意文件(如.php后门)上传至服务器。/var/www/html/uploads)权限设为755,所有者为Web服务器用户(如www-data),并禁止执行权限(chmod -R 755 uploads)。open_basedir限制脚本访问范围在php.ini中设置open_basedir参数,将PHP脚本限制在指定目录(如/var/www/html),防止脚本访问系统敏感文件(如/etc/passwd)。示例如下:
open_basedir = "/var/www/html:/tmp"
多目录用冒号分隔,需包含应用目录和临时目录(如/tmp)。
php.ini中设置disable_functions,禁用可执行系统命令、文件操作的函数(如system、exec、passthru、shell_exec、file_put_contents)。示例如下:disable_functions = system,exec,passthru,shell_exec,file_put_contents
display_errors = Off,避免将错误堆栈信息泄露给攻击者;开启日志记录(log_errors = On),将错误信息写入安全目录(如/var/log/php_errors.log),便于后续排查。php.ini中配置以下参数,防止会话劫持和CSRF攻击:session.cookie_secure = 1 # 仅通过HTTPS传输会话Cookie
session.cookie_httponly = 1 # 禁止JavaScript访问会话Cookie
session.cookie_samesite = Strict # 防止跨站请求伪造(CSRF)
session_regenerate_id(true)(如用户登录成功后),更换会话ID,防止会话固定攻击。在php.ini中设置allow_url_fopen = Off和allow_url_include = Off,禁止PHP通过URL访问远程文件(如include 'http://example.com/config.php';),防止远程代码执行攻击。
sudo apt install php-suhosin
安装后自动启用,可通过php.ini调整配置(如 suhosin.session.encrypt = On加密会话数据)。sudo yum install mod_security
sudo systemctl enable mod_security
sudo systemctl start mod_security
需根据应用场景调整规则集(如OWASP Core Rule Set)。定期通过包管理器更新PHP(如Ubuntu使用sudo apt update && sudo apt upgrade php,CentOS使用sudo yum update php),获取最新的安全补丁,修复已知漏洞(如PHP 8.1.x修复的远程代码执行漏洞)。
/var/www/html)所有者设为Web服务器用户(如www-data),权限设为755(目录)和644(文件),避免其他用户修改文件。示例如下:sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
/var/www/html/config.php)、.env文件权限设为600,防止未授权读取。ufw(Ubuntu)或firewalld(CentOS)限制对Web服务器端口(80、443)的访问,仅允许必要IP地址(如运维人员IP)。示例如下(Ubuntu):sudo ufw allow from 192.168.1.100 to any port 80,443
sudo ufw enable
sudo certbot --nginx -d yourdomain.com)。