php配置中centos安全设置有哪些
小樊
40
2025-11-27 17:38:01
CentOS 下 PHP 安全配置要点
一 系统与网络基础加固
- 保持系统与软件包为最新,及时修补漏洞:执行 sudo yum update。
- 仅开放必要端口,使用 firewalld 放行 80/443:
sudo yum install -y firewalld
sudo systemctl start firewalld && sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
- 全站启用 HTTPS(安装 mod_ssl 并配置证书),避免明文传输敏感数据。
- 启用并配置 SELinux 为 enforcing,减少权限滥用风险。
二 PHP 运行时核心配置 php.ini
- 关闭错误显示、开启日志记录:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log(确保目录与文件可写且仅管理员可读)
- 隐藏版本信息:expose_php = Off。
- 禁用危险函数(按应用需要精简):
disable_functions = exec,system,passthru,shell_exec,proc_open,popen,eval,assert,symlink,link,escapeshellarg,escapeshellcmd
- 限制远程包含与协议访问:allow_url_fopen = Off,allow_url_include = Off。
- 目录访问隔离:open_basedir = /var/www/html:/tmp(路径按实际站点调整)。
- 文件上传控制(仅在确需上传时开启):file_uploads = On,upload_max_filesize = 2M,post_max_size = 8M(post 略大于 upload)。
- 会话安全:session.cookie_httponly = 1,session.cookie_secure = 1(启用 HTTPS 时),session.use_strict_mode = 1,合理设置 session.gc_maxlifetime。
- 其他历史风险项:register_globals 已在 PHP 5.4 移除;magic_quotes_gpc/runtime/sybase 已废弃,现代应用应使用参数化查询与输入过滤替代。
三 PHP-FPM 与进程权限
- 运行身份降权:在 /etc/php-fpm.d/www.conf 中设置非 root 用户与组,例如:user = apache,group = apache(与 Web 服务器运行用户保持一致)。
- 按虚拟主机或目录细化 open_basedir、上传目录权限与进程池隔离,减少单点被突破后的横向影响。
四 可选增强与注意事项
- 使用 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。
- Web 应用防火墙:部署 ModSecurity 并结合规则集过滤常见攻击向量。
- 历史机制提示:PHP 的 safe_mode 自 5.4 起已移除,不应依赖,改用最小权限、open_basedir、禁用危险函数等现代手段。
- 扩展安装提示:php-mcrypt 在新版本 PHP 中可能已移除,按实际仓库与版本选择替代方案或弃用相关功能。
五 变更生效与验证
- 修改 php.ini 或 www.conf 后,重启服务:
- Apache:sudo systemctl restart httpd
- PHP-FPM:sudo systemctl restart php-fpm
- 验证要点:
- 访问不存在的资源不应显示 PHP 错误堆栈;
- 响应头不应出现 X-Powered-By: PHP/x.y.z;
- 远程包含与危险函数调用被阻断;
- 仅 80/443 对外开放,站点可通过 HTTPS 正常访问。