总述

本文讲述了 Linux 的常见日志:
	系统日志、中间件日志、框架日志、行为日志 等相关日志的 存储位置 以及 清除。

0. Linux 总阐述

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。本文简介一下Linux系统日志及日志分析技巧。

日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。
日志默认存放位置:
	/var/log/

查看日志配置情况:
	# 主配置文件见单独查看
	/etc/rsyslog.conf
	
	# 先查看 子配置目录 - 查询到都有哪些 子配置文件。
	/etc/rsyslog.d/
		# 再查看具体的 子配置文件。
		/etc/rsyslog.d/50-default.conf

1)/var/log/ 目录情况展示

Pasted image 20250829094432.png

2)日志配置信息查询

查看日志配置情况:
	# 主配置文件见单独查看
	/etc/rsyslog.conf
	
	# 先查看 子配置目录 - 查询到都有哪些 子配置文件。
	/etc/rsyslog.d/
		# 再查看具体的 子配置文件。
		/etc/rsyslog.d/50-default.conf
发行版系列主配置文件子配置目录关键子配置文件(日志路由规则)说明
Ubuntu/Debian/etc/rsyslog.conf/etc/rsyslog.d//etc/rsyslog.d/50-default.conf你提到的 “三个文件” 完全对应,50-default.conf 是 Ubuntu 预设规则
CentOS 7/RHEL 7/etc/rsyslog.conf/etc/rsyslog.d/无 50-default.conf,核心规则直接写在主配置文件中,或子目录下的 60-syslog.conf 等规则格式与 Ubuntu 类似,但文件命名和存放位置不同
openSUSE Leap(传统模式)/etc/rsyslog.conf/etc/rsyslog.d//etc/rsyslog.d/50-default.conf 或 90-default.conf部分版本沿用类似 Ubuntu 的命名,但内容可能有调整

此处以 Ubuntu 进行举例。

配置类型路径作用说明
主配置文件/etc/rsyslog.conf核心配置入口,定义全局规则(如日志格式、模块加载、默认存储路径)
子配置目录/etc/rsyslog.d/存放自定义 / 应用级配置文件(如 50-default.conf、服务专属配置),自动加载
关键子配置文件/etc/rsyslog.d/50-default.confUbuntu 预设的日志路由规则,定义不同类型日志的存储位置(如 /var/log/auth.log

1. 主配置文件

more /etc/rsyslog.conf

Pasted image 20250829095133.png

2. 子配置文件

1、查看 子配置文件目录
ll /etc/rsyslog.d/

Pasted image 20250829095310.png

2、查看 具体子配置文件

不仅记录了 每种系统日志文件 存储的路径,还是在这里配置 日志是否开启(注释)。

more /etc/rsyslog.d/20-ufw.conf

more /etc/rsyslog.d/50-default.conf

more /etc/rsyslog.d/postfix.conf

Pasted image 20250829095538.png

3)日志消息级别

级别数值日志级别名称(英文)中文名称核心描述典型场景示例
0EMERG紧急系统级严重故障,导致主机完全不可用,需立即介入处理,属于最高优先级日志。系统内核崩溃、根文件系统损坏、关键硬件(如 CPU、内存)故障导致系统无法启动。
1ALERT警告存在严重问题,必须立即采取措施修复,否则会直接影响系统核心功能。系统关键服务(如 sshdrsyslog)意外停止、管理员账户密码文件(/etc/shadow)权限异常。
2CRIT严重系统或服务出现严重错误,部分核心功能受影响,但未完全导致系统不可用。数据库服务(如 MySQL)连接池耗尽、系统磁盘空间占满(/ 分区 100% 使用率)、网络核心服务(如 network)故障。
3ERR错误程序或服务运行中出现错误,特定功能执行失败,但不影响服务整体运行。Web 服务器(如 Nginx)处理某条请求时抛出 500 错误、定时任务(cron)某一次执行脚本失败、用户登录时密码错误(多次失败后触发)。
4WARNING提醒存在潜在风险或异常情况,当前未影响系统功能,但不处理可能导致后续问题。系统内存使用率超过阈值(如 90%)、磁盘分区剩余空间不足(如 /home 分区仅剩 10%)、服务配置文件存在非致命性语法警告。
5NOTICE注意正常运行中的重要状态变更,无风险但需记录以便追溯,优先级低于警告。管理员成功登录系统、关键服务(如 Nginx)正常启动 / 重启、系统时间同步(ntp)完成。
6INFO信息系统或服务的常规运行日志,记录正常操作流程,无异常或风险。用户正常登录 / 注销、服务(如 ssh)接收新连接、系统定时任务(cron)正常执行脚本、文件系统挂载成功。
7DEBUG调试程序开发或问题排查时的详细调试信息,包含变量、流程等细节,默认不启用。应用程序(如自定义服务)运行中的函数调用日志、数据库查询语句执行详情、网络请求的数据包交互信息。

4) 日志文件* (!!!)

1. 比较重要的日志

历史命令记录:history
仅清理当前用户:history -c

# 先执行这条,彻底删除掉这个文件,再用下面的清空命令,因为第二条命令的情况其实本质上还是可以复原的。
rm -rf .bash_history

# 清空 历史记录。
history -c

	除了 .bash_history 之外,还有 .zsh_history 等等... 具体需要看是用的是么 bash 终端来进行删除。
日志类型日志文件路径核心记录内容专用查询工具 / 命令工具使用说明(示例)
登录失败记录/var/log/btmp所有登录尝试失败的信息(如密码错误、账户不存在、账户锁定导致的登录失败)lastb- 直接查看所有失败记录:lastb
- 查看指定用户的失败记录:lastb 用户名
- 限制显示条数:lastb -n 10(显示最近 10 条)
所有用户最后一次登录记录/var/log/lastlog系统中每个用户的最后一次登录时间、登录 IP(远程登录时)、登录终端等信息lastlog- 查看所有用户最后登录信息:lastlog
- 查看指定用户最后登录:lastlog -u 用户名(如 lastlog -u root
登录成功记录(含系统事件)/var/log/wtmp所有用户登录成功、注销的记录,以及系统启动、重启、关机的事件last- 查看所有登录成功记录:last
- 查看指定用户登录记录:last 用户名
- 查看系统重启记录:last -x(显示 runlevel 变化)
登录授权详细日志/var/log/secure登录相关的验证与授权信息(如 SSH 登录过程、su 切换用户、sudo 授权、用户密码修改等)cat/tail/grep(文本查看工具)- 实时监控登录日志:tail -f /var/log/secure
- 筛选 SSH 登录记录:grep "sshd" /var/log/secure
- 查找失败登录原因:grep "Failed password" /var/log/secure
当前已登录用户信息/var/run/utmp实时记录当前在线的用户(随用户登录 / 注销动态更新,仅保留 “当前活跃” 用户数据)w/who/users- 查看当前用户及操作:w(显示用户名、终端、登录时间、运行命令)
- 简洁显示当前用户:who(显示用户名、终端、登录时间、IP)
- 仅列出当前用户名:users
补充说明
  1. 二进制文件特性
    /var/log/btmp/var/log/lastlog/var/run/utmp 均为 二进制文件,无法用 cat/vi 直接查看,必须通过对应专用工具(如 lastblastlogw)解析,否则会显示乱码;
  2. 发行版差异
    Debian/Ubuntu 系列中,类似 /var/log/secure 的登录授权日志路径为 /var/log/auth.log,查询方式一致(如 grep "sshd" /var/log/auth.log);
  3. 日志持久化
    /var/run/utmp 通常位于内存临时目录(/var/run 多为 tmpfs),系统重启后数据会清空;其他日志文件(如 /var/log/secure/var/log/wtmp)存储在磁盘,会被 logrotate 工具按配置轮转(切割、压缩、清理旧日志)。

Pasted image 20250829100834.png

Pasted image 20250829100913.png

Pasted image 20250829101102.png

2. 其他系统自带 - 必存在日志

日志文件路径核心功能说明关键特点 / 查看方式
/var/log/cron记录 cron 定时任务的执行信息(如任务启动、执行结果、失败原因)仅关联定时任务,可直接用 cat/tail 查看(如 tail -f /var/log/cron 实时监控)
/var/log/secure记录系统验证与授权相关操作,涵盖账号密码交互场景(SSH 登录、su 切换、sudo 授权、用户增删 / 密码修改)安全审计核心日志,需重点监控(如异常 SSH 登录失败会在此记录),直接查看文本内容
/var/log/wtmp永久记录所有用户登录 / 注销信息及系统启动、重启、关机事件二进制文件,不可直接查看,需用 last 命令(如 last -f /var/log/wtmp
/var/run/utmp记录当前已登录用户信息,随用户登录 / 注销实时更新,仅保留 “在线” 状态数据二进制文件,不可直接查看,需用 w/who/users 命令查询当前登录用户
/var/log/btmp记录所有失败登录尝试(如密码错误、账户不存在导致的登录失败)二进制文件,不可直接查看,需用 lastb 或 last -f /var/log/btmp 查看
/var/log/cups记录打印机相关操作日志(打印任务提交、打印成功 / 失败、打印机状态变更)目录级日志(含多个子文件),直接查看对应文件(如 cat /var/log/cups/access_log
/var/log/faillog记录用户登录失败详情(含失败时间、用户名、失败原因)及错误登录命令部分系统为二进制文件,可通过 faillog 命令查看(如 faillog -u 用户名 查指定用户)
/var/log/messages记录系统核心重要信息,涵盖多数系统事件(mail、cron、daemon、kern、auth 等)系统故障排查首选日志(如服务异常、硬件问题),直接查看文本内容
/var/log/dmesg记录内核缓冲信息(系统启动时内核自检、硬件初始化、驱动加载等信息)可直接查看文本内容,也可用 dmesg 命令实时查看内核最新输出
/var/log/auth.log记录系统授权信息(用户登录、权限验证、特权操作),功能类似 /var/log/secure主要在 Debian/Ubuntu 系列中存在,RHEL/CentOS 系列以 /var/log/secure 为主
/var/log/boot.log记录系统启动过程日志(服务启动顺序、启动成功 / 失败、初始化脚本执行结果)可直接查看,用于排查系统启动异常(如某服务启动失败会在此记录)
/var/log/daemon.log记录系统后台守护进程的运行日志(如 rsyslogcrond 等守护进程的状态、错误)仅聚焦守护进程,直接查看文本内容,辅助排查服务后台运行问题
/var/log/dpkg.log记录 dpkg 命令操作日志(安装、卸载、更新软件包的过程与结果)Debian/Ubuntu 系列专属(基于 dpkg 包管理),直接查看文本内容
/var/log/kern.log记录内核产生的日志(内核模块加载、硬件驱动问题、内核错误信息)定制内核或排查硬件驱动问题时重点查看,直接查看文本内容
/var/log/lastlog记录系统中所有用户最后一次登录时间及登录 IP(若远程登录)二进制文件,不可直接查看,需用 lastlog 命令查看(默认显示所有用户)
/var/log/user.log记录所有等级用户的操作日志(普通用户与管理员的日常操作、命令执行反馈)聚焦用户层事件,直接查看文本内容,辅助追溯用户操作轨迹
/var/log/alternatives.log记录系统 update-alternatives 命令操作日志(如切换默认编辑器、Java 版本等 “替代方案” 配置)仅关联替代方案更新,直接查看文本内容,用于确认默认程序配置变更
/var/log/anaconda.log记录 Linux 系统安装过程的所有信息(分区配置、软件包选择、安装进度、错误提示)仅在通过 Anaconda 安装的系统中存在(如 RHEL/CentOS),直接查看文本内容
/var/log/yum.log记录 yum 包管理操作日志(安装、更新、卸载软件包的过程、版本、依赖信息)RHEL/CentOS 系列专属(基于 yum 包管理),直接查看文本内容
/var/log/maillog记录电子邮件服务器运行日志(如 sendmail/postfix 的邮件发送 / 接收、队列状态、错误信息)RHEL/CentOS 系列中命名为此,直接查看文本内容,用于排查邮件服务问题
/var/log/mail.log功能与 /var/log/maillog 一致,记录电子邮件服务器日志Debian/Ubuntu 系列中命名为此,直接查看文本内容

3. 特殊服务 - 服务日志

除了上述 Log 文件以外, /var/log 还基于系统的具体应用包含以下一些子目录:

日志目录路径所属服务 / 功能领域核心包含内容关键特点 / 查看场景
/var/log/httpd/Apache HTTP 服务器存放 Apache 服务的访问日志与错误日志:
access_log:记录所有 HTTP 请求(客户端 IP、请求时间、请求 URL、响应状态码等);
error_log:记录 Apache 运行错误(配置错误、模块加载失败、请求处理异常等)
仅在安装 Apache 服务器的系统中存在,RHEL/CentOS 系列默认路径,用于排查网站访问异常、服务器运行故障
/var/log/apache2/Apache HTTP 服务器内容与 /var/log/httpd/ 完全一致(含 access.logerror.log,部分版本命名带 .log 后缀)Debian/Ubuntu 系列专属路径(因软件包命名差异),功能与 /var/log/httpd/ 无区别,需注意路径适配
/var/log/lighttpd/Lighttpd HTTP 服务器存放 Lighttpd(轻量级 Web 服务器)的日志文件:
access.log:记录 HTTP 请求详情;
error.log:记录服务器运行错误、配置问题等
仅在使用 Lighttpd 作为 Web 服务器的系统中存在,轻量场景(如嵌入式、低资源服务器)常用,用于排查 Lighttpd 相关问题
/var/log/mail/邮件服务(如 Postfix、Sendmail)存放邮件服务的细分日志(主日志通常在 /var/log/maillog/mail.log,此目录为额外补充):
- 如 mail.info(邮件服务普通信息)、mail.err(邮件发送 / 接收错误)、mail.warn(邮件服务警告)
部分系统(如 Debian/Ubuntu)会将邮件日志按级别拆分到此目录,辅助精细化排查邮件服务问题(如仅查看错误日志时定位 mail.err
/var/log/prelink/Prelink 工具(预链接优化)记录 prelink 工具对动态链接库(.so 文件)的预链接修改信息:
- 包含修改的文件路径、预链接时间、优化结果、异常错误(如文件损坏导致预链接失败)
prelink 用于优化程序启动速度,此目录日志仅在系统启用 prelink 功能时生成,主要用于排查程序启动时的动态链接问题
/var/log/audit/Linux Audit 审计服务存放 auditd(系统审计守护进程)的审计日志:
- 核心文件 audit.log,记录系统敏感操作(如文件权限变更、系统调用、特权命令执行、SELinux 相关事件)
安全审计核心目录,需管理员权限查看,用于追溯高风险操作(如是否有用户篡改 /etc/passwd)、排查 SELinux 阻止的操作
/var/log/samba/Samba 服务(Windows 文件共享)存放 Samba 服务的运行日志:
- 如 log.smbd(Samba 服务主日志,记录共享连接、文件读写操作)、log.nmbd(NetBIOS 服务日志,记录主机名解析、工作组交互)
仅在安装并启用 Samba 服务的系统中存在,用于排查 Windows 客户端访问 Linux 共享文件夹时的连接失败、权限问题
/var/log/sa/Sysstat 性能监控工具存放 sar(系统活动报告)工具生成的性能数据文件:
- 文件名格式为 saXX(XX 为日期,如 sa29 代表当月 29 日),记录 CPU、内存、磁盘 I/O、网络等性能指标
需安装 sysstat 软件包,日志为二进制格式,不可直接查看,需用 sar -f /var/log/sa/saXX 分析历史性能数据(如排查某时段 CPU 使用率过高问题)
/var/log/sssd/SSSD 服务(安全服务守护进程)存放 sssd(System Security Services Daemon)的运行日志:
- 记录身份认证(如 LDAP、Kerberos 认证)、用户信息缓存、权限同步等操作的结果与错误
常用于企业级环境(多服务器统一身份认证),此目录日志用于排查用户通过 SSSD 认证失败、用户信息无法同步等问题

5. 查看日志

概念

tty:终端设备的统称

tty一词源于 Teletypes,或者 teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用 tty 来简称各种类型的终端设备。

  • tty 1~6 是文本型控制台,tty7 是 X Window 图形显示管理器。在本地机器上可以通过Ctrl+Alt+F1(F1-F7键)切换到对应的登录控制台。
pty(虚拟终端)

但是假如我们远程 telnet 到主机或使用 xterm 时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)。

  • pts/ptmx(pts/ptmx 结合使用,进而实现 pty):
  • pts(pseudo-terminal slave) 是 pty 的实现方法,和 ptmx (pseudo-terminal master) 配合使用实现pty。

命令

w

w 显示目前登入系统的用户信息。

Pasted image 20250829101430.png


who

who 命令显示关于当前在本地系统上的所有用户的信息。

Pasted image 20250829101400.png


users

显示当前在线的用户。

Pasted image 20250829101504.png


last

last 命令列出目前与过去登入系统(登陆成功)的用户相关日志记录信息。

Pasted image 20250829101548.png


lastb

lastb 命令列出所有 登陆失败 的日志记录信息。

Pasted image 20250829101705.png


lastlog

lastlog 报告所有用户的最近登录情况,或者指定用户的最近登录情况

Pasted image 20250829101756.png

6)日志分析技巧*(!!!)

A. 常用的shell命令

工具主要功能说明典型使用场景示例
find在指定目录下搜索文件 / 目录,支持按名称、大小、权限、修改时间等条件筛选find /var/log -name "*.log"(查找 /var/log 下所有.log 文
grep在文本中搜索匹配指定模式(字符串或正则表达式)的行,支持基本正则匹配grep "Failed" /var/log/secure(在安全日志中查找含 "Failed"
awk文本处理编程语言,擅长按列处理结构化文本,支持条件判断、循环、函数等awk '{print 1, 3}' /etc/passwd(提取 passwd 文件第 1 列和第
sed流编辑器,用于对文本进行替换、删除、插入等操作,支持正则表达式sed's/old/new/g' file.txt(将 file.txt 中所有 old 替换为
egrep扩展版 grep,支持更多正则表达式元字符(如 +、?、 等),功 egrep "error failed" /var/log/messages(查找含 error 或 failed 的行) ed 的行)
grep 常用用法
1)grep 显示前后几行信息
#显示 file 文件里匹配 root 字串那行 以及 上下5行
grep -C 5 root file

#显示 file 文件里匹配 root 字串那行 以及 前5行
grep -B 5 root file

#显示 file 文件里匹配 root 字串那行 以及 后5行
grep -A 5 root file

注意:
	必须大写。
grep -C 5 1080 /etc/proxychains.conf

	# 不可以,因为我们之前提到了 /var/log/lastlog 是一个 二进制文件。
	grep -A 5 root /var/log/lastlog
2)grep 查找含有某字符串的所有文件
# 但不会扫描隐藏文件 和 隐藏目录!
grep -rni "hello,world!" *


*: 表示 当前目录 所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写

	# 这个才是包含隐藏目录、隐藏文件的。
	grep -rni "hello,world!" .
# 全盘搜索(包括根目录下的所有内容,含隐藏项)
grep -rn "qiaoshen" /



	grep -rn "qiaoshen" /*   —— ×
	
	/* 表示匹配根目录(/)下的所有直接子文件和子目录(不包括隐藏文件 / 目录)
	
	结合 -r 选项,会递归搜索这些顶级目录下的所有文件和子目录
	
	但它不会搜索根目录(/)本身直接包含的文件(如果有的话),也不会包含根目录下的隐藏目录(如 /.ssh)
3)grep 查找多个字符串同时满足的情况
grep -i -E 'useradd.*authlogtemp|authlogtemp.*useradd' /var/log/auth.log
grep -i -E 'userdel.*authlogtemp|authlogtemp.*userdel' /var/log/auth.log
grep -i -E 'passwd.*authlogtemp|authlogtemp.*passwd' /var/log/auth.log


-E: 开启正则。
-i: 不区分大小写。
中间的规则:
	同时包含 passwd 和 authlogtemp 字符串的值,且不分先后关系。
# 查询 grep "sudo" /var/log/auth.log 的匹配日志记录,然后再排除 包含有 root 的记录。
grep "sudo" /var/log/auth.log | grep -v "root"
cat、head、tail 高阶用法
1)显示一个文件的某几行
# 从第1000行开始,显示2000行。即显示 1000~2999 行
cat input_file | tail -n +1000 | head -n 2000
find
1)查找文件
# 在/etc目录中查找文件init
find /etc -name init
awk
1)显示 /etc/passwd 的指定信息
cat /etc/passwd | awk -F ':' '{print $1}'

awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域, $1表示第一个域, $n表示第n个域。
# 显示用户名
cat /etc/passwd | awk -F ':' '{print $1}'

# 显示登陆密码
cat /etc/passwd | awk -F ':' '{print $2}'

# 显示 UID
cat /etc/passwd | awk -F ':' '{print $3}'

# 显示 GID
cat /etc/passwd | awk -F ':' '{print $4}'

# 显示用户的 home
cat /etc/passwd | awk -F ':' '{print $6}'

# 显示用户的 bash 类型
cat /etc/passwd | awk -F ':' '{print $7}'
sed
1)删除历史操作记录,只保留前153行
sed -i '1519,$d' .bash_history

# history 和 .bash_history 并不完全等价,这个是操作 .bash_history 文件的,history 不会被执行,history 需要执行 history -c 才可以。
2)sed 进阶操作 - 清楚日志
# 删除 爆破 相关日志。
sudo sed -i '/Failed password/d' /var/log/auth.log

# 写法1:先匹配 Accepted,再匹配 114.253.76.78(顺序按日志实际格式)
sudo sed -i -E '/Accepted.*114.253.76.78/d' /var/log/auth.log

# 写法2:用括号+.*确保两个关键词都存在(顺序无关,更灵活)
sudo sed -i -E '/(Accepted.*114.253.76.78)|(114.253.76.78.*Accepted)/d' /var/log/auth.log

-E: 开启正则。
-i: 直接修改原文件(默认 sed 只输出处理结果,不改原文件)。
中间的规则:
	同时包含 passwd 和 authlogtemp 字符串的值,且不分先后关系。

B. secure / auth.log日志

删除大法:
	

记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。

CentOS:
	/var/log/secure

Ubuntu;
	/var/log/auth.log
我们清除 secure / auth.log 日志,使用的是 sed 命令。
	默认情况下,你的 sed 命令操作本身不会被自动记录到系统常规日志(如 /var/log/auth.log、/var/log/syslog)中



2. 哪些情况可能间接记录 sed 操作?
	只有当 sed 命令与「需要日志记录的行为」绑定后,才可能间接留下痕迹,常见场景包括:

1)通过 sudo 执行 sed:如果你的 sed 命令带了 sudo(如 sudo sed ...),sudo 会将此次操作记录到 /var/log/auth.log(或 sudo 自定义日志文件,如 /var/log/sudo.log),格式类似:
	log Aug 29 10:00:00 QiaoShen sudo:  username : TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/sed -i /Failed password/d /var/log/auth.log

	这里记录的是「sudo 执行了 sed 命令」,但不会记录 sed 具体修改了哪些内容。


2)修改了日志文件本身:如果你的 sed 命令是修改 /var/log/auth.log 这类系统日志文件(如你之前删除 Failed password 日志的操作),日志文件的「修改时间」会被更新(可通过 ls -l /var/log/auth.log 查看 mtime),但这属于文件属性变化,而非日志内容记录。


3)系统开启了审计(auditd):如果系统安装并启用了 auditd 审计服务(Linux 审计框架),且配置了对 sed 或目标文件(如 /var/log/auth.log)的审计规则,auditd 会在 /var/log/audit/audit.log 中记录 sed 的执行细节,例如:
	log type=EXECVE msg=audit(1693284000.123:456): argv=["./sed", "-i", "/Failed password/d", "/var/log/auth.log"]

	但 auditd 是可选服务,默认情况下多数 Linux 发行版(如 Ubuntu、Debian)不会主动开启,需要手动配置。
0. 基础用法 - 小试牛刀
# 查看 /var/log/auth.log 文件当中所有 root 字段的本行和下一行
grep -n -A 1 root /var/log/auth.log


# 查看 /var/log/auth.log 的最后最新的 30 行
tail -n 30 /var/log/auth.log


# 查看 /var/log/auth.log 的最后最新的 (包含 root)的 50 行 - 全都包含 root 字段
tail -n 50 /var/log/auth.log | grep -n -A 1 root

Pasted image 20250829162633.png

Pasted image 20250829162803.png

Pasted image 20250829163219.png

1. 定位有哪些 IP 在爆破
注意:
	grep "PasswordAuthentication" /etc/ssh/sshd_config

	如果输出 PasswordAuthentication no,说明确实禁用了密码登录,因此不会产生 Failed password 日志。没开启密码验证就不会产生日志。
# 模拟爆破
hydra -l root -P rockyou.txt 120.55.169.128 ssh
统计爆破的 IP - 1
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn

Pasted image 20250829170142.png

统计爆破的 IP - 2
grep "Failed password" /var/log/auth.log | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c | sort -rn


grep -E:使用扩展正则表达式
grep -o:只输出文件中匹配到的部分

Pasted image 20250829170159.png

统计爆破的 IP - 3
grep "Failed password" /var/log/auth.log | egrep -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5] |2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c | sort -rn


grep -E:使用扩展正则表达式
grep -o:只输出文件中匹配到的部分

Pasted image 20250829170213.png

!删除日志记录
# 删除 爆破 的所有 相关日志。
sudo sed -i '/Failed password/d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Failed password.*123.121.89.187)|(123.121.89.187.*Failed password)/d' /var/log/auth.log

Pasted image 20250829173513.png

2、定位哪些IP在爆破主机的root帐号
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn


awk:文本和数据进行处理的编程语言。
sort:对文本文件中所有行进行排序。
sort -nr:依照数值的大小排序;以相反的顺序来排序
uniq:显示或忽略重复的行。
uniq -c:在每行开头增加重复次数

Pasted image 20250829170233.png

!删除日志记录
# 删除 爆破 的所有 相关日志。
sudo sed -i '/Failed password for root/d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Failed password for root.*123.121.89.187)|(123.121.89.187.*Failed password for root)/d' /var/log/auth.log

Pasted image 20250829173651.png

3、定位哪些IP在使用不存在的用户爆破,爆破的用户名是
grep "Failed password for invalid user" /var/log/auth.log | awk '{print $0}'

Pasted image 20250829170341.png

grep "Failed password for invalid user" /var/log/auth.log | awk '{print $11,$13}' | uniq -c | sort -rn

Pasted image 20250829170423.png

!删除日志记录
# 删除 爆破 的所有 相关日志。
sudo sed -i '/Failed password for invalid user/d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Failed password for invalid user.*123.121.89.187)|(123.121.89.187.*Failed password for invalid user)/d' /var/log/auth.log
4、获取爆破用户名字典
grep "Failed password" /var/log/auth.log | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -rn

Pasted image 20250829170537.png

!删除日志记录
# 删除 爆破 的所有 相关日志。
sudo sed -i '/Failed password for invalid user/d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Failed password for invalid user.*123.121.89.187)|(123.121.89.187.*Failed password for invalid user)/d' /var/log/auth.log
5、登录成功的IP有哪些
grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

Pasted image 20250829171509.png

!删除日志记录
# 删除 登陆成功 的所有 相关日志。
sudo sed -i '/Accepted /d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Accepted.*123.121.89.187)|(123.121.89.187.*Accepted)/d' /var/log/auth.log
6、登录成功的日期、用户名、IP
grep "Accepted " /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}'

Pasted image 20250829171509.png

!删除日志记录
# 删除 登陆成功 的所有 相关日志。
sudo sed -i '/Accepted /d' /var/log/auth.log

# 仅删除包含我们 IP 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(Accepted.*123.121.89.187)|(123.121.89.187.*Accepted)/d' /var/log/auth.log
7、用户 增删改查 日志
# 添加用户
useradd authlogtemp

# 修改密码
passwd authlogtemp

# 删除用户
userdel authlogtemp
grep "useradd " /var/log/auth.log
	grep -E "useradd.*authlogtemp|authlogtemp.*useradd" /var/log/auth.log

grep passwd /var/log/auth.log
	grep -E "passwd.*authlogtemp|authlogtemp.*passwd" /var/log/auth.log

grep userdel /var/log/auth.log
	grep -E "userdel.*authlogtemp|authlogtemp.*userdel" /var/log/auth.log

Pasted image 20250829171655.png

Pasted image 20250829171819.png

!删除日志记录
# 删除 useradd、userdel、passwd 的所有 相关日志。
sudo sed -i '/useradd /d' /var/log/auth.log
sudo sed -i '/userdel /d' /var/log/auth.log
sudo sed -i '/passwd /d' /var/log/auth.log


# 仅删除包含我们指定 用户 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(useradd.*authlogtemp)|(authlogtemp.*useradd)/d' /var/log/auth.log
sudo sed -i -E '/(userdel.*authlogtemp)|(authlogtemp.*userdel)/d' /var/log/auth.log
sudo sed -i -E '/(passwd.*authlogtemp)|(authlogtemp.*passwd)/d' /var/log/auth.log

Pasted image 20250829181450.png

8、su切换用户
# 切换用户
su authlogtemp
grep "su:session" /var/log/auth.log
	grep -E "su:session.*authlogtemp|authlogtemp.*su:session" /var/log/auth.log

Pasted image 20250829171954.png

!删除日志记录
# 删除 su 的所有 相关日志。
sudo sed -i '/su:session /d' /var/log/auth.log


# 仅删除包含我们指定 用户 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(su:session.*authlogtemp)|(authlogtemp.*su:session)/d' /var/log/auth.log
9、sudo授权执行
# 查看 sudo 权限的命令。
sudo -l
grep "sudo" /var/log/auth.log
	grep -i -E "sudo.*authlogtemp|authlogtemp.*sudo" /var/log/auth.log

Pasted image 20250829172132.png

!删除日志记录
# 删除 su 的所有 相关日志。
sudo sed -i '/sudo/d' /var/log/auth.log


# 仅删除包含我们指定 用户 的。(-E 指定可正则,可以让我们使用 “|” ; “|” 中间不可有空格。)
sudo sed -i -E '/(su:sudo.*authlogtemp)|(authlogtemp.*sudo)/d' /var/log/auth.log
10、删除他们
# 把 command 替换为我们具体的值即可。
sudo sed -i -E '/command/d' /var/log/auth.log


	# 删除 authlogtemp 用户 相关的 useradd 命令日志。
	sudo sed -i -E '/(useradd.*authlogtemp)|(authlogtemp.*useradd)/d' /var/log/auth.log

	# 删除 IP 为 123.121.89.187 登陆失败 的 爆破SSH 的相关日志。
	sudo sed -i -E '/(Failed password.*123.121.89.187)|(123.121.89.187.*Failed password)/d' /var/log/auth.log

C. 高阶查询日志技巧 * (!!!)

1. 登录日志
登录日志清理:
	last 等日志是二进制文件,无法直接修改。所以清除的最简单方式是清空日志文件本身。

# 删除 最近的登录信息(只有成功信息)
echo null > /var/log/wtmp

# 删除 登录失败的用户信息
echo null > /var/log/btmp

# 删除 当前正登录的用户信息
echo null > /var/run/utmp


# 这个可以不用
echo null > /var/log/lastlog

ssh远程登录会产生登录日志

查看命令日志文件路径记录内容描述
last/var/log/wtmp所有用户最近的登录信息
lastlog/var/log/lastlog用户最后一次登录的信息
lastb/var/log/btmp登录系统失败的用户信息
who 或 w/var/log/utmp当前正登录的用户及其执行信息
-/var/log/message系统重要信息(异常错误等)
-/var/log/secure安全相关信息:验证授权、账号密码信息(如 ssh 登录、su 切换、sudo 授权等)
-/var/log/cron定时任务执行相关的日志信息
-/var/log/auth.log包含系统授权信息,包括用户登录和使用的权限机制等
-/var/log/userlog记录所有等级用户信息的日志
命令日志文件 / 数据文件描述
last/var/log/wtmp显示所有成功登录 / 登出的系统历史记录,包含用户名、登录终端(如 pts/0)、来源 IP、登录 / 登出时间、会话持续时长等
lastb/var/log/btmp显示登录失败的尝试记录,包括错误用户名、尝试时间、来源 IP / 终端、失败原因关联信息(如密码错误)
lastlog/var/log/lastlog显示每个用户(含系统用户)最近一次的登录信息,按用户名排序,包含登录终端、来源 IP、最近登录时间
w / who/var/run/utmp显示当前在线登录的用户信息,w 比 who 更详细(额外包含用户当前执行的命令、系统负载等)
  • 命令的输出包括:登录名,上次登录时间,IP地址,端口等。
  • 登录日志清理:last等日志是二进制文件,无法直接修改。所以清除的最简单方式是清空日志文件本身

Pasted image 20250829183807.png


2. 定时任务
/var/log/cron:记录了系统定时任务相关的日志。
	- 相关路径可以在:
		查看 具体子配置文件 - more /etc/rsyslog.d/50-default.conf 当中看到
此处压根都没开。

Pasted image 20250829184328.png

1)基本操作
1、查看任务:
	crontab –l 
	cat /etc/crontab 
	more /etc/crontab

2、查询用户的任务:
	crontab -u root –l

3、删除用户的任务:
	crontab –u root –r

4、编辑用户的任务:
	crontab –u root –e
2)定时任务目录文件
文件 / 目录路径描述说明
/etc/cron.d/*存放系统级任务的任务文件
/etc/cron.hourly/*存放每小时执行的任务
/etc/cron.daily/*存放每日执行的任务
/etc/cron.weekly/*存放每周执行的任务
/etc/cron.monthly/*存放每月执行的任务
/etc/anacrontab存放系统级的定时任务配置
/var/spool/cron/*存放各个用户的定时任务文件
3)计划任务的⽇志
# Linux 系统文件 /etc/rsyslog.conf 当中进行设定 日志存储路径。
/var/log/cron*

3. 隐藏历史记录
# 开启无痕模式,禁用命令历史记录功能。
set +o history

# 恢复
set -o history

4. 操作历史记录
历史命令记录:history
仅清理当前用户:history -c

# 先执行这条,彻底删除掉这个文件,再用下面的清空命令,因为第二条命令的情况其实本质上还是可以复原的。
rm -rf .bash_history

# 清空 历史记录。
history -c

	除了 .bash_history 之外,还有 .zsh_history 等等... 具体需要看是用的是么 bash 终端来进行删除。

5. SSH隐身登录

隐身登录系统,不会被last、who、w等指令检测到。

ssh -T user@host /bin/bash -i

ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -if
SSH 密钥 删除
rm -rf .ssh/具体密钥文件 
	甚至说 具体文件上进行清除我们的公钥文件,然后再重新生成公钥文件,确保我们的 公钥 万无一失彻底删除,没有痕迹。

Pasted image 20250828200134.png


2. WEB 日志

/var/log/httpd/access.log
/var/log/nginx/access.log
......

细微清理

# 删除所有包含shell.php这个字符串的行
sed -i -e '/shell.php/d' /var/log/httpd/access.log


# 删除包含123.123.123.123这个字符串(我们自己的IP)的行
sed -i -e '/123\.123\.123\.123/d' /var/log/httpd/access.log

暴力清理

rm -rf /var/log/httpd/access.log
rm -rf /var/log/nginx/access.log

1)Apache

Apache安装路径:
	%Apache_home%
	
	日志文件默认路径:
		%Apache_home%\logs\access.log

在默认配置下,Apache HTTP Server(简称 Apache)主要生成两类核心日志文件:Access Log(访问日志) 和 Error Log(错误日志),分别记录客户端访问行为与服务器运行异常。不同操作系统(Windows/Linux)的日志存储路径、配置文件位置存在差异,以下从日志类型、路径、定位方法等维度系统总结。

一、Apache 核心日志类型及作用

Apache 的日志功能由配置文件(httpd.conf 或 apache2.conf)控制,默认启用两类关键日志:

日志类型核心作用关键记录内容
Access Log记录所有客户端对 Apache 服务器的 HTTP/HTTPS 访问请求,用于审计访问行为客户端 IP、访问时间、请求方法(GET/POST)、访问的 URL 路径、状态码(200/404/500)、用户代理(UA)等
Error Log记录 Apache 服务器运行过程中的错误、警告、调试信息,用于排查服务故障错误发生时间、错误级别(Notice/Warning/Error/Critical)、错误描述(如模块加载失败、文件不存在、权限不足)等

二、Apache 日志存储路径

Apache 的日志路径由配置文件中的 CustomLog(Access Log)和 ErrorLog(Error Log)指令定义,不同系统、不同安装方式(源码安装 / 包管理安装 / 一键安装)的默认路径差异较大,以下为主流场景的默认路径:

Linux 下 Apache 配置文件通常集中在 /etc/httpd/(RHEL/CentOS)或 /etc/apache2/(Ubuntu/Debian),日志默认存储在系统级日志目录或 Apache 专属目录:

日志类型RHEL/CentOS(yum 安装)默认路径Ubuntu/Debian(apt 安装)默认路径源码安装默认路径(自定义)
Access Log/var/log/httpd/access_log/var/log/apache2/access.log$APACHE_HOME/logs/access_log$APACHE_HOME 为源码安装根目录,如 /usr/local/apache2
Error Log/var/log/httpd/error_log/var/log/apache2/error.log$APACHE_HOME/logs/error_log

说明:源码安装时,$APACHE_HOME 为编译安装时指定的根目录(如 ./configure --prefix=/usr/local/apache2),日志路径可在编译时通过参数调整。

三、快速定位 Apache 关键信息(日志路径 / 安装目录)

若默认路径失效(如手动修改过配置、非标准安装),可通过以下方法快速定位 Apache 安装目录、配置文件及日志路径:

1. 定位 Apache 配置文件(httpd.conf/apache2.conf)

日志路径由配置文件定义,先找到配置文件即可查询实际日志路径:

  • Linux 系统

    • RHEL/CentOS:/etc/httpd/conf/httpd.conf

    • Ubuntu/Debian:/etc/apache2/apache2.conf(主配置文件),日志相关配置可能在 /etc/apache2/conf-available/other-vhosts-access-log.conf 中

    • 通用查询命令(通过进程找配置文件):

      ps -ef | grep apache  # 找到 Apache 进程,查看命令行中的 -f 参数
      # 示例输出:/usr/sbin/apache2 -f /etc/apache2/apache2.conf
      
2. 从配置文件中提取日志路径

打开 Apache 主配置文件(httpd.conf 或 apache2.conf),搜索以下关键字,直接获取实际日志路径:

  • Access Log:搜索 CustomLog 指令,示例:

    # Linux 示例(Ubuntu)
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    

    其中 ${APACHE_LOG_DIR} 为 Linux 下的日志目录变量(通常对应 /var/log/apache2),logs/ 为相对路径(基于 Apache 安装目录)。

  • Error Log:搜索 ErrorLog 指令,示例:

    # Linux 示例(RHEL/CentOS)
    ErrorLog "/var/log/httpd/error_log"
    
3. 定位 Apache 安装目录
  • Linux 系统

    • 包管理安装:which apache2(Ubuntu)或 which httpd(RHEL/CentOS),返回的执行文件路径(如 /usr/sbin/apache2)的上级目录(/usr/sbin/)对应安装相关目录
    • 源码安装:通过 echo $APACHE_HOME 查看环境变量(若配置),或通过进程命令行中的路径反推(如 /usr/local/apache2/bin/httpd 对应安装目录 /usr/local/apache2

四、webshell 痕迹清除需重点关注的 Apache 日志

若需清除 Apache 环境下的 webshell 痕迹,核心关注两类日志,需结合 webshell 行为(如访问路径、执行异常)针对性处理:

日志类型需清除的关键痕迹操作建议
Access Log1. 客户端 IP 访问 webshell 文件的记录(如 GET /webshell.jsp HTTP/1.1
2. 异常 POST 请求(如向 webshell 提交命令的请求)
1. 直接删除日志文件(需注意日志轮转,避免遗漏历史日志,如 access.log.1
2. 用文本编辑器(如 Linux 的 sed)定向删除包含 webshell 路径的行(需谨慎,避免破坏日志完整性)
Error Log1. webshell 执行错误导致的 500 错误记录(如代码语法错误、权限不足)
2. 访问不存在的 webshell 衍生文件的 404 错误
同 Access Log 处理方式,优先删除异常记录行,或替换敏感信息(如客户端 IP、文件路径)

额外注意:Linux 下 Apache 日志可能开启 “日志轮转”(通过 logrotate 工具),需检查 /var/log/httpd/ 或 /var/log/apache2/ 目录下的历史日志文件(如 access.log.1access.log.2.gz),避免遗漏痕迹

清理
细微清理
# 清理包含 "shell.php" 的行(替换为实际日志路径)
sed -i '/shell.php/d' /var/log/apache2/access.log
# 清理包含指定 IP(123.123.123.123)的行(IP 中的点需转义)
sed -i '/123\.123\.123\.123/d' /var/log/apache2/access.log
$logPath = "C:\Apache24\log\access.log"

# 注意 IP 中的点需要转义(用 \.),避免被当作正则通配符
(Get-Content $logPath) | Where-Object { $_ -notmatch "123\.123\.123\.123" } | Set-Content $logPath
暴力清理
# 直接删除日志文件(删除后需重启服务才能重新生成文件)
rm -f /var/log/apache2/access.log
# 清空文件内容(保留文件,无需重启服务即可继续写入)
> /var/log/apache2/access.log

# 或使用以下命令(效果相同)
cat /dev/null > /var/log/apache2/access.log

五、核心总结

维度Linux 系统
核心日志类型Access Log(访问)、Error Log(错误)
默认日志路径(包管理 / 集成环境)Access Log:/var/log/httpd/access_log(RHEL)或 /var/log/apache2/access.log(Ubuntu);Error Log:对应目录下的 error_log/error.log
配置文件位置/etc/httpd/conf/httpd.conf(RHEL)或 /etc/apache2/apache2.conf(Ubuntu)
webshell 痕迹重点Access Log 中的 webshell 访问记录、Error Log 中的执行错误记录,需注意日志轮转文件

2)Nginx

Apache安装路径:
	%Apache_home%
	
	日志文件默认路径:
		%Apache_home%\logs\access.log

Nginx安装路径假设:
	%Nginx_home%
	
	配置文件 nginx.conf中配置日志路径(配置文件那行命令)如:
		access_log logs/access.log main
	
	访问日志默认路径:
		%Nginx_home%\logs\access.log

一、Nginx 核心日志类型及默认路径

Nginx 的日志功能由配置文件(nginx.conf)控制,默认生成两类核心日志:访问日志(Access Log) 和 错误日志(Error Log);部分场景下会自定义业务日志,但默认仅启用前两类。
不同操作系统的默认安装路径不同,因此日志路径也存在差异,具体如下:

1. Linux 系统(主流部署环境)

Linux 下 Nginx 默认安装路径多为 /etc/nginx/(配置文件)、/var/log/nginx/(日志文件),具体路径如下表:

日志类型默认路径核心作用
Access Log/var/log/nginx/access.log记录所有客户端对 Nginx 的 HTTP/HTTPS 请求细节,含:请求时间、客户端 IP、请求方法(GET/POST)、请求 URL、响应状态码(200/404/502)、请求来源(Referer)、客户端浏览器信息(User-Agent)等,用于排查访问异常、统计流量。
Error Log/var/log/nginx/error.log记录 Nginx 服务运行中的错误 / 警告信息,含:启动失败(如端口被占用)、配置语法错误、反向代理连接失败(如后端服务宕机)、文件不存在(404 源头)等,是排查 Nginx 服务故障的核心日志。
自定义日志无默认路径(需在 nginx.conf 中指定)如按域名拆分日志(如 access_xxx.com.log)、按业务模块拆分日志,路径由用户自定义(通常放在 /var/log/nginx/ 子目录下)。

二、关键补充:Nginx 日志配置与路径修改

默认日志路径可通过 Nginx 主配置文件(nginx.conf)修改,核心配置项如下,需区分 全局配置(所有虚拟主机生效)和 虚拟主机配置(仅特定域名生效):

1. 核心配置项
配置项作用示例(Linux)示例(Windows)
access_log启用 / 禁用访问日志,指定路径和日志格式(格式需提前定义,默认 combinedaccess_log /var/log/nginx/access.log combined;access_log D:/nginx-1.24.0/logs/access.log combined;
error_log启用 / 禁用错误日志,指定路径和日志级别(级别:debuginfonoticewarnerrorcritalertemerg,默认 errorerror_log /var/log/nginx/error.log error;error_log D:/nginx-1.24.0/logs/error.log error;
log_format自定义访问日志格式(如添加请求耗时、后端服务 IP 等字段)log_format myfmt '$remote_addr [$time_local] "$request" $status $request_time';格式语法与 Linux 一致,仅路径不同。
2. 配置文件示例(Linux)
# 全局配置(所有虚拟主机生效)
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 自定义日志格式(可选)
    log_format  combined  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

    # 全局日志路径(若虚拟主机未单独配置,将继承此路径)
    access_log  /var/log/nginx/access.log  combined;
    error_log   /var/log/nginx/error.log   error;

    # 虚拟主机配置(单独指定日志路径,覆盖全局配置)
    server {
        listen       80;
        server_name  xxx.com;

        # 该域名的专属访问日志
        access_log  /var/log/nginx/access_xxx.com.log  combined;
        # 该域名的专属错误日志(可选,不配置则用全局 error_log)
        error_log   /var/log/nginx/error_xxx.com.log   warn;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}

三、如何快速定位 Nginx 安装路径与日志路径?

若忘记 Nginx 安装目录或日志路径,可通过以下命令 / 方法快速定位(区分操作系统):

定位目标常用命令 / 方法说明
找到 Nginx 可执行文件路径which nginx 或 whereis nginx输出示例:/usr/sbin/nginx,可执行文件所在目录通常与配置文件目录关联(如 /usr/sbin/nginx 对应配置文件 /etc/nginx/nginx.conf)。
找到配置文件 nginx.confnginx -t(测试配置文件语法并显示路径)或 find / -name "nginx.conf"nginx -t 输出示例:nginx: configuration file /etc/nginx/nginx.conf test is successful,直接获取配置文件路径。
从配置文件中提取日志路径grep -r "access_log" /etc/nginx/ 或 grep -r "error_log" /etc/nginx/搜索所有配置文件中的日志路径配置,避免遗漏虚拟主机的自定义日志。

四、webshell 痕迹清除需重点关注的 Nginx 日志

若需清除 Nginx 环境下的 webshell 痕迹,核心关注两类默认日志,需结合 webshell 的访问、执行行为针对性处理,同时注意自定义日志(如按域名拆分的访问日志)的遗漏风险:

日志类型需清除的关键痕迹操作建议
Access Log(访问日志)1. 客户端 IP 访问 webshell 文件的记录(如 GET /webshell.php HTTP/1.1POST /shell.jsp HTTP/1.1
2. 异常请求特征记录(如非浏览器 User-Agent、高频访问同一可疑路径、携带异常参数的请求)
3. 反向代理场景下,后端 webshell 对应的代理转发记录(如请求路径匹配反向代理规则)
1. 直接删除日志文件:需同步删除历史轮转日志(Linux 下如 access.log.1access.log.2.gz;Windows 下如 access.log.bak),避免残留痕迹
2. 定向删除敏感记录:Linux 用 sed 命令(如 sed -i '/webshell.php/d' /var/log/nginx/access.log),Windows 用 Notepad++ 等工具筛选并删除含可疑路径的行(操作前建议备份日志)
3. 覆盖敏感字段:若不便删除记录,可替换客户端 IP(如 sed -i 's/192.168.1.100/0.0.0.0/g' /var/log/nginx/access.log)或可疑路径,注意保持日志格式完整性
Error Log(错误日志)1. webshell 执行错误触发的 500 错误记录(如代码语法错误、权限不足导致的文件读写失败)
2. 访问 webshell 衍生文件(如后门依赖的配置文件、临时文件)的 404 错误
3. Nginx 与后端服务(如 Tomcat、PHP-FPM)通信异常记录(如 webshell 触发后端服务崩溃导致的 502/504 错误)
1. 参考 Access Log 处理逻辑,优先定向删除敏感错误行,避免直接删除整个日志文件(可能影响其他故障排查)
2. 若错误日志开启了 debug/info 级别,需重点清理 webshell 操作触发的详细调试信息(如文件打开路径、命令执行痕迹)

额外注意:

  1. 自定义日志处理:若 Nginx 配置了按域名 / 业务拆分的自定义日志(如 access_xxx.com.log),需逐一检查对应日志文件,避免遗漏特定域名下的 webshell 痕迹
  2. 日志轮转工具:Linux 下 Nginx 日志默认通过 logrotate 管理(配置文件通常在 /etc/logrotate.d/nginx),需检查轮转后的压缩日志(如 access.log.1.gz),需先解压再清理;Windows 下若手动配置了 LogRotateWin、WinLogRotate 等工具,需同步清理切割后的历史日志
  3. 反向代理场景:若 Nginx 作为反向代理,需同时检查后端服务(如 Tomcat 的 access log、PHP-FPM 的 error log),避免仅清理 Nginx 日志而残留后端痕迹
清理
细微清理
# 清理包含 "shell.php" 的行(替换为实际 Nginx 日志路径)
sed -i '/shell.php/d' /var/log/nginx/access.log
# 清理包含指定 IP(123.123.123.123)的行(IP 中的点需转义)
sed -i '/123\.123\.123\.123/d' /var/log/nginx/access.log
暴力清理
# 直接删除日志文件(删除后 Nginx 仍能继续写入,无需重启,会自动重建文件)
rm -f /var/log/nginx/access.log
# 清空文件内容(保留文件,Nginx 可直接继续写入,无需重启)
> /var/log/nginx/access.log

# 或等效命令
cat /dev/null > /var/log/nginx/access.log

五、核心总结

维度Linux 系统Windows 系统
核心日志类型Access Log(访问)、Error Log(错误)、自定义日志(可选)同 Linux
默认日志路径(标准安装)Access Log:/var/log/nginx/access.log;Error Log:/var/log/nginx/error.logAccess Log:Nginx安装目录/logs/access.log(如 D:\nginx-1.24.0\logs\access.log);Error Log:Nginx安装目录/logs/error.log
配置文件位置主配置文件:/etc/nginx/nginx.conf;虚拟主机配置:/etc/nginx/conf.d/(或 /etc/nginx/sites-available/主配置文件:Nginx安装目录/conf/nginx.conf(如 D:\nginx-1.24.0\conf\nginx.conf
webshell 痕迹重点1. Access Log 中的可疑访问路径、异常请求
2. Error Log 中的 500/404/502 错误记录
3. 日志轮转后的历史压缩日志(access.log.1.gz 等)
1. 同 Linux 日志痕迹类型
2. 手动切割的备份日志(access.log.bak 等)
3. 需注意路径分隔符为 \(如 D:\nginx-1.24.0\logs\access.log

3)tomcat

conf/logging.properties   → 配置日志怎么记。
logs/catalina.xx.log   → Tomcat 整体的启动/停止日志。
logs/host-manager.xx.log   → Host Manager 应用日志。
logs/localhost.xx.log   → 本地虚拟主机运行的 Web 应用日志(异常多在这里)。
logs/manager.xx.log   → Manager 应用的管理操作日志。

1. tomcat 日志信息分为两类:

  • 运行中的日志,它主要记录运行的一些信息,尤其是些异常错误日志信息 。
  • 访问日志信息,它记录的访问的时间、IP 、访问的资料等相关信息。

2. 快速找到 tomcat 安装路径的手法

默认安装路径:
	如果用包管理器安装(rpm/deb):
		/usr/share/tomcat/
		/usr/share/tomcat9/
		/var/lib/tomcat/
		/var/lib/tomcat9/
	(不同发行版可能带版本号)

如果手工下载压缩包:
	/usr/local/tomcat/
	/opt/tomcat/
  • 查找进程路径

    ps -ef | grep tomcat

    你会看到类似:

    /usr/local/tomcat/bin/catalina.sh

    上层目录就是安装目录。

  • 通过环境变量

    echo $CATALINA_HOME

    如果配置了环境变量,就能直接看到。

  • 全局搜索(兜底)

    find / -name "catalina.sh" 2>/dev/null

    找到 catalina.sh,它所在目录的上一级就是 Tomcat 的根目录。

3. 记录系统启、关闭日志、管理日志和异常信息:

  • conf/logging.properties → 配置日志怎么记。
  • logs/catalina.xx.log → Tomcat 整体的启动/停止日志。
  • logs/host-manager.xx.log → Host Manager 应用日志。
  • logs/localhost.xx.log → 本地虚拟主机运行的 Web 应用日志(异常多在这里)。
  • logs/manager.xx.log → Manager 应用的管理操作日志。
🔑 重点关注的日志
  1. logs/localhost.xx.log

    • 这是 Web 应用异常日志,Tomcat 在处理请求时如果抛了异常(比如 JSP 报错、Servlet 错误、栈回溯),就会写进这里。

    • WebShell 一旦执行出错(比如命令执行失败、语法错误),就会在这里留下明显痕迹。

    • ✅ 所以这是你要重点清理的文件。

  2. logs/manager.xx.log(如果用过 Manager 部署)

    • 如果你是通过 Manager 应用上传 war 包 / 部署 WebShell 的话,这里会有操作日志。

    • 只要用过 Manager,这个必须改。


⚪ 次要日志(通常不涉及 WebShell)
  • logs/catalina.xx.log

    • 主要记录 Tomcat 启动、关闭,或者一些系统级信息。

    • WebShell 的请求一般不会直接出现在这里,除非伴随严重错误。

  • logs/host-manager.xx.log

    • 只有你操作过 Host Manager(虚拟主机管理),才会有记录。大多数情况下和 WebShell 无关。

  • WebShell相关 → 必清 👉 localhost.xx.log

  • 如果走 Manager 部署过 → 也要清 👉 manager.xx.log

  • Catalina、Host-manager → 正常留着,别动

详细介绍

Tomcat 在运行时会在 logs/ 目录下生成日志文件,常见的有:

  • catalina.xx.log

    • Catalina 是 Tomcat 的核心组件。

    • 这个日志里主要记录 Tomcat 启动、运行、关闭过程中的信息。

    • 举例:启动报错、JVM 参数输出、Tomcat 停止时的信息。

  • host-manager.xx.log

    • 记录 Tomcat Host Manager 应用 的相关日志。

    • Host Manager 是用来管理虚拟主机的 Web 应用(比如动态添加、删除虚拟主机)。

    • 如果你用过 http://localhost:8080/host-manager/html,相关操作日志就会在这里。

  • localhost.xx.log

    • 记录在 本地主机(localhost)虚拟主机 上运行的 Web 应用抛出的异常或错误。

    • 比如:某个应用 JSP 语法错误、Servlet 抛异常,这些会写到这里。

  • manager.xx.log

    • 记录 Tomcat Manager 应用 的日志。

    • Manager 是用来管理 Web 应用的工具(比如上传、卸载、启动、停止应用)。

    • 如果你用过 http://localhost:8080/manager/html,操作日志会出现在这里。

清理
# 1. 清空单个日志(保留文件,不影响 Tomcat 运行)
> /usr/local/tomcat/logs/catalina.out
# 2. 删除指定日志(按日期/通配符匹配)
# 删除 8 月的 catalina 历史日志
rm -f /usr/local/tomcat/logs/catalina.2024-08-*.log
# 删除所有访问日志
rm -f /usr/local/tomcat/logs/access_log.*.txt
# 3. 按时间删除(保留近 7 天,删除更早的日志)
find /usr/local/tomcat/logs -type f \
  -name "*.log" -o -name "*.txt" \
  -mtime +7 \
  -delete

4)WebLogic

	默认配置情况下,WebLogic会有三种⽇志,分别是access log, Server log和domain log。

WebLogic 9及以后版本:
	access log在 $MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\access.log
	
	server log在 $MW_HOME\user_projects\domains\<domain_name>\servers\<server_name>\logs\<server_name>.log
	
	domain log在 $MW_HOME\user_projects\domains\<domain_name>\servers\<adminserver_name>\logs\<domain_name>.log


WebLogic 8.x 版本:
access log在 $MW_HOME\user_projects\domains\<domain_name>\<server_name>\access.log

server log在 $MW_HOME\user_projects\domains\<domain_name>\<server_name>\<server_name>.log

domain log在 $MW_HOME\user_projects\domains\<domain_name>\<domain_name>.log

在默认配置下,WebLogic 服务器主要生成三类核心日志文件:Access Log(访问日志)Server Log(服务器日志) 和 Domain Log(域日志)。不同版本的 WebLogic 日志存储路径存在差异,且在 Windows 和 Linux 系统中因路径分隔符和环境变量格式的不同,写法也有所区别。以下按版本分类整理,清晰呈现各日志的路径规则及跨系统差异。

一、基础概念与系统差异说明

1. 核心日志类型
  • Access Log:记录客户端对 WebLogic 服务器的 HTTP 访问请求,包含请求时间、IP 地址、URL 等详细信息
  • Server Log:记录单个服务器实例的运行日志,包含启动 / 停止、错误、警告等服务器级事件
  • Domain Log:记录整个域(Domain)的汇总日志,包含所有服务器实例的关键事件
2. 跨系统路径差异核心

不同操作系统的路径表示方式存在基础差异,WebLogic 日志路径遵循以下规则:

系统类型路径分隔符环境变量格式示例(中间件根目录)
Windows\(反斜杠)%变量名%%MW_HOME%
Linux/(正斜杠)$变量名$MW_HOME

说明:MW_HOME 为 WebLogic 中间件安装根目录的环境变量,所有日志路径均基于此目录展开

二、WebLogic 9 及以后版本(主流版本)

日志路径结构围绕 "域(domain)- 服务器(server)" 层级展开,包含 "servers" 目录和单独的 "logs" 子目录。

各日志类型的系统路径对比
日志类型Linux 系统路径说明
Access Log$MW_HOME/user_projects/domains/<domain_name>/servers/<server_name>/logs/access.log记录 HTTP 访问请求细节
Server Log$MW_HOME/user_projects/domains/<domain_name>/servers/<server_name>/logs/<server_name>.log记录单个服务器实例的运行事件
Domain Log$MW_HOME/user_projects/domains/<domain_name>/servers/<admin_server_name>/logs/<domain_name>.log需通过管理服务器(Admin Server)存储的域级汇总日志
变量说明
  • <domain_name>:WebLogic 域的名称(用户创建域时自定义)
  • <server_name>:具体服务器实例的名称(如受管服务器)
  • <admin_server_name>:管理服务器的名称(域创建时默认或自定义)

三、WebLogic 8.x 版本(旧版本)

日志路径层级相对简化,未单独区分 "servers" 目录,直接以 "域 - 服务器" 为路径结构,且无单独的 "logs" 子目录。

各日志类型的系统路径对比
日志类型Linux 系统路径说明
Access Log$MW_HOME/user_projects/domains/<domain_name>/<server_name>/access.log功能同 9+ 版本,记录 HTTP 访问请求细节
Server Log$MW_HOME/user_projects/domains/<domain_name>/<server_name>/<server_name>.log功能同 9+ 版本,记录单个服务器实例的运行事件
Domain Log$MW_HOME/user_projects/domains/<domain_name>/<domain_name>.log直接存储在域根目录下的域级汇总日志,无需通过管理服务器路径

四、版本与系统差异总结

1. 版本间核心差异
对比维度WebLogic 9 及以后版本WebLogic 8.x 版本
路径层级多 "servers" 目录(域→servers→服务器→logs)无 "servers" 目录(域→服务器)
Domain Log 存储需通过管理服务器的 logs 目录直接存储在域根目录下
Logs 目录位置每个服务器实例目录下单独包含 "logs" 子目录无单独 "logs" 子目录
2. 系统间使用注意事项
  • 在实际操作中,需严格区分路径分隔符(\ 用于 Windows,/ 用于 Linux)
  • 环境变量引用格式需与操作系统匹配(%MW_HOME% 用于 Windows,$MW_HOME 用于 Linux)
  • 路径中的变量(如 <domain_name>)需替换为实际环境中的名称
  • 混用分隔符或环境变量格式会导致路径无效,无法正常访问日志文件

五、快速定位 WebLogic 安装路径(MW_HOME)的方法

WebLogic 的安装路径即 MW_HOME(中间件根目录),可通过以下方法快速定位:

1. 基于环境变量查询

WebLogic 安装后通常会配置 MW_HOME 环境变量,直接查询即可:

  • Linux
    打开终端,执行:

    echo $MW_HOME
    

    若返回路径(如 /u01/oracle/middleware),即为安装路径。

2. 通过进程信息查询

若 WebLogic 服务器正在运行,可通过进程详情定位安装路径:

  • Linux
    执行以下命令查找 WebLogic 进程,并提取路径:

    ps -ef | grep weblogic.Server
    

    输出中会包含 -Dweblogic.home 或 -Ddomain.home 参数,例如:

    -Dweblogic.home=/u01/oracle/middleware/wlserver
    

    其中 /u01/oracle/middleware 即为 MW_HOME

3. 通过域配置文件查询

WebLogic 的域(Domain)配置文件中会记录 MW_HOME 路径:

  • 域的配置文件 config.xml 位置:
    • WebLogic 9+:$MW_HOME/user_projects/domains/<domain_name>/config/config.xml
    • 打开该文件,搜索 MW_HOME 或 WL_HOME(通常指向 MW_HOME/wlserver),可反推 MW_HOME 路径。
4. 常见默认安装路径
  • Linux:通常在 /opt/oracle/middleware//u01/oracle/middleware/ 或 /usr/local/oracle/middleware/
/u01/app/oracle/middleware/
/opt/Oracle/Middleware/
/home/oracle/Middleware/
	<MIDDLEWARE_HOME>/wlserver_10.3/
	<MIDDLEWARE_HOME>/wlserver_12.1/
	<MIDDLEWARE_HOME>/wlserver_12.2/

六、webshell 痕迹清除需重点关注的日志文件及路径

webshell 的核心行为通常包括 HTTP 访问(如连接 webshell 路径)服务器端异常操作(如文件写入、命令执行) 等,对应的关键日志如下:

1. Access Log(访问日志)
  • 作用:记录所有客户端对 WebLogic 服务器的 HTTP/HTTPS 请求,包括请求时间、客户端 IP、访问的 URL 路径、请求方法(GET/POST)、状态码等。
    若 webshell 是通过 HTTP 访问(如 http://xxx/webshell.jsp),会在此日志中留下明确痕迹。

  • 路径(区分版本和系统):

    • WebLogic 9 及以后版本
      $MW_HOME/user_projects/domains/<domain_name>/servers/<server_name>/logs/access.log
  • WebLogic 8.x 版本
    $MW_HOME/user_projects/domains/<domain_name>/<server_name>/access.log

2. Server Log(服务器日志)
  • 作用:记录服务器实例的运行细节,包括启动 / 停止事件、错误(Error)、警告(Warning)、异常(Exception)、部署操作、文件系统修改(如 JSP/Servlet 编译)等。
    若 webshell 执行了异常操作(如调用危险 API、修改系统配置),可能触发服务器级别的错误日志;若 webshell 是通过文件上传写入的,也可能在日志中留下文件创建 / 修改的记录。
  • 路径(区分版本和系统):
    • WebLogic 9 及以后版本

      • Linux:$MW_HOME/user_projects/domains/<domain_name>/servers/<server_name>/logs/<server_name>.log
    • WebLogic 8.x 版本

      • Linux:$MW_HOME/user_projects/domains/<domain_name>/<server_name>/<server_name>.log
3. Domain Log(域日志)
  • 作用:汇总整个域(Domain)内所有服务器实例的关键事件,包括管理操作、跨服务器的异常等。
    若 webshell 影响范围涉及整个域(如通过管理服务器部署),可能在此日志中留下痕迹。
  • 路径(区分版本和系统):
    • WebLogic 9 及以后版本

      • Linux:$MW_HOME/user_projects/domains/<domain_name>/servers/<admin_server_name>/logs/<domain_name>.log
    • WebLogic 8.x 版本

      • Linux:$MW_HOME/user_projects/domains/<domain_name>/<domain_name>.log
4. 额外注意:操作系统级日志

除 WebLogic 自身日志外,还需关注操作系统日志(如 Linux 的 /var/log/secure 记录 SSH 登录,/var/log/messages 记录系统级操作;Windows 的 “事件查看器” 中的 “系统日志”“安全日志”),避免遗漏 webshell 相关的系统命令执行、文件操作痕迹。

清理
# 1. 清空服务器日志(保留文件,不影响 WebLogic 运行)
> /u01/oracle/domains/base_domain/servers/AdminServer/logs/AdminServer.log
# 2. 删除历史日志文件(清理压缩的归档日志)
rm -f /u01/oracle/domains/base_domain/servers/AdminServer/logs/AdminServer.log*.gz
# 3. 按时间删除(保留近 10 天,清理更早的日志)
find /u01/oracle/domains/base_domain/servers \
  -type f \
  \( -name "*.log" -o -name "*.log*.gz" \) \
  -mtime +10 \
  -delete

6)Jboss

Jboss 的配置文件和日志文件 jboss-log4j.xml:
	如:
		server/XXX/conf/jboss-log4j.xml 
		server/XXX/log/server.log

一、JBoss 核心日志类型及默认路径

JBoss(WildFly)的日志体系相对复杂,默认包含服务器运行日志访问日志域日志(域模式下),不同运行模式(独立模式 / 域模式)和操作系统的路径存在差异:

日志类型独立模式(Standalone)默认路径域模式(Domain)默认路径核心作用
服务器日志$JBOSS_HOME/standalone/log/server.log$JBOSS_HOME/domain/log/host-controller.log(主机控制器)
$JBOSS_HOME/domain/log/server/<server_name>/server.log(服务器实例)
记录服务器启动 / 停止、部署操作、错误堆栈(如 Java 异常)、系统事件等
访问日志$JBOSS_HOME/standalone/log/access.log(需手动开启)$JBOSS_HOME/domain/log/access.log(需手动开启)记录 HTTP 访问请求(客户端 IP、URL、状态码等),默认不启用
域日志(可选)无(独立模式无域)$JBOSS_HOME/domain/log/domain-controller.log记录域控制器的管理操作、跨服务器实例的事件

说明:$JBOSS_HOME 为 JBoss 安装根目录(如 /opt/wildfly-26.0.0.Final),<server_name> 为域模式下的服务器实例名称。

二、JBoss 日志配置与路径定位

1. 日志配置文件位置

JBoss 日志通过 XML 配置文件管理,可在配置文件中修改日志路径、级别等:

  • 独立模式$JBOSS_HOME/standalone/configuration/standalone.xml
  • 域模式$JBOSS_HOME/domain/configuration/domain.xml

定位日志路径:打开配置文件,搜索 <subsystem xmlns="urn:jboss:domain:logging:x.x"> 节点,其中 <file relative-to="jboss.server.log.dir" path="server.log"/> 定义了日志文件路径(jboss.server.log.dir 为内置变量,指向日志目录)。

2. 快速定位 JBoss 安装目录($JBOSS_HOME)
系统类型定位方法
服务器日志1. 执行 echo $JBOSS_HOME 查看环境变量(若配置);
2. 查看进程:ps -ef | grep jbossps -ef | grep jbossps -ef | grep wildfly,输出中含 -Djboss.home.dir=/opt/wildfly 即为安装目录
访问日志1. 执行 echo %JBOSS_HOME% 查看环境变量;
2. 查看服务属性:若以服务运行,在 “服务” 中找到 JBoss 服务,右键 “属性” 查看 “可执行文件路径”(含安装目录)

三、webshell 痕迹清除需重点关注的 JBoss 日志

JBoss 环境中 webshell 通常以 JSP/Servlet 形式存在,需重点清理以下日志中的痕迹:

日志类型需清除的关键痕迹操作建议
服务器日志1. webshell 上传 / 部署时的文件操作记录(如 Deploying web application directory
2. 执行异常触发的 Java 堆栈日志(如 java.lang.RuntimeException 含 webshell 路径)
3. 权限不足导致的错误(如 Permission denied 涉及 webshell 文件)
1. 直接删除日志文件:需同步删除滚动日志(如 server.log.1server.log.2.gz
2. 定向删除敏感行:Linux 用 sed -i '/webshell.jsp/d' server.log,Windows 用文本工具筛选并删除含可疑路径的记录
3. 注意域模式下需清理所有服务器实例的日志文件
访问日志1. 客户端 IP 访问 webshell 的记录(如 GET /webshell.jsp HTTP/1.1
2. 向 webshell 提交命令的 POST 请求(含异常参数)
1. 若启用访问日志,按服务器日志处理方式清理
2. 若未找到访问日志,需确认是否在配置文件中自定义了路径(如 <access-log pattern="..."/> 节点)

额外注意:

  1. 日志滚动机制:JBoss 默认启用日志滚动(按大小或时间切割),需检查 log 目录下的所有历史日志(如 server.log.*
  2. 审计日志:若启用了 JBoss 审计日志(如 audit.log),需同步清理其中的敏感操作记录
  3. 操作系统日志:Linux 需检查 /var/log/secure(SSH 登录)、/var/log/messages(系统命令);Windows 需检查 “事件查看器” 中的安全日志 |
清理
# 1. 清空服务器日志(保留文件,不影响服务运行)
> /opt/jboss/wildfly/standalone/log/server.log
# 2. 删除历史日志(按通配符批量清理)
# 删除所有 server.log 的切割文件(如 server.log.1、server.log.2 等)
rm -f /opt/jboss/wildfly/standalone/log/server.log.*

# 删除 202x 年份的访问日志
rm -f /opt/jboss/wildfly/standalone/log/access_log.202*.log
# 3. 按时间删除(保留近 7 天,清理更早的日志)
find /opt/jboss/wildfly/standalone/log \
  -type f \
  \( -name "server.log*" -o -name "access_log*" \) \
  -mtime +7 \
  -delete

四、核心总结

维度Linux 系统
核心日志类型服务器日志(server.log)、访问日志(access.log,需开启)、域日志(域模式)
默认日志路径独立模式:$JBOSS_HOME/standalone/log/;域模式:$JBOSS_HOME/domain/log/
配置文件位置独立模式:standalone/configuration/standalone.xml;域模式:domain/configuration/domain.xml
webshell 痕迹重点服务器日志中的异常堆栈、文件操作记录;访问日志中的可疑请求;滚动日志文件

7)WebSphere

WebSphere 的默认路径:
	IBM\WebSphere\AppServer\profiles\AppSrv01\logs\server1\SystemOut.log

一、WebSphere 核心日志类型及默认路径

WebSphere 日志默认存储在配置文件存储库服务器实例目录下,核心区分「独立服务器模式」和「集群模式」,跨系统差异主要体现在路径分隔符和环境变量格式。

日志类型独立服务器模式默认路径集群模式默认路径(含节点 / 集群区分)核心作用
服务器日志$WAS_HOME/profiles/<profile_name>/logs/<server_name>/SystemOut.log(标准输出)
$WAS_HOME/profiles/<profile_name>/logs/<server_name>/SystemErr.log(标准错误)
$WAS_HOME/profiles/<profile_name>/logs/<server_name>/SystemOut.log(节点服务器)
$WAS_HOME/profiles/<dmgr_profile>/logs/dmgr/SystemOut.log(部署管理器)
记录服务器启动 / 停止、应用部署、Java 异常(如 webshell 执行错误堆栈)、服务运行事件,是排查故障的核心日志
访问日志$WAS_HOME/profiles/<profile_name>/logs/<server_name>/http_access.log$WAS_HOME/profiles/<profile_name>/logs/<server_name>/http_access.log(节点服务器)记录 HTTP/HTTPS 访问请求,含客户端 IP、访问 URL、请求方法(GET/POST)、状态码(200/404/500)等,默认启用
系统日志$WAS_HOME/profiles/<profile_name>/logs/<server_name>/activity.log$WAS_HOME/profiles/<profile_name>/logs/<server_name>/activity.log(节点服务器)
$WAS_HOME/profiles/<dmgr_profile>/logs/dmgr/activity.log(部署管理器)
记录 WebSphere 系统级操作,如配置修改、节点同步、用户认证等,若 webshell 涉及管理操作会留下痕迹

关键变量说明:
$WAS_HOME:WebSphere 安装根目录(如 /opt/IBM/WebSphere/AppServer);
<profile_name>:配置文件名称(默认如 AppSrv01,部署管理器为 Dmgr01);
<server_name>:服务器实例名称(默认如 server1)。

二、WebSphere 日志配置与安装路径定位

1. 日志配置文件位置

WebSphere 日志的路径、级别、滚动策略通过管理控制台配置文件修改,核心配置文件如下:

  • 独立服务器 / 集群节点$WAS_HOME/profiles/<profile_name>/config/cells/<cell_name>/nodes/<node_name>/servers/<server_name>/server.xml
  • 部署管理器(集群模式)$WAS_HOME/profiles/<dmgr_profile>/config/cells/<cell_name>/dmgr/dmgr.xml

配置修改方式:通过 WebSphere 管理控制台(默认端口 9060,路径 http://<host>:9060/ibm/console)→「服务器」→「服务器类型」→「WebSphere 应用服务器」→ 选择目标服务器 →「故障诊断」→「日志和跟踪」,可可视化调整日志路径、级别及滚动规则。

2. 快速定位 WebSphere 安装路径($WAS_HOME/% WAS_HOME%)
系统类型定位方法
Linux1. 环境变量查询:执行 echo $WAS_HOME,若配置则直接返回路径;
2. 进程查询:执行 ps -ef | grep websphere,输出中含 -Dwas.install.root=/opt/IBM/WebSphere/AppServer,该路径即为 $WAS_HOME
3. 默认路径参考:/opt/IBM/WebSphere/AppServer/usr/IBM/WebSphere/AppServer

三、webshell 痕迹清除需重点关注的 WebSphere 日志

WebSphere 环境中 webshell 多为 JSP/Servlet 形式,可能通过应用部署、文件上传植入,需重点清理以下日志中的敏感痕迹:

日志类型需清除的关键痕迹操作建议
SystemOut.log / SystemErr.log1. webshell 执行错误触发的 Java 异常堆栈(如 java.lang.RuntimeException: 命令执行失败,含 webshell 路径);
2. webshell 上传 / 写入时的文件操作记录(如 File created: /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/<cell_name>/<app_name>.ear/<app_name>.war/webshell.jsp);
3. 应用重新部署时的 webshell 关联记录(如 Deploying application: <app_name>.ear 且包含 webshell 所在应用)
1. 直接删除日志文件:需同步删除滚动日志(如 SystemOut.log.1SystemOut.log.2.gz,WebSphere 默认按大小 / 时间切割日志);
2. 定向删除敏感行:Linux 用 sed -i '/webshell.jsp/d' SystemOut.log(需谨慎,避免破坏日志格式),Windows 用 Notepad++ 筛选含可疑路径 / 异常关键字的行并删除;
3. 集群模式注意:需清理所有节点服务器及部署管理器的 SystemOut.log/SystemErr.log,避免遗漏集群内痕迹
http_access.log1. 客户端 IP 访问 webshell 的记录(如 192.168.1.100 - - [20/Oct/2024:14:30:00 +0800] "GET /<app_context>/webshell.jsp HTTP/1.1" 200 1234);
2. 向 webshell 提交命令的异常 POST 请求(如 POST /<app_context>/webshell.jsp?cmd=whoami HTTP/1.1
1. 清理方式同服务器日志,需覆盖所有滚动日志(如 http_access.log.1);
2. 若访问日志按虚拟主机拆分(自定义配置),需检查 logs 目录下所有含 access 关键字的日志文件(如 http_access_vhost1.log
activity.log1. 若 webshell 通过管理控制台部署(如上传恶意 WAR 包),会留下「应用部署」操作记录(如 User admin deployed application <malicious_app>.war);
2. 涉及 webshell 所在应用的配置修改记录(如「修改应用上下文路径」「启用文件读写权限」)
1. 优先定向删除含恶意应用名称、webshell 关联操作的记录;
2. 若记录无法拆分,可删除整个 activity.log 及滚动文件(注意:会丢失系统管理操作记录,需权衡)

额外注意:
1. 应用安装目录日志:WebSphere 应用默认安装在 $WAS_HOME/profiles/<profile_name>/installedApps/<cell_name>/(Linux),若 webshell 植入后触发应用日志(如应用自身的 log4j 日志),需同步清理该目录下的应用日志;
2. 操作系统日志:Linux 需检查 /var/log/secure(SSH 登录植入 webshell)、/var/log/messages(系统命令执行);Windows 需检查「事件查看器」→「Windows 日志」→「安全」(登录事件)和「系统」(服务启动 / 停止);
3. 部署管理器日志(集群模式):若 webshell 通过集群同步扩散,需清理部署管理器的 SystemOut.log 和 activity.log,避免残留集群同步记录。

清理
# 1. 清空系统日志(保留文件,不影响服务运行)
> /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/SystemOut.log

> /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/SystemErr.log
# 2. 删除历史日志(按通配符批量清理)
# 删除带日期前缀的 SystemOut 历史日志
rm -f /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/SystemOut_*.log

# 删除带日期前缀的 SystemErr 历史日志
rm -f /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1/SystemErr_*.log
# 3. 按时间删除(保留近 5 天,清理更早的日志)
find /opt/IBM/Web/WebSphere/AppServer/profiles/AppSrv01/logs \
  -type f \
  \( -name "SystemOut_*.log" -o -name "SystemErr_*.log" -o -name "http_access*.log" \) \
  -mtime +5 \
  -delete

四、核心总结

维度Linux 系统
核心日志类型服务器日志(SystemOut.log/SystemErr.log)、访问日志(http_access.log)、系统日志(activity.log)
默认日志路径独立模式:$WAS_HOME/profiles/<profile_name>/logs/<server_name>/
集群模式:节点服务器同独立模式,部署管理器:$WAS_HOME/profiles/<dmgr_profile>/logs/dmgr/
配置文件位置服务器配置:$WAS_HOME/profiles/<profile_name>/config/cells/<cell_name>/nodes/<node_name>/servers/<server_name>/server.xml
webshell 痕迹重点1. SystemOut.log/SystemErr.log 中的异常堆栈、文件操作记录;
2. http_access.log 中的可疑访问请求;
3. 滚动日志(.log.1/.log.2.gz)及集群部署管理器日志
文章作者: QiaoShen
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QiaoShen-World
Linux 痕迹清除
喜欢就支持一下吧