用grep筛选特定用户执行的sudo日志,需匹配“sudo: 用户名 ”结构并排除失败记录,推荐命令:grep -e 'sudo: john ' /var/log/auth.log | grep -v 'not in sudoers|failed|authentication failure'。

用 grep 筛选特定用户执行的含 sudo 的安全日志,关键在于匹配日志中同时满足“用户名”和“sudo”关键词的行,且需注意日志格式(如 /var/log/auth.log 或 /var/log/secure)中字段的位置和变体。
定位日志文件并确认格式
Ubuntu/Debian 系统通常记录在 /var/log/auth.log,RHEL/CentOS 用 /var/log/secure。先用 head -5 查看前几行,确认典型 sudo 日志格式,例如:
可见用户名(如 john)紧跟在 sudo: 后、冒号和空格之后,是可靠锚点。
基础 grep 匹配特定用户 + sudo
直接用正则匹配“sudo: 用户名 ”这种结构,避免误中其他字段里的用户名:
-
grep 'sudo: john ' /var/log/auth.log—— 注意末尾空格,防止匹配到johnson等相似名 - 加
-i忽略大小写(部分日志可能大写用户名):grep -i 'sudo: john ' /var/log/auth.log - 用
-E支持扩展正则,更精准(推荐):grep -E 'sudo: +john[[:space:]]' /var/log/auth.log
增强可靠性:排除干扰项
有些日志含失败尝试(如 user NOT in sudoers)或子进程(如 sudo: pam_unix(sudo:session)),需过滤掉:
- 只保留成功执行命令的记录:
grep -E 'sudo: john : .* COMMAND=' /var/log/auth.log - 排除拒绝类日志:
grep -E 'sudo: john ' /var/log/auth.log | grep -v 'NOT in sudoers\|failed\|authentication failure' - 结合
awk提取更干净结果(可选):awk '/sudo: john [^:]*:/ && /COMMAND=/ {print}' /var/log/auth.log
配合时间范围或滚动日志
查近期日志时,可先用 zcat 解压归档,或用 journalctl 替代(systemd 系统):
- 查最近 1 小时 sudo 行:
journalctl -u systemd-logind --since "1 hour ago" | grep -E 'sudo: john ' - 查压缩日志:
zgrep -E 'sudo: john ' /var/log/auth.log.1.gz - 实时监控:
tail -f /var/log/auth.log | grep --line-buffered -E 'sudo: john '











