You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用auditd收集Linux服务器管理员sudo命令日志(Ubuntu20.04)

解决方案:Ubuntu 20.04 记录 sudo 执行的命令日志

方案一:优化 auditd 配置(精准过滤冗余日志)

1. 修改 auditd 规则

编辑 /etc/audit/rules.d/audit.rules,替换原有的 rootcmd 规则为以下内容(仅记录普通用户通过 sudo 执行的 root 命令,排除 root 直接登录及系统进程的操作):

# 仅记录普通用户通过sudo执行的root命令(auid为用户登录ID,非0表示普通用户)
-a always,exit -F arch=b64 -F euid=0 -F auid!=0 -S execve -k sudo_cmd
-a always,exit -F arch=b32 -F euid=0 -F auid!=0 -S execve -k sudo_cmd

重启 auditd 服务使规则生效:

sudo systemctl restart auditd

2. 格式化输出日志

使用以下命令实时监控或查询日志,输出「TIME - COMMAND - USER」格式:

实时监控日志

tail -f /var/log/audit/audit.log | awk '
/sudo_cmd/ {
    if($1 ~ /type=SYSCALL/) {
        time=$2" "$3
        for(i=NF; i>0; i--) {
            if($i ~ /auid=/) {
                user=substr($i, 5)
                break
            }
        }
    }
    if($1 ~ /type=EXECVE/) {
        cmd=""
        for(i=10; i<=NF; i++) {
            cmd=cmd" "$i
        }
        sub(/^ /, "", cmd)
        printf "%s - %s - %s\n", time, cmd, user
    }
}
'

查询历史日志

ausearch -k sudo_cmd -i --raw | awk '
BEGIN { time=""; cmd=""; user="" }
/time->/ { time=substr($0, 8) }
/auid->/ { user=$2 }
/exe->/ { cmd=$2; sub(/^"|"$/, "", cmd) }
/comm->/ { if(cmd != "") cmd=cmd" "$2; sub(/^"|"$/, "", cmd) }
END { printf "%s - %s - %s\n", time, cmd, user }
'

方案二:直接使用 sudo 内置日志(更简洁,无冗余)

sudo 默认会将执行记录写入 /var/log/auth.log,无需额外工具即可实现需求:

1. 格式化输出默认日志

运行以下命令提取并格式化日志:

awk '/sudo: .*COMMAND=/ {
    time_str=$1" "$2" "$3
    username=$4
    sub(/:/, "", username)
    command=substr($0, index($0, "COMMAND=")+8)
    printf "%s - %s - %s\n", time_str, command, username
}' /var/log/auth.log

2. 配置 sudo 日志到单独文件(可选)

使用 visudo 编辑 /etc/sudoers,添加以下配置将 sudo 命令日志写入独立文件:

# 将sudo命令日志写入单独文件
Defaults logfile="/var/log/sudo_commands.log"
# 可选:记录命令的输入输出(如需审计操作细节)
# Defaults log_input, log_output

之后直接格式化该独立日志文件:

awk '/COMMAND=/ {
    time_str=$1" "$2" "$3
    username=$4
    sub(/:/, "", username)
    command=substr($0, index($0, "COMMAND=")+8)
    printf "%s - %s - %s\n", time_str, command, username
}' /var/log/sudo_commands.log

内容的提问来源于stack exchange,提问作者ForgotName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:57:13