CentOS上PHP安全设置怎么做
CentOS上PHP安全配置从系统更新、PHP-FPM调优、php.ini核心项、Web防护、防火墙、安全模块、定期维护七方面着手,禁用危险函数、限制上传、开启OPcache为基础措施。
CentOS上PHP安全设置步骤
先说几个核心判断:在CentOS上部署PHP应用,安全配置不是锦上添花,而是地基工程。很多攻击——SQL注入、XSS、文件上传漏洞——其实都源于几个基础参数没调对。下面这些步骤,是经验沉淀下来的“最小必要配置”,覆盖了从系统更新到日常监控的完整链路。
1. 更新系统和PHP
一句老话:漏洞永远出在旧版本上。先把系统和PHP升级到最新,这是成本最低的高效防御。

sudo yum update -y
sudo yum install epel-release -y
sudo 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进程,这是底线。推荐用apache或nginx用户,即便被入侵也翻不了天。user = apache group = apache - 禁用危险函数:像
eval、system、exec、shell_exec这些,能关就关。它们就像给攻击者递了一把万能钥匙。disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source - 限制进程数量:防资源耗尽攻击。比如
pm.max_children设50,再配合pm.start_servers等参数,让进程数可预测。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。
3. 配置PHP.ini核心安全参数
主配置文件/etc/php.ini里的选项,每个都可能成为攻击面。以下这六类参数是必须过一遍的:
- 错误报告:生产环境把
display_errors关了,否则路径、数据库结构等敏感信息等于直接公之于众。错误日志留着,写到/var/log/php_errors.log。display_errors = Off log_errors = On error_log = /var/log/php_errors.log - 文件上传限制:限制上传大小是一个简单但有效的防护。10M通常够用,具体根据业务调。
file_uploads = On upload_max_filesize = 10M post_max_size = 10M - 会话安全:防止会话劫持和CSRF攻击,这几个Cookie相关参数建议统统打开。注意
session.cookie_secure需要HTTPS才能生效。session.cookie_httponly = On session.cookie_secure = On session.cookie_samesite = Strict session.gc_maxlifetime = 1440 - 密码策略:直接用bcrypt哈希,不要再用MD5或者SHA1了。
password_hash_default = bcrypt - 禁用危险特性:远程文件包含和动态代码执行,这两项一旦开启,攻击者几乎可以任意读写服务器。关掉没商量。
allow_url_fopen = Off allow_url_include = Off - 启用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
4. 配置Web服务器安全
根据你用的Apache或Nginx,分别处理。这里只列最关键的防护配置:
Apache
编辑虚拟主机配置(如/etc/httpd/conf.d/your_site.conf),加上目录限制:
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
然后重启:sudo systemctl restart httpd
Nginx
编辑配置(如/etc/nginx/conf.d/your_site.conf),重点是禁止访问.ht等隐藏文件:
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;
}
}
重启:sudo systemctl restart nginx
5. 配置防火墙
用firewalld只开放80和443端口,其他端口一律封掉。一条命令搞定:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
6. 使用安全模块增强防护
ModSecurity是开源WAF里的“老将”,能拦截SQL注入、XSS、文件包含等常见攻击。安装后直接启用:
sudo yum install mod_security -y
sudo systemctl enable mod_security
sudo systemctl start mod_security
7. 定期维护与监控
- 备份数据:用
rsync或mysqldump定期备份,灾难恢复时才知道它多重要。 - 监控日志:每天扫一眼
/var/log/php_errors.log和Web服务器日志,异常行为往往藏在异常请求里。 - 更新策略:订阅PHP安全公告,有补丁就第一时间打——拖延一天就多一天风险。
- 文件权限:目录755、文件644是通用原则,敏感文件(如
config.php)权限要更严格。同时确保文件所有者不是root:sudo chmod -R 755 /var/www/html sudo chown -R apache:apache /var/www/html
以上七步走完,CentOS上的PHP应用安全基线就基本拉平了。当然,具体参数需要根据业务场景微调——比如上传文件大小、会话有效期——但方向不会错。建议先在测试环境验证一遍,再应用到生产。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















