如何在CentOS上配置PHP安全设置
在CentOS上配置PHP安全需从系统基础加固、PHP核心配置、Web服务器防护、扩展与监控等多维度入手,以下是具体步骤:
1. 更新系统与PHP至最新版本
保持系统和PHP最新是防范已知漏洞的关键。执行以下命令更新所有软件包:
sudo yum update -y
sudo yum install epel-release -y # 启用EPEL仓库(可选,用于安装额外PHP扩展)
安装或更新PHP及相关扩展(如MySQL、GD、MBString等):
sudo yum install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath -y
2. 配置PHP-FPM安全参数
若使用PHP-FPM(常见于Nginx/Apache反向隧道场景),需修改其池配置文件(通常为/etc/php-fpm.d/www.conf),关键设置如下:
- 限制运行用户:避免使用root用户,改用
apache或nginx等非特权用户:user = apache group = apache - 限制进程数量:根据服务器资源调整
pm.max_children(如50),防止资源耗尽攻击:pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 - 禁用危险函数:禁止执行系统命令、文件操作等高危函数:
disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source - 限制文件扩展名:仅允许解析PHP相关文件,防止恶意脚本执行:
security.limit_extensions = .php .php3 .php4 .php5 .phtml
修改后重启PHP-FPM:
sudo systemctl restart php-fpm
3. 调整PHP.ini核心安全选项
编辑主配置文件/etc/php.ini,强化以下关键参数:
- 关闭错误显示:防止敏感信息(如数据库凭据、路径)泄露给用户,仅记录日志:
display_errors = Off log_errors = On error_log = /var/log/php_errors.log # 确保目录可写 - 限制文件上传:约束上传文件大小(如2M),防止大文件攻击或恶意文件上传:
file_uploads = On upload_max_filesize = 2M post_max_size = 8M - 强化会话安全:通过Cookie属性防止会话劫持:
session.cookie_httponly = On # 禁止JavaScript访问Cookie session.cookie_secure = On # 仅通过HTTPS传输Cookie(需启用HTTPS) session.cookie_samesite = Strict # 限制跨站请求携带Cookie session.gc_maxlifetime = 1440 # 会话有效期(分钟) - 禁用危险特性:关闭远程文件包含、本地文件包含等风险功能:
allow_url_fopen = Off allow_url_include = Off - 使用强密码哈希:推荐使用bcrypt算法存储密码:
password_hash_default = bcrypt
4. 配置Web服务器安全
根据使用的Web服务器(Apache/Nginx),调整配置以减少攻击面:
Apache配置
编辑虚拟主机或全局配置文件(如/etc/httpd/conf/httpd.conf或/etc/httpd/conf.d/php.conf),添加以下指令:
- 禁用目录列表:防止未配置索引文件时暴露目录结构:
"/var/www/html" > Options -Indexes +FollowSymLinks AllowOverride All Require all granted - 限制.htaccess覆盖:防止恶意修改.htaccess文件:
"/var/www/html" > AllowOverride None # 仅在必要时开启(如需要URL重写)
Nginx配置
编辑虚拟主机配置文件(如/etc/nginx/conf.d/default.conf),添加以下指令:
- 限制PHP文件访问:禁止访问隐藏文件(如
.htaccess):location ~ /\.ht { deny all; } - 传递正确脚本路径:确保PHP文件由PHP-FPM处理:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php-fpm/www.sock; # 根据实际路径调整 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
5. 配置防火墙限制访问
使用firewalld仅开放必要的HTTP(80)和HTTPS(443)端口,阻止非法IP访问:
sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
6. 启用HTTPS加密传输
通过SSL/TLS加密网站流量,防止数据在传输过程中被窃取或篡改。使用mod_ssl模块(Apache)或Nginx原生支持配置HTTPS:
- 安装mod_ssl(Apache):
sudo yum install mod_ssl openssl -y - 生成自签名证书(测试用,生产环境需使用CA颁发的证书):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt - 配置Apache虚拟主机(编辑
/etc/httpd/conf.d/ssl.conf)::443 > ServerName yourdomain.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key - 重启Web服务器:
sudo systemctl restart httpd # Apache # 或 sudo systemctl restart nginx # Nginx
7. 安装Web应用防火墙(WAF)
使用ModSecurity(开源WAF)拦截SQL注入、XSS、CSRF等常见攻击:
sudo yum install mod_security -y
sudo systemctl enable mod_security
sudo systemctl start mod_security
默认规则集可通过OWASP ModSecurity Core Rule Set (CRS)增强,需额外下载并配置。
8. 定期备份与监控
- 备份网站数据与数据库:使用
rsync或mysqldump定期备份,存储到异地或云存储:rsync -avz --delete /var/www/html/ /backup/website_backup/ mysqldump -u root -p your_database | gzip > /backup/db_backup.sql.gz - 监控日志与异常:使用
fail2ban防止暴力破解,定期检查PHP错误日志(/var/log/php_errors.log)和Web服务器日志:sudo yum install fail2ban -y sudo systemctl enable fail2ban sudo systemctl start fail2ban
通过以上步骤,可显著提升CentOS上PHP应用的安全性。需定期更新系统和配置,应对新的安全威胁。
以上就是关于“如何在CentOS上配置PHP的安全设置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm