Linux 日志痕迹清除
总述
本文讲述了 Linux 的常见日志:
系统日志、中间件日志、框架日志、行为日志 等相关日志的 存储位置 以及 清除。
神
0. Linux 总阐述
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。本文简介一下Linux系统日志及日志分析技巧。
日志对于系统的安全来说非常重要,它记录了系统每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。
日志默认存放位置:
/var/log/
查看日志配置情况:
# 主配置文件见单独查看
/etc/rsyslog.conf
# 先查看 子配置目录 - 查询到都有哪些 子配置文件。
/etc/rsyslog.d/
# 再查看具体的 子配置文件。
/etc/rsyslog.d/50-default.conf
1)/var/log/ 目录情况展示

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.conf | Ubuntu 预设的日志路由规则,定义不同类型日志的存储位置(如 /var/log/auth.log) |
1. 主配置文件
more /etc/rsyslog.conf

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

2、查看 具体子配置文件
不仅记录了 每种系统日志文件 存储的路径,还是在这里配置 日志是否开启(注释)。
more /etc/rsyslog.d/20-ufw.conf
more /etc/rsyslog.d/50-default.conf
more /etc/rsyslog.d/postfix.conf

3)日志消息级别
| 级别数值 | 日志级别名称(英文) | 中文名称 | 核心描述 | 典型场景示例 |
|---|---|---|---|---|
| 0 | EMERG | 紧急 | 系统级严重故障,导致主机完全不可用,需立即介入处理,属于最高优先级日志。 | 系统内核崩溃、根文件系统损坏、关键硬件(如 CPU、内存)故障导致系统无法启动。 |
| 1 | ALERT | 警告 | 存在严重问题,必须立即采取措施修复,否则会直接影响系统核心功能。 | 系统关键服务(如 sshd、rsyslog)意外停止、管理员账户密码文件(/etc/shadow)权限异常。 |
| 2 | CRIT | 严重 | 系统或服务出现严重错误,部分核心功能受影响,但未完全导致系统不可用。 | 数据库服务(如 MySQL)连接池耗尽、系统磁盘空间占满(/ 分区 100% 使用率)、网络核心服务(如 network)故障。 |
| 3 | ERR | 错误 | 程序或服务运行中出现错误,特定功能执行失败,但不影响服务整体运行。 | Web 服务器(如 Nginx)处理某条请求时抛出 500 错误、定时任务(cron)某一次执行脚本失败、用户登录时密码错误(多次失败后触发)。 |
| 4 | WARNING | 提醒 | 存在潜在风险或异常情况,当前未影响系统功能,但不处理可能导致后续问题。 | 系统内存使用率超过阈值(如 90%)、磁盘分区剩余空间不足(如 /home 分区仅剩 10%)、服务配置文件存在非致命性语法警告。 |
| 5 | NOTICE | 注意 | 正常运行中的重要状态变更,无风险但需记录以便追溯,优先级低于警告。 | 管理员成功登录系统、关键服务(如 Nginx)正常启动 / 重启、系统时间同步(ntp)完成。 |
| 6 | INFO | 信息 | 系统或服务的常规运行日志,记录正常操作流程,无异常或风险。 | 用户正常登录 / 注销、服务(如 ssh)接收新连接、系统定时任务(cron)正常执行脚本、文件系统挂载成功。 |
| 7 | DEBUG | 调试 | 程序开发或问题排查时的详细调试信息,包含变量、流程等细节,默认不启用。 | 应用程序(如自定义服务)运行中的函数调用日志、数据库查询语句执行详情、网络请求的数据包交互信息。 |
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 |
| 补充说明 |
- 二进制文件特性:
/var/log/btmp、/var/log/lastlog、/var/run/utmp均为 二进制文件,无法用cat/vi直接查看,必须通过对应专用工具(如lastb、lastlog、w)解析,否则会显示乱码; - 发行版差异:
Debian/Ubuntu 系列中,类似/var/log/secure的登录授权日志路径为/var/log/auth.log,查询方式一致(如grep "sshd" /var/log/auth.log); - 日志持久化:
/var/run/utmp通常位于内存临时目录(/var/run多为 tmpfs),系统重启后数据会清空;其他日志文件(如/var/log/secure、/var/log/wtmp)存储在磁盘,会被logrotate工具按配置轮转(切割、压缩、清理旧日志)。



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 | 记录系统后台守护进程的运行日志(如 rsyslog、crond 等守护进程的状态、错误) | 仅聚焦守护进程,直接查看文本内容,辅助排查服务后台运行问题 |
| /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.log、error.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 显示目前登入系统的用户信息。

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

users
显示当前在线的用户。

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

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

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

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



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

统计爆破的 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:只输出文件中匹配到的部分

统计爆破的 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:只输出文件中匹配到的部分

!删除日志记录
# 删除 爆破 的所有 相关日志。
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

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:在每行开头增加重复次数

!删除日志记录
# 删除 爆破 的所有 相关日志。
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

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

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

!删除日志记录
# 删除 爆破 的所有 相关日志。
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

!删除日志记录
# 删除 爆破 的所有 相关日志。
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

!删除日志记录
# 删除 登陆成功 的所有 相关日志。
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}'

!删除日志记录
# 删除 登陆成功 的所有 相关日志。
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


!删除日志记录
# 删除 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

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

!删除日志记录
# 删除 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

!删除日志记录
# 删除 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等日志是二进制文件,无法直接修改。所以清除的最简单方式是清空日志文件本身

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

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/具体密钥文件
甚至说 具体文件上进行清除我们的公钥文件,然后再重新生成公钥文件,确保我们的 公钥 万无一失彻底删除,没有痕迹。

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 Log | 1. 客户端 IP 访问 webshell 文件的记录(如 GET /webshell.jsp HTTP/1.1) 2. 异常 POST 请求(如向 webshell 提交命令的请求) | 1. 直接删除日志文件(需注意日志轮转,避免遗漏历史日志,如 access.log.1) 2. 用文本编辑器(如 Linux 的 sed)定向删除包含 webshell 路径的行(需谨慎,避免破坏日志完整性) |
| Error Log | 1. webshell 执行错误导致的 500 错误记录(如代码语法错误、权限不足) 2. 访问不存在的 webshell 衍生文件的 404 错误 | 同 Access Log 处理方式,优先删除异常记录行,或替换敏感信息(如客户端 IP、文件路径) |
额外注意:Linux 下 Apache 日志可能开启 “日志轮转”(通过
logrotate工具),需检查/var/log/httpd/或/var/log/apache2/目录下的历史日志文件(如access.log.1、access.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 | 启用 / 禁用访问日志,指定路径和日志格式(格式需提前定义,默认 combined) | access_log /var/log/nginx/access.log combined; | access_log D:/nginx-1.24.0/logs/access.log combined; |
error_log | 启用 / 禁用错误日志,指定路径和日志级别(级别:debug→info→notice→warn→error→crit→alert→emerg,默认 error) | error_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.conf | nginx -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.1、POST /shell.jsp HTTP/1.1) 2. 异常请求特征记录(如非浏览器 User-Agent、高频访问同一可疑路径、携带异常参数的请求) 3. 反向代理场景下,后端 webshell 对应的代理转发记录(如请求路径匹配反向代理规则) | 1. 直接删除日志文件:需同步删除历史轮转日志(Linux 下如 access.log.1、access.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 操作触发的详细调试信息(如文件打开路径、命令执行痕迹) |
额外注意:
- 自定义日志处理:若 Nginx 配置了按域名 / 业务拆分的自定义日志(如
access_xxx.com.log),需逐一检查对应日志文件,避免遗漏特定域名下的 webshell 痕迹- 日志轮转工具:Linux 下 Nginx 日志默认通过
logrotate管理(配置文件通常在/etc/logrotate.d/nginx),需检查轮转后的压缩日志(如access.log.1.gz),需先解压再清理;Windows 下若手动配置了 LogRotateWin、WinLogRotate 等工具,需同步清理切割后的历史日志- 反向代理场景:若 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.log | Access 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 应用的管理操作日志。
🔑 重点关注的日志
-
logs/localhost.xx.log-
这是 Web 应用异常日志,Tomcat 在处理请求时如果抛了异常(比如 JSP 报错、Servlet 错误、栈回溯),就会写进这里。
-
WebShell 一旦执行出错(比如命令执行失败、语法错误),就会在这里留下明显痕迹。
-
✅ 所以这是你要重点清理的文件。
-
-
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路径。
- WebLogic 9+:
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 9 及以后版本:
-
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
- Linux:
-
WebLogic 8.x 版本:
- Linux:
$MW_HOME/user_projects/domains/<domain_name>/<server_name>/<server_name>.log
- Linux:
-
3. Domain Log(域日志)
- 作用:汇总整个域(Domain)内所有服务器实例的关键事件,包括管理操作、跨服务器的异常等。
若 webshell 影响范围涉及整个域(如通过管理服务器部署),可能在此日志中留下痕迹。 - 路径(区分版本和系统):
-
WebLogic 9 及以后版本:
- Linux:
$MW_HOME/user_projects/domains/<domain_name>/servers/<admin_server_name>/logs/<domain_name>.log
- Linux:
-
WebLogic 8.x 版本:
- Linux:
$MW_HOME/user_projects/domains/<domain_name>/<domain_name>.log
- Linux:
-
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 jboss或ps -ef | grep jboss或ps -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.1、server.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="..."/> 节点) |
额外注意:
- 日志滚动机制:JBoss 默认启用日志滚动(按大小或时间切割),需检查
log目录下的所有历史日志(如server.log.*)- 审计日志:若启用了 JBoss 审计日志(如
audit.log),需同步清理其中的敏感操作记录- 操作系统日志: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%)
| 系统类型 | 定位方法 |
|---|---|
| Linux | 1. 环境变量查询:执行 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.log | 1. 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.1、SystemOut.log.2.gz,WebSphere 默认按大小 / 时间切割日志); 2. 定向删除敏感行:Linux 用 sed -i '/webshell.jsp/d' SystemOut.log(需谨慎,避免破坏日志格式),Windows 用 Notepad++ 筛选含可疑路径 / 异常关键字的行并删除; 3. 集群模式注意:需清理所有节点服务器及部署管理器的 SystemOut.log/SystemErr.log,避免遗漏集群内痕迹 |
| http_access.log | 1. 客户端 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.log | 1. 若 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)及集群部署管理器日志 |