这个问题和我之前的问题相关:记录管理员在生产服务器上运行的所有命令
公司政策规定管理员必须通过个人用户名登录服务器,然后运行sudo -i
以成为 root 用户。运行 后sudo -i
,sudo 将创建一个名为 的环境变量SUDO_USER
,其中包含原始用户的用户名。
是否可以将此auditd
变量包含在每条命令的日志中?或者功能等效。
这是当前的规则集auditd
:
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
# Log any command run on this system
#-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve
答案1
就像声明的那样这里:
使用
session required pam_loginuid.so
在所有登录相关的 PAM 配置文件(不是 su 和 sudo 的配置文件)中都将允许auditd
在字段中记录调用用户的 uid auid
。
您可以auditd
使用以下方式搜索 的日志以查找此 ID:
ausearch -ua <uid>
即使在冒充另一个帐户时,也会产生用户发出的所有命令。
答案2
令人高兴的是,您请求的信息已包含在日志中。您要查找的特定字段是aud
。来自的手册页auditctl
:
auid The original ID the user logged in with. Its an abbreviation of audit uid. Sometimes its referred to as loginuid. Either the user account text or number may be used.
举例来说,下面是我使用以下方法生成的很多条目:
- 添加规则:
-a always,exit -S sethostname -S setdomainname -k system-locale
- 使用我的用户帐户登录系统,然后通过发出以下命令启动 root shell
su -
- 执行命令:
hostname audit-test.home.private
类型 = SYSCALL msg = 审核(1358306046.744:260):arch = c000003e syscall = 170 成功 = 是退出 = 0 a0 = 2025010 a1 = 17 a2 = 7 a3 = 18 项目 = 0 ppid = 23922 pid = 26742 auid = 1000 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts4 ses = 16 comm =“hostname”exe =“/usr/bin/hostname”subj = unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key =“system-locale”
因此,虽然日志消息非常冗长,但我们可以清楚地看到auid=1000
在日志消息中清楚地看到它对应于我的用户帐户的 uid。
有关上述示例的更多详细信息以及 auditd 的简要说明,请查看此博客文章信息技术安全社区博主(我)富有想象力地命名为Auditd 简介。
fuero 提到的命令ausearch
是用于搜索这些相当详尽的日志并运行报告的一套应用程序的一部分。