服务器记录所有用户docker操作,监控删除容器/镜像的人

news/2024/11/29 0:30:42/

文章目录

  • 使用场景
  • 安装auditd
  • 添加docker审计规则
  • 设置监控日志大小与定期清除
  • 查询 Docker 操作日志
    • 查看所有用户,所有操作日志
    • 查看特定用户的 Docker 操作
    • 查看所有用户删除容器/镜像日志
    • 过滤特定时间范围内日志

使用场景

多人使用的服务器,使用的docker 容器或镜像被其他人删除,需要找到删除的人

查找方法:安装使用auditd工具,并配置规则记录所有用户的docker操作

auditd 是 Linux 审计守护进程(Audit Daemon),用于记录系统活动和安全事件。它是 Linux 内核审计子系统的一部分,帮助系统管理员跟踪关键系统事件、访问控制、用户活动等,从而增强系统安全性和合规性。

主要功能

  • 事件记录:记录系统调用(如文件访问、网络操作)以及用户、进程和权限相关的活动。
  • 安全审计规则:系统管理员可以定义规则,指定要审计的事件,比如监控特定文件或目录的访问。
  • 详细的审计日志:审计事件被存储在 /var/log/audit/audit.log 文件中,提供详细的信息,如时间戳、用户、进程ID、操作类型、结果(成功/失败)等。
  • 实时监控:可以使用工具(如 ausearch 或 auditctl)实时监控和查询审计日志。
  • 用户管理审计:监控用户登录、登出、权限更改等敏感操作。
  • 文件完整性监控:结合 auditd 和 audit rules,可以监控重要文件的访问、修改或删除操作。

相关工具

  • auditctl:管理和配置审计规则。
  • ausearch:搜索审计日志中的特定事件。
  • aureport:生成审计报告的工具。
  • aulast:显示用户登录和登出信息。
  • autrace:用于跟踪特定命令的审计事件。

常见用途

  • 合规性审计
  • 确保系统符合安全标准,如 PCI DSS、HIPAA 等。
  • 入侵检测
  • 监控可疑活动,如未经授权的访问或权限提升。
  • 系统故障排除
  • 调查安全事故或操作系统问题

配置文件

  • 主配置文件:/etc/audit/auditd.conf
  • 规则配置:/etc/audit/rules.d/

安装auditd

sudo apt-get install auditd
sudo systemctl enable auditd
sudo systemctl start auditd

docker_41">添加docker审计规则

Docker 的常用二进制文件路径包括:

  • Docker CLI:/usr/bin/docker
  • Docker 服务:/usr/bin/dockerd

编辑规则文件

sudo vi /etc/audit/rules.d/audit.rules

文件最后添加以下内容:

# 监控 Docker 命令执行
-a always,exit -F path=/usr/bin/docker -F perm=x -F key=docker_actions# 监控 Docker 配置文件
-w /etc/docker/ -p wa -k docker_config

监控 Docker 命令执行解释

  • -a always,exit:在系统调用退出时触发规则。
  • -F path=/usr/bin/docker:指定要监控的路径。
  • -F perm=x:监控执行权限(执行 Docker 命令)。
  • -F key=docker_actions:为此规则设置一个键值(方便日志查询)。

监控 Docker 配置文件解释

  • -w:监控指定文件或目录。
  • -p wa:监控写入和属性更改。
  • -k docker_config:设置键值。

重新加载审计规则

sudo augenrules --load

设置监控日志大小与定期清除

避免日志记录大量操作,文件大小过大,可以设置日志轮替(Log Rotation)
默认日志存储位置:/var/log/audit/audit.log
编辑配置文件

sudo vi /etc/audit/auditd.conf

查看并修改以下配置:

max_log_file = 100          # 每个日志文件最大100MB
num_logs = 5                # 保留5个旧日志文件
max_log_file_action = ROTATE  # 超过大小时轮替

效果

  • 当日志文件达到 100MB 时,auditd 会创建一个新的日志文件。
  • 系统最多保留 5 个旧日志文件(audit.log.1, audit.log.2, …),超过的将被删除。

重新加载配置

sudo service auditd reload
# 或者
sudo systemctl restart auditd

查询 Docker 操作日志

查看所有用户,所有操作日志

sudo ausearch -k docker_actions

输出结果中的单个样例如下

----
time->Wed Nov 01 18:59:24 2024  # 命令执行时间
type=PROCTITLE msg=audit(1732695555.363:1213): proctitle=646F636B6572007073002D61
type=PATH msg=audit(1732695555.363:1213): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=217841670 dev=08:12 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1732695555.363:1213): item=0 name="/usr/bin/docker" inode=79708287 dev=08:12 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1732695555.363:1213): cwd="/home/haha/test"   # 在哪个目录执行的命令
type=EXECVE msg=audit(1732695555.363:1213): argc=3 a0="docker" a1="ps" a2="-a"   # 执行的具体命令
# 执行命令的用户
type=SYSCALL msg=audit(1732695555.363:1213): arch=c000003e syscall=59 success=yes exit=0 a0=56353bdf70c0 a1=56353bec7ba0 a2=56353be1f680 a3=8 items=2 ppid=78046 pid=78448 auid=1014 uid=1014 gid=1014 euid=1014 suid=1014 fsuid=1014 egid=1014 sgid=1014 fsgid=1014 tty=pts24 ses=15298 comm="docker" exe="/usr/bin/docker" key="docker_actions"
----

在 audit.log 文件中,每条审计记录都会包含用户相关信息,比如:

  • uid:用户ID
  • auid:审计用户ID(通常是登录用户的ID,即使提权后也保持不变)
  • euid:有效用户ID(通常是执行操作时的用户)
  • ses:会话ID

比如在上面的输出中uid=1014,即为用于ID。为了知道该用户ID对应的用户名,使用如下命令即可

cat /etc/group | grep 1014

查看特定用户的 Docker 操作

sudo ausearch -k docker_actions -ui <用户ID>

查看所有用户删除容器/镜像日志

sudo ausearch -k docker_actions | grep -E 'a1="rm"|a1="rmi"'  -A 1

命令解释:

  • -E ‘docker.*(rm|rmi)’:正则表达式,匹配包含 docker 和 rm 或 rmi 的行。
  • -A 1:(可选参数)表示包括匹配行和紧接的下一行。由于检索到的日志包含大量内容,操作用户id出现在匹配行的下一行。因此只需要显示一行

过滤特定时间范围内日志

sudo ausearch -k docker_actions -ts yesterday -te now

http://www.ppmy.cn/news/1550764.html

相关文章

神经网络的数学——一个完整的例子

神经网络是一种人工智能方法&#xff0c;它教导计算机以类似于人脑的方式处理数据。神经网络通过输入多个数据实例、预测输出、找出实际答案与机器答案之间的误差&#xff0c;然后微调权重以减少此误差来进行学习。 虽然神经网络看起来非常复杂&#xff0c;但它实际上是线性代数…

我们来学mysql -- EXPLAIN之ref(原理篇)

EXPLAIN之ref 题记**ref** 题记 书接上文《 EXPLAIN之type》2024美国大选已定&#xff0c;川普剑登上铁王座&#xff0c;在此过程中出谋划策的幕僚很重要&#xff0c;是他们决定了最终的执行计划在《查询成本之索引选择》中提到&#xff0c;explain的输出&#xff0c;就是优化…

Linux系统编程学习 NO.12——进程控制、shell的模拟实现

进程创建 在已学习的知识体系下&#xff0c;在Linux系统中创建一个进程可以通过./程序名称 创建并运行我们自己写的可执行程序。以及使用fork()函数在代码中创建一个子进程。 而fork()函数的使用上篇文章已有介绍&#xff0c;这里不赘述。简单复习一下fork()函数具体做了什么…

设置jenkins时区记录

System.setProperty(org.apache.commons.jelly.tags.fmt.timeZone, Asia/Shanghai)

论文笔记 网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…

k8s网络服务

k8s 中向外界提供服务的几种方法port-forward、NodePort&#xff0c;以及 更加常用的提供服务的资源ingress。 1 kubectl port-forward service/redis 6379:6379 现在k8s中有一个pod运行在6379&#xff0c;本机访问映射到6379上&#xff0c;它可以针对部署&#xff0c;服务&…

设计模式之 中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在通过引入一个中介者对象来降低多个对象之间的耦合度&#xff0c;从而促进对象间的通信和协调。中介者模式的核心思想是“将对象之间的直接交互移到一个中介者对象中”&#xff0c;让中…

AI在线免费视频工具4:AI视频编辑ai-video-composer

1、ai-video-composer 使用自然语言从您的资产组成新的视频。添加视频、图像和音频资源&#xff0c;让 Qwen 2.5-Coder 为您生成一个新的视频(使用 FFMPEG) https://huggingface.co/spaces/huggingface-projects/ai-video-composer