CentOS上PHP安全设置如何做

作者:袖梨 2026-06-28

CentOS上PHP安全设置步骤

1. 更新系统和PHP

确保系统和PHP为最新版本,修复已知安全漏洞:

CentOS上PHP安全设置怎么做

sudo yum update -ysudo yum install epel-release -ysudo yum install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-pear php-bcmath -y

2. 配置PHP-FPM(若使用)

编辑PHP-FPM主配置文件(通常为/etc/php-fpm.d/www.conf),调整以下参数:

  • 用户/组权限:避免使用root运行PHP进程,推荐使用apachenginx用户。
    user = apachegroup = apache
  • 禁用危险函数:禁止执行系统命令、文件操作等高风险函数。
    disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
  • 限制进程数量:防止资源耗尽攻击。
    pm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35
  • 请求超时设置:避免长时间运行的脚本占用资源。
    request_terminate_timeout = 60s

修改后重启PHP-FPM:

sudo systemctl restart php-fpm

3. 配置PHP.ini核心安全参数

编辑主配置文件/etc/php.ini,重点设置以下安全选项:

  • 错误报告:生产环境关闭详细错误显示,防止敏感信息泄露。
    display_errors = Offlog_errors = Onerror_log = /var/log/php_errors.log
  • 文件上传限制:限制上传文件大小,防止大文件攻击或恶意文件上传。
    file_uploads = Onupload_max_filesize = 10Mpost_max_size = 10M
  • 会话安全:增强会话ID的随机性和Cookie保护,防止会话劫持/CSRF。
    session.cookie_httponly = On# 禁止JavaScript访问会话Cookiesession.cookie_secure = On# 仅通过HTTPS传输Cookie(需开启HTTPS)session.cookie_samesite = Strict# 防止跨站请求伪造(CSRF)session.gc_maxlifetime = 1440 # 会话有效期(分钟)
  • 密码策略:强制使用强哈希算法(如bcrypt)存储密码。
    password_hash_default = bcrypt
  • 禁用危险特性:关闭远程文件包含、动态代码执行等高风险功能。
    allow_url_fopen = Offallow_url_include = Off
  • 启用OPcache:提升性能的同时减少代码暴露风险。
    opcache.enable = 1opcache.memory_consumption = 128opcache.interned_strings_buffer = 8opcache.max_accelerated_files = 4000opcache.revalidate_freq = 60opcache.fast_shutdown = 1

4. 配置Web服务器安全

根据使用的Web服务器(Apache/Nginx)调整配置:

Apache

编辑虚拟主机配置文件(如/etc/httpd/conf.d/your_site.conf),限制目录访问:

<Directory "/var/www/html">Options -Indexes +FollowSymLinks# 禁止目录列表AllowOverride AllRequire all granted</Directory>

重启Apache:

sudo systemctl restart httpd
Nginx

编辑虚拟主机配置文件(如/etc/nginx/conf.d/your_site.conf),防止恶意文件访问:

server {listen 80;server_name example.com;root /var/www/html;index index.php index.html;location / {try_files $uri $uri/ =404;}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;}location ~ /.ht {deny all;# 禁止访问.htaccess等隐藏文件}}

重启Nginx:

sudo systemctl restart nginx

5. 配置防火墙

使用firewalld限制对Web服务的访问,仅允许HTTP(80)和HTTPS(443)端口:

sudo firewall-cmd --permanent --zone=public --add-service=httpsudo firewall-cmd --permanent --zone=public --add-service=httpssudo firewall-cmd --reload

6. 使用安全模块增强防护

安装并配置ModSecurity(开源Web应用防火墙),防御SQL注入、XSS等常见攻击:

sudo yum install mod_security -ysudo systemctl enable mod_securitysudo systemctl start mod_security

7. 定期维护与监控

  • 备份数据:定期备份网站文件和数据库(如使用rsyncmysqldump)。
  • 监控日志:定期检查/var/log/php_errors.log和Web服务器日志,发现异常行为。
  • 更新策略:订阅PHP安全公告,及时升级到最新稳定版本。
  • 文件权限:确保PHP文件权限合理(如755目录、644文件),避免敏感文件(如config.php)被篡改:
    sudo chmod -R 755 /var/www/htmlsudo chown -R apache:apache /var/www/html# 根据实际用户调整

通过以上步骤,可显著提升CentOS上PHP应用的安全性,防范常见攻击(如SQL注入、XSS、文件上传漏洞等)。需根据实际业务场景调整参数(如上传文件大小、会话有效期),并在测试环境验证配置有效性。

相关文章

精彩推荐