温馨提示×

Ubuntu日志中如何追踪用户行为

小樊
45
2025-11-01 22:52:29
栏目: 智能运维

Ubuntu日志中追踪用户行为的方法

1. 查看用户登录历史

  • who命令:实时显示当前登录系统的用户信息,包括用户名、登录终端(如pts/3)、登录时间及IP地址(若为远程登录)。
    示例:ubuntu@ubuntu-xz:~$ who 输出类似 ubuntu-xz pts/3 2020-03-25 08:22 (100.100.89.82)
  • last命令:读取/var/log/wtmp文件,列出所有用户的最近登录/登出记录,包含用户名、登录终端、IP地址、登录时间及状态(如still logged in)。
    示例:last 输出类似 ubuntu-xz pts/1 :0 Thu May 21 12:54 still logged in
  • lastlog命令:读取/var/log/btmp文件,显示所有用户的最后登录时间(包括从未登录过的用户)。若用户从未登录,会标注**Never logged in**
    示例:lastlog 输出类似 Username Port From Latest,其中Latest列表示最后登录时间。

2. 分析认证日志(核心登录行为)

  • 日志文件路径:Ubuntu的认证日志主要存储在/var/log/auth.log(Debian/Ubuntu系),记录用户认证相关的事件(如登录、登出、密码修改、sudo使用等)。
  • 常用过滤命令
    • 查看成功登录记录sudo grep "session opened" /var/log/auth.log(匹配pam_unix模块的session opened记录)。
    • 查看失败登录尝试sudo grep "invalid user" /var/log/auth.log(匹配无效用户名的登录尝试)或 sudo grep "authentication failure" /var/log/auth.log(匹配密码错误的尝试)。
    • 查看用户登出记录sudo grep "session closed" /var/log/auth.log(匹配pam_unix模块的session closed记录)。
      示例:sudo cat /var/log/auth.log | grep "session opened" 可提取所有用户登录成功的记录。

3. 追踪用户操作记录(命令历史)

  • 单个用户操作历史
    • 每个用户的命令历史默认存储在~/.bash_history文件中(如/home/ubuntu/.bash_history),可通过catless命令查看。
    • 显示命令执行时间:默认情况下,history命令不显示执行时间。需修改/etc/profile(全局)或用户级配置文件(如~/.bashrc),添加以下内容启用时间戳:
      HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S: `whoami` : "
      export HISTTIMEFORMAT
      
      执行source /etc/profile使配置生效,之后history命令会显示每条命令的执行时间及操作用户。
  • 集中管理用户操作日志
    为避免用户删除本地.bash_history文件,可将所有用户的命令历史集中存储到/var/log/history目录。编辑/etc/profile,添加以下内容:
    USER=`whoami`
    USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
    if [ "$USER_IP" = "" ]; then
      USER_IP=`hostname`
    fi
    if [ ! -d /var/log/history ]; then
      mkdir /var/log/history
      chmod 777 /var/log/history
    fi
    if [ ! -d /var/log/history/${LOGNAME} ]; then
      mkdir /var/log/history/${LOGNAME}
      chmod 300 /var/log/history/${LOGNAME}
    fi
    export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$(date +%Y%m%d_%H:%M:%S)"
    chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
    
    执行source /etc/profile后,每个用户的命令历史会以用户名@IP_时间戳的格式存储在/var/log/history目录下,确保日志完整性。

4. 使用auditd进行深度审计(系统调用与文件访问)

  • 安装与启动auditdauditd是Linux内核的审计工具,可记录系统调用、文件访问、用户权限变更等详细事件。
    安装:sudo apt update && sudo apt install auditd audispd-plugins
    启动并启用:sudo systemctl start auditd && sudo systemctl enable auditd
  • 配置审计规则
    编辑/etc/audit/rules.d/audit.rules(Ubuntu 18.04及以上版本),添加以下常见规则:
    • 监控进程执行execve系统调用):-a exit,always -F arch=b32 -S execve -S execveat -k executed-process(32位);-a exit,always -F arch=b64 -S execve -S execveat -k executed-process(64位)。
    • 监控用户登录/登出-w /var/log/auth.log -p wa -k auth_log(监控认证日志文件的写入/修改)。
    • 监控敏感文件访问(如/etc/shadow):-w /etc/shadow -p rwxa -k shadow_access(监控读/写/执行/属性变更)。
      加载规则:sudo auditctl -R /etc/audit/rules.d/audit.rules
  • 查看与分析审计日志
    • 查看实时审计事件sudo ausearch -m avc -ts recent-m avc表示监控访问控制事件,-ts recent表示最近10分钟内的事件)。
    • 查看详细事件信息sudo ausearch -m avc -ts recent -i-i表示将事件ID转换为可读信息,如进程名、用户)。
    • 生成审计报告sudo aureport -m selinux(生成SELinux相关事件的报告);sudo aureport -k(按关键字过滤事件)。

注意事项

  • 日志轮转:系统会自动轮转日志文件(如auth.log会压缩为auth.log.1.gz),可通过logrotate工具调整轮转策略(如保留天数、文件大小),避免日志占满磁盘。
  • 权限保护:审计日志(如/var/log/audit/audit.log)和用户操作日志(如/var/log/history)需设置严格权限(如chmod 600),防止未经授权的修改或删除。
  • 实时监控:对于关键系统,可将审计日志实时传输到SIEM工具(如ELK、Splunk),实现集中化监控与告警。

0