在护网攻防演练与Web安全运维工作中,Linux系统日志是异常行为监测、入侵溯源的关键手段,Apache、Nginx、Tomcat等Web中间件作为业务通信核心组件,一旦出现配置疏漏极易被攻击者利用实施漏洞入侵、恶意请求攻击。
- 本文结合系统日志运维机制,围绕三类主流Web中间件及PHP程序开展不安全配置隐患排查,梳理配置漏洞成因与针对性安全加固方案,可作为护网巡检、日常安全基线核查、Web入侵应急处置的技术参考依据。
文章目录
文章介绍
在护网行动、日常安全基线巡检与蓝队应急响应场景中,Windows、Linux服务器及Nginx、Apache、Tomcat等Web中间件是攻防对抗的核心防护对象。系统日志作为入侵行为溯源、异常事件分析的关键依据,能够完整留存主机操作、程序访问与网络交互记录;主机不合理的账号权限、远程访问策略、敏感文件配置,以及中间件、PHP的不规范部署配置,极易被攻击者利用,成为漏洞入侵、权限提升、内网横向渗透的突破口。
本文围绕系统日志审计、Windows与Linux主机安全核查、主流Web中间件不安全配置排查三大方向,梳理各类常见安全风险并给出标准化加固措施,可作为安全运维巡检、攻防应急处置的实操参考文档。
大家也可以先看看之前的文章:
- HVV应急溯源基础------Linux 系统安全加固配置指南(一)
- 如果想了解具体的应急溯源专栏:等保应急响应(靶场)
Linux系统日志安全配置
系统日志简介
Linux日志主要分为系统日志、用户日志、程序日志 三类。不同发行版的日志存储路径存在差异,CentOS、Ubuntu系统默认将各类日志统一存放于/var/log目录下。其中通过RPM方式部署的系统服务产生的日志虽同样保存在该目录,但并不受rsyslogd服务管控,由对应服务自身的日志机制独立完成记录。

Linux系统的默认日志及其功能如下:
-
wtmp日志文件:主要记录所有用户的登录、注销行为,同时留存系统开机、关机相关事件,可通过对应命令查询历史用户登录审计记录。 -
btmp日志文件:专门记录远程登录失败行为,会详细留存SSH远程登录时的访问IP、访问用户名、通信协议、登录失败时间等关键信息,常用于暴力破解溯源排查。 -
cron日志文件: 用于记录定时计划任务的运行事件,包含定时任务的起止执行时间、运行周期、执行账号权限等内容,可用来排查恶意定时后门类攻击行为。 -
secure/auth认证日志:该日志会完整记录SSH登录成功、失败的时间、操作用户名、用户UID等认证详情,是账号暴力破解、异常登录溯源的核心审计日志。- 在
RedHat、CentOS系列系统中,认证日志默认路径为/var/log/secure; - 在
Ubuntu、Debian系列系统则存放于/var/log/auth.log;
- 在
上述日志对应的命令:
bash
last -f /var/log/wtmp
last -f /var/log/btmp
cat /var/log/cron
cat /var/log/secure
系统日志备份
日志作为记录系统各类关键事件的核心文件,若长期放任日志不断累积,会占用大量磁盘空间,严重时造成服务器磁盘占满、系统宕机。日常日志维护主要包含旧日志清理、新日志备份两项工作。
Linux系统内置logrotate工具实现日志轮替,能够自动分割日志、生成全新日志文件记录后续事件,对超出保留期限的历史日志进行删除,避免日志无限膨胀。
- 工具的全局配置文件为
logrotate.conf,依托cron定时任务周期性触发执行。 logrotate.conf和logrotate.d都存储着logrotate的配置文件- logrotate.d目录里的所有文件被包含到logrotate.conf文件中执行。
(1)日志名称设置
通过修改logrotate.conf配置文件相关参数,可以对日志轮询存储方式进行修改和配置。默认情况下,logrotate切割的日志是按递增的数字进行命名的,如xxx.log-1 。在配置文件中增加dateext参数,可以使切割后的日志文件以当前日期为结尾:
bash
beta@beta:~$ ls
boot.log btmp cron-20220424 maillog messages-20220417 secure-20220424
boot.log-20220207 btmp-20220501 cron-20220501 maillog-20220417 messages-20220424 secure-20220501
boot.log-20220208 chrony cron-20220508 maillog-20220424 messages-20220501 secure-20220508
boot.log-20220210 cloud-init.log dmesg maillog-20220501 messages-20220508 supervisord.log
boot.log-20220222 cron dmesg.old maillog-20220508 secure tuned
(2)定时日志清理
随着日志文件的不断增多,如果不定时清理,系统硬盘就会存满。通过修改日志轮询次数,可以达到周期清理日志的效果,即在logrotate.conf配置文件中修改rotate参数:
bash
# see "man logrotate" for details
# rotate log files weekly
weekly
# use the adm group by default, since this is the owning group
# of /var/log/syslog.
su root adm
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.
作用: 该logrotate全局配置实现日志每周轮转,采用root用户adm组权限执行,仅保留4份 带日期后缀的历史日志,轮转后自动生成新空白日志文件,同时加载/etc/logrotate.d目录下的子配置,默认未开启日志压缩。
(3)本地日志备份
《中华人民共和国网络安全法》 明确规定,网络系统日志的留存时间应不少于6个月。为了后续日志审计的需要,系统管理者需要定期对Linux系统的日志进行有效备份。根据备份日志的存储位置不同,可以分为本地日志备份和异地日志备份。
本地日志备份 就是将Linux系统的日志存储在系统的本地,通过cron定时任务的方式,实现日志的周期备份。如下所示为执行本地日志备份操作的bash脚本文件,存放在/var/backup目录下,命名为backup.sh,以90天为周期存储系统日志,保存的备份日志以"backup_+日期"方式进行命名,并将生成的日志存储在/var/backup目录下。
bash
#!/bin/bash
# 预留日志的份数
number=90
# 保存日志的路径
backup_dir=/var/backup/
# 每天进行更新日志备份
dd=`date -d "yesterday" +%Y-%m-%d`
# 源文件日志路径
bean_dir=/var/log
cp -r $bean_dir/ $backup_dir/backup-$dd
# 写创建备份日志
echo "create $backup_dir/backup_log-$dd.log" >> $backup_dir/log.txt
# 找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.log | awk '{print $9}' | head -1`
# 判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.log | awk '{print $9}' | wc -l`
if [ $count -gt $number ]
then
# 删除最早生成的备份,只保留number数量的备份
rm $delfile
# 写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
一句话解释 :该脚本将/var/log下的系统日志按昨日日期备份至/var/backup目录,仅保留90份本地备份,超出数量则自动删除最早的备份文件,并记录每次备份与删除操作日志。
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
59 19 * * * root cd /var/backup && ./backup.sh >/dev/null 2>&1
一句话解释 :在系统级定时任务文件中配置root用户每日19时59分执行日志备份脚本,同时屏蔽脚本标准输出与错误输出,可通过cron.log校验任务执行状态。
总结
本文梳理了Linux系统主流日志文件的用途与存放路径,明确了各类日志在暴力破解、恶意定时任务、异常登录等安全事件中的溯源使用方式,可直接用于护网阶段的入侵行为排查。
通过logrotate实现日志自动轮转避免磁盘占满,再结合Shell脚本与Cron定时任务做本地周期备份,既解决了日志存储溢出问题,也满足法规要求的日志留存时长,为后续安全审计、攻击溯源留存完整的原始数据。