php在centos上如何进行安全配置
导读:CentOS 上 PHP 安全配置实操清单 一 系统与基础防护 保持系统与软件包为最新,及时修补漏洞:执行命令:sudo yum update -y。 仅开放必要端口,启用并配置 firewalld: 启动与开机自启:sudo syst...
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/config 将 SELINUX=enforcing。
- 部署 Fail2Ban 监控与封禁暴力登录:安装后配置对 SSH 等服务的监控与自动封禁策略。
二 PHP 运行时安全配置
- 编辑 php.ini(或 /etc/php.d/*.ini)进行以下关键设置:
- 关闭错误显示、开启错误日志:display_errors = Off、log_errors = On、error_log = /var/log/php_errors.log
- 限制远程包含与代码执行:allow_url_fopen = Off、allow_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 = On、session.cookie_secure = On、session.cookie_samesite = Strict
- 文件上传限制(按业务调整):file_uploads = On、upload_max_filesize = 10M、post_max_size = 10M
- 路径隔离(按站点根目录调整):open_basedir = /var/www/html:/tmp
- 资源与执行控制:max_execution_time = 30、max_input_time = 30、memory_limit = 128M
- 启用 OPcache(生产建议开启,开发环境可关闭):opcache.enable=1、opcache.memory_consumption=128、opcache.interned_strings_buffer=8、opcache.max_accelerated_files=4000、opcache.revalidate_freq=60、opcache.fast_shutdown=1
- 注意:如仍在使用 PHP 5.x/7.2 等旧版本,可能包含已废弃或不安全的指令(例如 safe_mode),应优先升级版本而非依赖该指令。
三 PHP-FPM 与进程隔离
- 编辑 /etc/php-fpm.d/www.conf:
- 以非特权用户运行:user = apache、group = apache
- 使用 Unix Socket 并收紧权限:listen = /run/php-fpm/www.sock,设置 listen.owner = apache、listen.group = apache、listen.mode = 0660
- 进程与超时(按负载调整):pm.max_children = 50、pm.start_servers = 5、pm.min_spare_servers = 5、pm.max_spare_servers = 35、request_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; } }
- 仅通过 FastCGI 解析 PHP,避免直接访问:
- 建议:启用 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 上下文。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: php在centos上如何进行安全配置
本文地址: https://pptw.com/jishu/767589.html
