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

Docker容器中Ubuntu 22.04环境下用户命令日志记录配置求助

Docker容器中Ubuntu 22.04环境下用户命令日志记录配置求助

兄弟,我之前在Docker里搞Ubuntu的命令日志也踩过不少坑,结合你的场景(后端调用Linux命令,要关联前端用户操作),给你分享几个可行的思路,你可以挨个试试:

先理清核心问题:你的命令执行场景

首先要注意,后端通过接口触发的命令,大多是直接调用exec类系统调用(比如用Python的subprocess、Go的os/Exec),没有经过用户shell会话。很多系统日志工具默认是监控shell交互的,这就是为啥你用rsyslog只捕获手动logger命令,却抓不到后端执行的命令的原因。


针对你试过的工具的解决方案

1. auditd启动失败的原因&解决

Docker容器默认是没有权限访问内核审计模块的,所以service auditd start启动不起来很正常。如果一定要用auditd,需要给容器加特权:

  • 启动容器时加上--privileged参数(注意:这会大幅提升容器权限,有安全风险,谨慎使用)
  • 或者挂载必要的内核目录:docker run -v /sys/kernel/security:/sys/kernel/security ...
    启动后,添加审计规则监控所有命令执行:
auditctl -a exit,always -F arch=b64 -S execve

之后所有执行的命令都会被记录到/var/log/audit/audit.log里,但这个日志只能看到命令,没法直接关联到前端用户,需要你自己在后端把用户ID和命令关联后再存一份。

2. rsyslog的正确配置方式

rsyslog在轻量Ubuntu镜像里可能没装systemd,所以service rsyslog start不生效,你可以直接启动rsyslog守护进程:

# 先确保安装了rsyslog
apt update && apt install rsyslog -y
# 直接启动前台进程
rsyslogd -n

如果要让后端执行的命令被记录到rsyslog,最可靠的方式是在后端代码里主动打日志:比如每次执行命令前,把「前端用户ID+命令内容+执行时间」通过logger命令或者语言自带的日志模块发送到rsyslog。举个Python例子:

import subprocess
import logging

# 配置日志发送到rsyslog
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger('backend-commands')

def run_command(user_id, cmd):
    # 先记录日志
    logger.info(f"User {user_id} executed command: {cmd}")
    # 执行命令
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    # 可以再记录执行结果
    logger.info(f"Command result for {user_id}: exit code {result.returncode}, stdout: {result.stdout}, stderr: {result.stderr}")

这样日志会直接进入rsyslog,管理员可以通过tail /var/log/syslog查看。

3. Snoopy的正确用法

Snoopy是个预加载库,能拦截所有exec调用,刚好适合你的场景。安装后,需要把它加载到后端进程里才能生效:

# 安装snoopy
apt install snoopy -y

然后启动后端服务时,设置LD_PRELOAD环境变量:

LD_PRELOAD=/usr/lib/libsnoopy.so python3 your_backend.py

这样后端进程调用的所有命令都会被Snoopy自动记录到syslog里,日志格式可以通过修改/etc/snoopy.ini调整,比如添加用户ID、进程ID等信息。不过要注意,有些程序可能和LD_PRELOAD有兼容性问题,得测试一下。


最推荐的方案:后端代码内置日志

其实系统级工具都有局限性,没法直接关联到前端用户。最可控的方式就是在后端代码里,把每个命令的触发用户、命令内容、执行时间、执行结果都写到专门的日志文件或者数据库里,然后做个简单的管理页面让 admins 查看。这种方式不仅灵活,还能直接定位到具体用户的操作,比系统日志实用得多。

备注:内容来源于stack exchange,提问作者Richard Kello

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:33:15