Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何配置 Linux 审计规则以跟踪我的 EC2 Linux 实例上的用户活动、文件更改和目录更改?
我想跟踪我的 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例上的用户活动、文件更改和目录更改。
简述
审计进程守护程序(auditd)是 Linux 审计系统的用户空间组件。使用 auditd 跟踪访问或修改文件和目录的用户或应用程序。您还可以使用 auditd 来确定哪个用户运行了特定的命令。
解决方案
要使用 auditd 跟踪活动,请完成以下步骤:
-
以 ec2-user/ubuntu/根用户身份通过 SSH 连接到您的 EC2 实例。将 ubuntu 替换为您的亚马逊机器映像(AMI)的用户名。
-
安装审计程序包:
RHEL 和 CentOS
# sudo yum install auditSUSE Linux
# sudo zypper install auditUbuntu
# sudo apt install auditd -
运行 auditctl 命令来创建审计规则。审计规则定义存储在 /etc/audit/audit.rules 文件中。自定义审计规则定义存储在 /etc/audit/rules.d/custom.conf 文件中。这些定义具有持久性。您也可以在系统运行时创建和应用规则。
规则示例
跟踪访问或修改特定文件或目录的用户或应用程序:
# sudo auditctl -a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F auid\>=500 -F auid\!=-1 -F dir=/root/test/ -F key=delete确定哪个用户运行了某个特定的命令。在以下示例中,这个命令为 sudo:
# sudo auditctl -w /bin/sudo -p rwxa -k sudo此示例使用以下语法列表:
-a -添加新规则。
-w -添加一个对特定路径中某个文件系统对象的监视,例如 /etc/shadow。
-p -为某个文件系统设置权限筛选条件。
-k -在审计规则上设置一个筛选键。该筛选键唯一标识规则生成的审计记录。
-F -使用此字段指定其他选项,例如 architecture、PID、GID、auid 等。
-S -使用此字段进行系统调用。这是一个名字或数字。有关语法和开关的完整列表,请参阅 die.net 的 Linux man 手册中的 auditctl(8) 和 audit.rules(7)。
**注意:**要确保您的规则在系统重启后仍然有效,请编辑 audit.rules,然后将以下规则添加到文件中:
RHEL 6、CentOS 6 或 Amazon Linux 1:
#sudo vi /etc/audit/audit.rules -a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F auid>=500 -F auid!=-1 -F dir=/root/test/ -F key=delete -w /bin/sudo -p rwxa -k sudoRHEL 7、CentOS 7、Amazon Linux 2 或 Amazon Linux 2023:
# sudo vi /etc/audit/rules.d/audit.rules -a always,exit -F arch=b64 -S rename,rmdir,unlink,unlinkat,renameat -F auid>=500 -F auid!=-1 -F dir=/root/test/ -F key=delete -w /bin/sudo -p rwxa -k sudo -
重新启动 auditd 服务。将 auditd 服务设置为在系统启动时运行:
# sudo chkconfig auditd on # sudo service auditd start # sudo service auditd stop # sudo service auditd restart**注意:**在 CentOS 和 Red Hat Linux(RHEL)7 中重启 auditd 服务时,最佳实践是使用 service 命令而不是 systemctl 命令。systemctl 命令可能会导致错误。
-
要读取审计日志,请运行 ausearch 命令。
审计日志示例
在以下示例中,用户 ec2-user(uid = ec2-user)删除了 /root/test/example.txt 文件:
# sudo ausearch -i -k delete type=PROCTITLE msg=audit(04/04/20 19:41:51.231:3303) : proctitle=rm -rf /root/test/example.txt type=PATH msg=audit(04/04/20 19:41:51.231:3303) : item=1 name=/root/test/example.txt inode=16777349 dev=ca:01 mode=file,777 ouid=root ogid=root rdev=00:00 nametype=DELETE cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PATH msg=audit(04/04/20 19:41:51.231:3303) : item=0 name=/tmp/test/ inode=16777328 dev=ca:01 mode=dir,777 ouid=root ogid=root rdev=00:00 nametype=PARENT cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=CWD msg=audit(04/04/20 19:41:51.231:3303) : cwd=/home/ec2-user type=SYSCALL msg=audit(04/04/20 19:41:51.231:3303) : arch=x86_64 syscall=unlinkat success=yes exit=0 a0=0xffffff9c a1=0xc5f290 a2=0x0 a3=0x165 items=2 ppid=3645 pid=933 auid=ec2-user uid=ec2-user gid=ec2-user euid=ec2-user suid=ec2-user fsuid=ec2-user egid=ec2-user sgid=ec2-user fsgid=ec2-user tty=pts0 ses=1 comm=rm exe=/usr/bin/rm key=delete在以下示例中,用户 ec2-user(uid= 1000)以 sudo 权限运行命令 sudo su -:
# sudo ausearch -k sudo time->Mon Apr 6 18:33:26 2020 type=PROCTITLE msg=audit(1586198006.631:2673): proctitle=7375646F007375002D type=PATH msg=audit(1586198006.631:2673): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=5605 dev=103:05 mode=0100755 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0 type=PATH msg=audit(1586198006.631:2673): item=0 name="/usr/bin/sudo" inode=12800710 dev=103:05 mode=0104111 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0 type=CWD msg=audit(1586198006.631:2673): cwd="/home/ec2-user" type=EXECVE msg=audit(1586198006.631:2673): argc=3 a0="sudo" a1="su" a2="-" type=SYSCALL msg=audit(1586198006.631:2673): arch=c000003e syscall=59 success=yes exit=0 a0=e8cce0 a1=e8c7b0 a2=e61720 a3=7ffde58ec0a0 items=2 ppid=2658 pid=3726 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=4 comm="sudo" exe="/usr/bin/sudo" key="script"
