温馨提示×

php在centos上如何进行安全配置

小樊
34
2025-12-09 12:18:31
栏目: 编程语言

CentOS 上 PHP 安全配置实操清单

一 系统与基础防护

  • 保持系统与软件包为最新,及时修补漏洞:执行命令:sudo yum update -y
  • 仅开放必要端口,启用并配置 firewalld
    • 启动与开机自启:sudo systemctl start firewalld && sudo systemctl enable firewalld
    • 放行 HTTP/HTTPS:sudo firewall-cmd --permanent --zone=public --add-service=http && sudo firewall-cmd --permanent --zone=public --add-service=https && sudo firewall-cmd --reload
  • 启用 SELinux 强制模式并持久化:sudo setenforce 1,编辑 /etc/selinux/configSELINUX=enforcing
  • 部署 Fail2Ban 监控与封禁暴力登录:安装后配置对 SSH 等服务的监控与自动封禁策略。

二 PHP 运行时安全配置

  • 编辑 php.ini(或 /etc/php.d/*.ini)进行以下关键设置:
    • 关闭错误显示、开启错误日志:display_errors = Offlog_errors = Onerror_log = /var/log/php_errors.log
    • 限制远程包含与代码执行:allow_url_fopen = Offallow_url_include = Off
    • 禁用危险函数(按应用需求精简):disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,pcntl_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,phpinfo
    • 会话安全:session.cookie_httponly = Onsession.cookie_secure = Onsession.cookie_samesite = Strict
    • 文件上传限制(按业务调整):file_uploads = Onupload_max_filesize = 10Mpost_max_size = 10M
    • 路径隔离(按站点根目录调整):open_basedir = /var/www/html:/tmp
    • 资源与执行控制:max_execution_time = 30max_input_time = 30memory_limit = 128M
    • 启用 OPcache(生产建议开启,开发环境可关闭):opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1
  • 注意:如仍在使用 PHP 5.x/7.2 等旧版本,可能包含已废弃或不安全的指令(例如 safe_mode),应优先升级版本而非依赖该指令。

三 PHP-FPM 与进程隔离

  • 编辑 /etc/php-fpm.d/www.conf
    • 以非特权用户运行:user = apachegroup = apache
    • 使用 Unix Socket 并收紧权限:listen = /run/php-fpm/www.sock,设置 listen.owner = apachelisten.group = apachelisten.mode = 0660
    • 进程与超时(按负载调整):pm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35request_terminate_timeout = 60s
  • 重启生效:sudo systemctl restart php-fpm
  • 说明:Unix Socket 相比 TCP 9000 端口可减少暴露面并提升本地通信性能。

四 Web 服务器与网络层加固

  • Apache 示例(/etc/httpd/conf.d/vhost.conf):
    • 目录与执行控制:
      <Directory "/var/www/html">
          Options -Indexes +FollowSymLinks
          AllowOverride None
          Require all granted
          php_admin_flag engine on
      </Directory>
      
    • 启用 HTTPS/SSL:安装 mod_ssl,在 /etc/httpd/conf.d/ssl.conf 配置证书与密钥路径,重启 httpd
  • Nginx 示例(/etc/nginx/conf.d/default.conf):
    • 仅通过 FastCGI 解析 PHP,避免直接访问:
      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 fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              fastcgi_pass unix:/run/php-fpm/www.sock;
          }
      
          location ~ /\.ht {
              deny all;
          }
      }
      
  • 建议:启用 HSTS、仅允许 TLS 1.2+、配置强加密套件,并使用 Let’s Encrypt 等免费证书自动续期。

五 数据库、备份与持续运维

  • 数据库安全:为应用创建最小权限的数据库用户,仅允许 localhost 访问;示例(MySQL/MariaDB):
    CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPassword!';
    GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app'@'localhost';
    FLUSH PRIVILEGES;
    
  • 备份策略:定期备份代码与数据库,保留多份与异地副本;示例:
    mkdir -p /backup
    rsync -avz --delete /var/www/html/ /backup/website_$(date +%F)/
    mysqldump -u[db_user] -p[db_pass] [db_name] | gzip > /backup/db_$(date +%F).sql.gz
    
  • 持续运维:保持系统与 PHP 更新、定期审计日志(如 /var/log/php_errors.log/var/log/audit/audit.log)、按需调整 PHP-FPM 进程与超时、为关键目录设置最小权限与正确的 SELinux 上下文。

0