认证日志记什么
Linux 把认证与授权类事件统一写入认证日志:sshd 的登录成功与失败、sudo 提权、su 切换、PAM 会话开关、systemd-logind 的会话与锁屏都记录在这里。Debian/Ubuntu 系落在 /var/log/auth.log,RHEL/CentOS 系落在 /var/log/secure,写入者是 rsyslog(或 rsyslog 从 journald 转发)。它是主机溯源里第一个该看的文件:谁在什么时间、从哪个 IP、用什么方式拿到了访问权,几乎都能在这一处找到原始记录。
基本信息
| 日志路径 | /var/log/auth.log(Debian/Ubuntu)、/var/log/secure(RHEL/CentOS) |
|---|---|
| 写入组件 | rsyslog 按 authpriv 规则落盘,或由 journald 提供 |
| 权限要求 | Debian 系通常为 root:adm 640,普通用户读不到,需 sudo |
| 轮转文件 | auth.log.1 为未压缩旧日志,更早的为 .gz,用 zcat 读取 |
| 关联来源 | journalctl、last/lastb(wtmp/btmp)、sudo 独立日志 |
| 时区 | 文件内时间为本地时区,进时间线前要换算 |
典型使用场景
- 确认某次登录是否成功、来源 IP 与端口是多少
- 统计失败尝试次数,判断是否处于口令爆破中
- 排查提权路径:sudo 执行了什么命令、由谁触发
- 判断会话时长:session opened 与 session closed 配对
- 核对服务账号是否被用于交互式登录
- 与 wtmp/last 输出交叉验证登录历史是否被清理
快速浏览与精筛
快速浏览与精筛
# 概览最近的登录、sudo、su 事件
grep -Ei 'ssh|sudo|su' /var/log/auth.log | tail -50
# 只看成功登录,RHEL 系把路径换成 /var/log/secure
grep 'Accepted' /var/log/secure | tail -20
# 成功与失败一次看全,含来源 IP 与端口
grep -E 'Accepted|Failed' /var/log/auth.log | tail -30
# 按来源 IP 聚合失败次数,快速找出被针对的账号
grep 'Failed password' /var/log/auth.log | awk '{print $(NF-3), $(NF-5)}' | sort | uniq -c | sort -rn | head
# 提权与命令记录
grep -E 'sudo:|su:' /var/log/auth.log | tail -30
# 旧日志:未压缩直接 grep,压缩文件用 zcat
grep 'Accepted' /var/log/auth.log.1 | tail
zcat /var/log/auth.log.2.gz | grep 'Accepted' | head行格式逐段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| 日期 时间 | 事件时间,本地时区 | 文件内不带时区标识,先确认主机的时区设置 |
| 主机名 | 产生日志的主机 | 集中收集多主机日志时,此处区分来源 |
| 进程[PID] | 如 sshd[12345]、sudo、CRON | 同一 PID 的多行属于同一次会话,可串起来看 |
| 事件内容 | Accepted/Failed password、session opened 等 | Accepted 表示认证通过;invalid user 表示账号名本身不存在 |
| 来源与端口 | from IP port N(ssh2) | 端口是客户端源端口,不等于目标端口;NAT 后地址会被改写 |
已切到 journald 的主机可能出现 auth.log 为空或只有部分内容,此时用 journalctl -u ssh(或 -u sshd)、journalctl -t sudo 补看;journalctl 支持 --since/--until 与 -o json 输出,字段比文本日志更规整。
攻击者拿到权限后最常见的动作之一就是删改认证日志。事件发生后应尽快把日志副本(含轮转文件)导出到分析机,导出后核对文件哈希;单独依据主机现存日志下结论有被误导的风险。
想让 sudo 命令记录更完整,可在 sudoers 里启用 log_output 或用 auditd 记录 execve;默认配置下 sudo 只记命令路径,不记完整参数。