应使用 sudo journalctl --since="24 hours ago" | grep -i "sudo\|COMMAND=" 精确检索过去24小时的sudo提权操作,因--since=yesterday按日历日而非实时滚动窗口计算,而"24 hours ago"严格倒推24小时,配合关键词过滤可准确定位提权日志。

要检索过去24小时内所有 sudo 提权操作的日志,直接使用 journalctl --since=yesterday 并不准确——它从“昨天同一时间”开始,而非严格“过去24小时”。更可靠的方式是结合时间范围与 sudo 相关的服务或日志字段。
确认 sudo 日志是否由 systemd-journald 记录
现代 Linux(如 Ubuntu 20.04+、CentOS 8+、Fedora)默认通过 sudo 的 log_output 或 syslog 配置将提权行为写入 journal。需先验证:
- 运行
sudo journalctl -u sudo --no-pager -n 5,看是否有输出(部分系统不以 unit 方式记录) - 更通用的方法是搜索日志内容:
sudo journalctl --no-pager | grep -i "sudo\|COMMAND=" | head -10 - 若看到类似
sudo: pam_unix(sudo:session): session opened for user root by (uid=1000)或COMMAND=/bin/bash,说明已记录在 journal 中
使用 --since="24 hours ago" 精确获取过去一天
--since=yesterday 是相对日期(如今天是 5月20日,则查 5月19日 00:00 起),而 --since="24 hours ago" 才是真正倒推24小时,推荐使用:
sudo journalctl --since="24 hours ago" | grep -i "sudo\|COMMAND="- 为提高可读性,加
--no-pager和-o short-iso:sudo journalctl -o short-iso --since="24 hours ago" | grep -i "sudo\|COMMAND=" - 若想过滤出完整日志条目(不止单行匹配),可用
awk或sed分段提取,但更稳妥的是用--grep(需 systemd v245+):sudo journalctl --since="24 hours ago" --grep="sudo\|COMMAND"
按服务单元或用户精准筛选(推荐组合用法)
很多系统将 sudo 行为归入 systemd-journal 或由 pam_systemd 触发,但最稳定的方式是匹配关键词并限定时间 + 优先级:
- 只看高优先级的认证/提权事件:
sudo journalctl --since="24 hours ago" -p info | grep -E "(sudo: |COMMAND=|session opened.*sudo)" - 排除干扰项(如普通 sudo -l 查询),聚焦实际执行命令:
sudo journalctl --since="24 hours ago" | grep -E "sudo:.*USER=|COMMAND=|session opened.*by.*sudo" - 若系统启用
sudo的log_output(见/etc/sudoers.d/),可能带sudo[PID]进程标识,可追加-o verbose查 PID 和 UID:sudo journalctl --since="24 hours ago" -o verbose | grep -A2 -B2 "sudo\|COMMAND="
保存结果并导出分析(可选实用技巧)
便于后续审计或排查,建议导出结构化文本:
- 导出为带时间戳的纯文本:
sudo journalctl --since="24 hours ago" -o short-iso | grep -i "sudo\|COMMAND=" > sudo-24h.log - 统计各用户提权次数:
sudo journalctl --since="24 hours ago" | grep "sudo:" | awk '{print $(NF-2)}' | sort | uniq -c | sort -nr(假设日志格式含调用者用户名) - 检查是否存在异常高频调用(如 1 小时内超 10 次):
sudo journalctl --since="1 hour ago" | grep "sudo:" | wc -l


















