1. 系统及软件包更新
保持Linux系统(如CentOS、Ubuntu)及PHP相关软件包(PHP核心、扩展、Web服务器)为最新版本,及时安装安全补丁,修复已知漏洞。常用命令:sudo yum update(CentOS)或sudo apt update && sudo apt upgrade(Ubuntu)。
2. Web服务器安全配置
.htaccess文件限制敏感目录(如上传目录、静态资源目录)的PHP执行权限,禁止目录浏览。示例配置:<Directory "/var/www/html/uploads">
php_flag engine off
Options -Indexes
</Directory>
server或location块中限制特定目录执行PHP脚本,避免恶意代码执行。示例配置:location ~* /(uploads|images|files)/.*\.php$ {
deny all;
}
同时启用open_basedir限制PHP脚本访问范围(如open_basedir=/var/www/html:/tmp),防止跨目录文件访问。3. PHP配置文件(php.ini)强化
php.ini中设置disable_functions,禁用system、exec、passthru、shell_exec、phpinfo等可执行系统命令或泄露敏感信息的函数,降低代码执行风险。display_errors = Off,避免将错误堆栈信息直接输出到网页(可能泄露服务器路径、数据库结构等敏感信息);开启错误日志记录(log_errors = On,error_log = /var/log/php_errors.log),便于后续排查问题。upload_max_filesize(如10M)、post_max_size(如10M),限制上传文件大小;将上传目录设置为不可执行PHP(如Nginx中添加deny all规则),防止上传恶意脚本。register_globals = Off,避免表单提交的数据自动注册为全局变量(可能导致SQL注入、变量覆盖等漏洞),强制使用$_POST、$_GET等超全局变量获取输入。expose_php = Off,防止HTTP响应头中泄露PHP版本信息(减少针对性攻击)。4. 文件和目录权限管理
.php)设置为644(Owner可读写,Group和其他用户仅可读),目录设置为755(Owner可读写执行,Group和其他用户可读执行);上传目录、缓存目录等特殊目录设置为775(允许Web服务器用户写入),但需避免设置为777(完全开放权限)。/var/www/html)的所有者设置为Web服务器运行用户(如www-data、nginx),避免使用root用户运行Web服务。示例命令:sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo find /var/www/html -type d -exec chmod 755 {} \;
chattr命令给关键配置文件(如php.ini、/etc/php.d/*)和网站目录添加写入保护(chattr +i),防止攻击者通过chmod等函数修改权限。5. PHP-FPM安全配置(适用于Nginx/Apache+PHP-FPM架构)
修改PHP-FPM池配置文件(如/etc/php/7.x/fpm/pool.d/www.conf),设置:
listen = 127.0.0.1:9000:仅允许本地监听,避免远程访问;listen.owner = www-data、listen.group = www-data:设置监听套接字的所属用户和组,匹配Web服务器用户;user = www-data、group = www-data:以非root用户运行PHP-FPM进程,降低权限提升风险。6. 使用SELinux或AppArmor加强系统隔离
sudo setsebool -P httpd_can_network_connect 1),同时通过semanage命令管理端口和文件上下文,限制PHP进程的权限。/etc/apparmor.d/usr.sbin.php-fpm),限制其对系统资源的访问(如禁止访问/etc/shadow等敏感文件),增强进程隔离。7. 危险函数与扩展管理
php.ini中的disable_extensions禁用未使用的扩展(如mysqli、pdo_mysql若无需MySQL支持),减少攻击面。eval()函数使用、加密Cookie等),增强PHP脚本的安全性。8. 日志监控与木马排查
/var/log/php_errors.log)、Web服务器访问日志(如Nginx的/var/log/nginx/access.log),监控异常请求(如大量POST请求、访问phpinfo()页面的记录),及时发现潜在攻击。find命令查找近期修改的可疑PHP文件(如30天内修改的.php文件),或搜索常见后门特征(如eval(、assert(、base64_decode(),清理恶意代码。示例命令:find /var/www/html -type f -name "*.php" -mtime -30 -exec grep -l "eval(" {} \;
find /var/www/html -type f -name "*.php" -mtime -30 -exec grep -l "assert(" {} \;
```。