Linux痕迹清除
1 日志分析
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
日志对于系统安全来说非常重要,它记录每天发生的各种各样的事情,用户可以通过它来检查错误发生的原因,或者寻找收到攻击时攻击者留下的痕迹。日志主要的功能是审计和检测。它还可以实时检测系统状态,监测和追踪侵入者
1.1 日志简介
日志默认位置:/var/log
查看日志配置情况:more /etc/rsyslog.conf
1.2 日志消息级别
| 数值 | 英文名称 | 中文名称 | 描述 | 典型场景示例 |
|---|---|---|---|---|
| 0 | EMERG | 紧急 | 系统不可用,必须立即处理 | 内核崩溃、文件系统损坏导致系统无法启动 |
| 1 | ALERT | 警戒 | 必须立即采取行动(如不处理将导致严重问题) | 磁盘空间 100% 耗尽、关键服务端口被占用 |
| 2 | CRIT | 严重 | 严重错误,服务可能中断但系统仍可运行 | 数据库连接失败、认证服务崩溃 |
| 3 | ERR | 错误 | 非紧急错误,服务功能部分受限 | 应用程序某模块调用失败、配置文件语法错误 |
| 4 | WARNING | 警告 | 潜在问题,不影响当前功能但可能预示未来故障 | 磁盘空间低于 10%、服务响应时间过长 |
| 5 | NOTICE | 通知 | 正常但值得注意的事件(非错误) | 管理员登录、服务重启、配置文件重载 |
| 6 | INFO | 信息 | 常规运行信息,用于跟踪服务状态 | 用户请求处理完成、定时任务执行成功 |
| 7 | DEBUG | 调试 | 详细调试信息,仅用于开发或故障排查 | 函数调用参数、变量值、内部流程日志 |
2 日志文件
在 Linux 环境下,日志系统同样是数字取证、入侵检测和系统排错的生命线。与 Windows 高度结构化的事件查看器不同,Linux 的传统日志大多是纯文本文件,并且通常集中存放在 /var/log/ 目录下。
不过,随着 Linux 发行版的演进,现在的日志管理呈现出传统纯文本日志与现代 systemd 二进制日志并存的局面。
以下是 Linux 核心日志文件的详细解析,重点突出取证和安全分析的实战价值。
2.1.1 核心安全与认证日志
这些日志是排查 SSH 爆破、未授权提权以及恶意登录的首要目标。
| 日志文件路径 (Debian/Ubuntu) | 日志文件路径 (RHEL/CentOS) | 作用说明与取证价值 |
|---|---|---|
/var/log/auth.log |
/var/log/secure |
身份验证日志。记录了所有的 SSH 登录尝试(成功与失败)、su 切换用户、sudo 提权操作。在排查暴力破解或异常提权时,这是必看的第一个文件。 |
/var/log/wtmp |
/var/log/wtmp |
成功登录记录。这是一个二进制文件,不能直接用 cat 看。必须使用 last 命令读取。它记录了所有用户的成功登录、注销时间、以及系统的启动/重启时间。 |
/var/log/btmp |
/var/log/btmp |
失败登录记录。同样是二进制文件,使用 lastb 命令读取。如果系统遭遇了 SSH 密码爆破,这里会留下海量的记录和攻击者的 IP。 |
/var/run/utmp |
/var/run/utmp |
当前在线用户。记录当前登录系统的用户信息。通常使用 w 或 who 命令查看。在应急响应时用于快速确认是否有黑客正挂在服务器上。 |
2.1.2 系统基础与服务日志
用于排查硬件故障、内核报错以及后台服务异常。
/var/log/syslog(Debian系) 或/var/log/messages(RedHat系)- 说明:这是 Linux 的全局系统消息日志。绝大多数没有自己独立日志文件的后台服务,都会将普通信息、警告和错误输出到这里。
/var/log/dmesg- 说明:内核环形缓冲区日志(Kernel Ring Buffer)。记录了系统在启动时硬件自检、驱动加载以及内核模块的信息。通常直接使用
dmesg命令查看(例如:dmesg | grep -i usb可以查看 USB 设备插拔记录)。
- 说明:内核环形缓冲区日志(Kernel Ring Buffer)。记录了系统在启动时硬件自检、驱动加载以及内核模块的信息。通常直接使用
/var/log/cron- 说明:计划任务(Cron)日志。记录了哪些计划任务在什么时间被执行。在后渗透排查中极其重要,因为攻击者非常喜欢利用 Cron 来建立持久化后门(定时反弹 Shell)。
/var/log/daemon.log- 说明:专门记录各种后台守护进程(Daemons)产生的日志信息。
2.1.3 应用与中间件日志
各种安装在 Linux 上的第三方应用通常会在 /var/log/ 下建立自己的子目录。
- Web 服务器日志 (建站排查必备)
- Nginx:
/var/log/nginx/access.log和/var/log/nginx/error.log - Apache:
/var/log/apache2/access.log(Debian) 或/var/log/httpd/access_log(CentOS)
- Nginx:
- 数据库日志
- MySQL/MariaDB: 通常在
/var/log/mysql/或/var/log/mysqld.log。
- MySQL/MariaDB: 通常在
- APT / YUM 日志
/var/log/dpkg.log(Debian/Ubuntu) 或/var/log/yum.log(CentOS):记录了软件包的安装、更新和卸载历史。
2.1.4 其他日志文件
/var/log/cron- 记录了系统定时任务相关的日志
~/.bash_history- 历史记录
3 相关命令
3.1.1 核心文本日志查看与过滤
这些命令主要用于处理传统的文本型日志文件(如 /var/log/messages, /var/log/nginx/access.log 等)。
tail:实时或查看文件尾部。tail -f /var/log/syslog:最常用的日志命令,实时滚动查看日志更新。tail -n 100 error.log:查看最后 100 行。
less:分页查看大文件(强烈推荐,比cat和more安全高效)。- 打开后可使用
/关键字向下搜索,?关键字向上搜索,按G直接跳到文件末尾。
- 打开后可使用
head:查看文件头部。head -n 50 install.log:查看文件开头的 50 行,通常用于看服务启动时的初始化信息。
cat/tac:输出整个文件内容。cat是正向输出,适合小日志文件。tac是反向输出(从最后一行开始往前显示),在排查最新报错时非常有用。
grep:强大的文本搜索工具,日志过滤神器。grep "ERROR" app.log:筛选包含 ERROR 的行。grep -i "failed" auth.log:忽略大小写搜索。grep -C 5 "Exception" app.log:查看包含异常信息的行及其前后各 5 行(排查上下文极好用)。
awk/sed:高阶日志处理。- 常用于从 Nginx 等格式化日志中提取特定的列(如 IP 地址、响应时间)进行统计。
3.1.2 用户活动与安全审计
这些命令专门用于读取系统的二进制日志文件(普通的 cat 或 less 无法直接读取这些文件)。它们是系统安全审计和入侵排查的核心。
w:显示当前登录系统的用户及其正在执行的进程。- 日志关联:它读取的是
/var/run/utmp日志文件。
- 日志关联:它读取的是
who:类似于w,但输出信息更精简,主要显示当前登录的用户名、终端、登录时间及 IP。- 日志关联:同样读取
/var/run/utmp。
- 日志关联:同样读取
last:显示系统历史登录成功的用户记录、系统重启记录。- 日志关联:它解析的是
/var/log/wtmp二进制日志文件。 - _用法_:
last -n 10(查看最近 10 次登录记录)。
- 日志关联:它解析的是
lastb:显示登录失败的用户记录。- 日志关联:它解析的是
/var/log/btmp文件。如果系统正遭受 SSH 暴力破解,这个命令会列出大量的失败尝试和攻击者 IP。
- 日志关联:它解析的是
lastlog:报告系统中所有用户最近一次的登录时间。- 日志关联:它解析的是
/var/log/lastlog文件。可以用来检查是否有未授权的僵尸账号突然登录。
- 日志关联:它解析的是
users:最精简的命令,仅打印出当前登录的用户的用户名。history:显示历史记录
3.1.3 现代 Linux 系统级与内核日志
随着 Systemd 的普及,很多服务的日志不再直接写入文本,而是由专门的守护进程管理。
journalctl:Systemd 日志管理器的查询工具。这是现代 Linux 排错最核心的命令。journalctl -xe:查看最近的系统报错信息(排查服务启动失败时必用)。journalctl -u nginx.service:专门查看 Nginx 服务的日志。journalctl -f:类似于tail -f,实时追踪系统日志。journalctl --since "1 hour ago":查看过去一小时内的日志。
dmesg:显示内核环形缓冲区(Kernel Ring Buffer)的信息。- 主要用途:排查硬件故障、驱动加载问题、内存 OOM(Out of Memory)被杀进程等。
- _用法_:
dmesg -T(将时间戳转换为人类可读的时间格式)。
常用 journalctl 取证/排查命令:
1 | # 查看所有日志 (按空格翻页) |
3.1.4 辅助排查与监控命令
当你仅仅看日志无法定位问题时,需要结合以下命令查看系统状态:
lsof(List Open Files):列出当前系统打开的文件。- 日志关联:有时候你发现磁盘满了,但是找不到大文件,可能是因为某个日志文件被删除了,但进程还在向里面写(文件句柄未释放)。使用
lsof | grep deleted可以揪出这个“幽灵”日志。 lsof /var/log/messages:查看是哪个进程正在占用该日志文件。
- 日志关联:有时候你发现磁盘满了,但是找不到大文件,可能是因为某个日志文件被删除了,但进程还在向里面写(文件句柄未释放)。使用
watch:周期性执行命令并全屏显示结果。- _用法_:
watch -n 1 "tail -n 20 /var/log/syslog"(每秒刷新一次日志的最后20行,比tail -f更适合某些特定监控场景)。
- _用法_:
strace:跟踪系统调用和信号。- 日志关联:当一个程序没有日志输出,或者日志报错极其模糊时,使用
strace -p <PID>可以直接监控该进程底层的系统交互,相当于给进程做“X光透视”。
- 日志关联:当一个程序没有日志输出,或者日志报错极其模糊时,使用
4 隐藏操作
4.1 历史记录清除
4.1.1 操作历史记录
1 | 删除全部历史记录:history -w && history -c && > .bash_history |
4.1.2 隐藏历史命令
1 | 开启无痕模式,禁用历史记录功能,注意有空格 |
4.2 SSH隐身登录
使用隐身登录,不会被last、who、w等指令检测到
1 | ssh -T username@target_IP /bin/bash -i |
