CentOS PHP日志安全防护措施
chmod 640 /var/log/php_errors.log。apache、nginx或php-fpm),避免使用root用户。例如:chown apache:apache /var/log/php_errors.log。var_log_t),允许PHP进程写入。可通过以下命令设置:semanage fcontext -a -t var_log_t "/var/log/php(/.*)?",然后执行restorecon -Rv /var/log/php。php.ini中设置:display_errors = Off,log_errors = On。/var/log/php/),而非Web根目录。例如:error_log = /var/log/php/php_errors.log。notice级别)。例如:error_reporting = E_ERROR | E_WARNING | E_PARSE(仅记录错误和致命警告)。logrotate自动管理日志文件的大小和数量,防止日志过大占用磁盘空间。创建/etc/logrotate.d/php配置文件,示例内容:/var/log/php/php_errors.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
该配置每日轮换日志,保留7天压缩日志,创建新日志时权限设为640。php.ini中设置max_log_size(如max_log_size = 10M),当日志达到指定大小时自动创建新文件,避免单个文件过大。chmod和chown确保只有授权用户(如root、adm组)能访问日志文件。例如:chmod 640 /var/log/php_errors.log,chown root:adm /var/log/php_errors.log。auditd工具监控日志文件的访问和修改行为,记录相关事件(如/var/log/php_errors.log的读写操作)。配置/etc/audit/auditd.conf,添加规则:-w /var/log/php_errors.log -p wa -k php_log_audit(监控写入和属性变更)。filter_var函数)和过滤(如htmlspecialchars输出编码),防止XSS、SQL注入等攻击导致日志被篡改或注入恶意内容。set_error_handler实现自定义错误处理,避免敏感信息(如数据库凭证、路径)泄露给用户。例如:function custom_error_handler($errno, $errstr, $errfile, $errline) {
error_log("[$errno] $errstr in $errfile on line $errline");
echo "An error occurred. Please try again later.";
return true;
}
set_error_handler("custom_error_handler");
grep、awk等工具分析日志,查找异常行为(如频繁的404错误、SQL注入尝试)。例如:grep "SQL syntax" /var/log/php_errors.log。