searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

文件数据丢失问题排查

2025-06-12 09:00:45
5
0

问题描述

用户发现录音数据文件丢失,但是查看audit审计日志没有相关文件删除的记录。用户需要排查文件是怎么被删除的。

问题分析

采用auditctl -l 查看审计规则的配置,确实对录音文件目录 /home/data/crm 添加了监控,对该目录的写入、属性变更都会记录相应日志。
image.png

采用 ausearch -i --ts "2025-04-25 00:00:00" | grep -i delete 获取删除的日志,发现无对应的审计日志。

crontab -l 有定时任务的配置,但都与删除是无关的。

从4月30日起,用户反馈说每天凌晨2点2分左右,录音文件目录大小都会变小。目录里没有任何压缩文件,判断文件在该时刻点被删除了。

建议用户在凌晨2点开启top监控,监控30分钟,监控脚本如下:

#!/bin/bash

OUTPUT\_FILE="top\_data.log"
 DURATION=180
 echo > OUTPUT\_FILE

end\_time=**(( **(date +%s) + DURATION ))

# 循环记录top数据,直到达到指定时长

while [ **(date +%s) -lt **end\_time ]; do
     date >> \$OUTPUT\_FILE
     top -b -n 1 >> \$OUTPUT\_FILE
     sleep 1
 done

crontab 设置如下:

2 \* \* \* \* /root/monitor.sh &

发现凌晨2点2分左右,服务器上的nfsd进程非常忙碌。
通过mount命令查看到该录音目录被nfs共享给其他客户端10.10.1.41。

image.png

进一步排查客户端发现有凌晨2点清理过期录音文件的脚本。

[root@ecs-umjp2hbx task]# crontab -l
 0 2 \* \* \* /home/iflytek/znzj/source/clean\_wav.sh
 0 1 \* \* \* /home/iflytek/znzj/source/clean\_log.sh
 0 3 \* \* \* /home/iflytek/share/qingli.sh
 0 5 \* \* \* /home/iflytek/znzj/epc-1094/epcclearlog.sh
 [root@ecs-umjp2hbx task]# more /home/iflytek/znzj/source/clean\_wav.sh
 #!/bin/bash

TARGET\_DIR="/home/iflytek/znzj/source"
 find "\$TARGET\_DIR" -name "\*.wav" -type f -mtime +7 -exec rm -f {} ;

因此录音文件删除原因已查明。

为什么删除没有审计日志呢?

审计日志记录一般是通过syscall返回时记录的:

do_syscall_64
	syscall_exit_to_user_mode
		syscall_exit_work
			__audit_syscall_exit
				audit_log_exit
					audit_log_start

或是配置的一些监控事件,通过用户态命令触发,记录审计日志:(如 用户登录/登出 ssh, 特权命令执行 sudo 等)

__sys_sendto
	sock_sendmsg
		netlink_sendmsg
			netlink_unicast
				audit_receive
					audit_receive_msg
						audit_log_start

从上面可以看出,nfs client端删除文件是不支持审计的。

为什么nfs client端删除文件不支持审计?

  1. 技术架构限制:NFS 协议与内核审计的交互方式

(1) NFS 服务端处理的是 RPC 请求,而非本地系统调用

  • NFS 客户端 通过 RPC(远程过程调用) 向服务端发送文件操作请求(如 REMOVE​、CREATE​),而不是直接触发服务端的系统调用(如 unlink()​、open()​)。
  • audit 子系统 的监控机制主要基于:
    • 系统调用(syscall)(如 -S open​、-S unlink​)。
    • 文件路径监控(-w /path​)(依赖内核的 inotify​ 或 fanotify​)。
  • NFS 服务端 处理的是 RPC 层的操作,不会在本地触发对应的 syscall​,因此 audit 无法捕获。

(2) NFS 服务端的内核实现不挂钩 audit 机制

  • NFS 服务端(nfsd​)在内核中的实现是独立的,它:
    • 接收 RPC 请求 → 调用 VFS(虚拟文件系统)接口 → 修改文件系统。
    • 不会经过syscall​ 路径,因此 audit 无法拦截。
  1. 性能与扩展性考量

(1) NFS 的高性能需求

  • NFS 设计目标是 低延迟、高吞吐量,如果每个 NFS 操作都要经过 audit 子系统:
    • 额外开销:每个 RPC 请求都需要审计日志记录,影响 I/O 性能。
    • 日志爆炸:NFS 通常用于共享存储,频繁操作会导致 audit 日志量剧增(如 -w /shared​ 会记录所有读写)。

(2) 审计日志的适用场景

  • audit 主要用于 安全合规(如 sudo​、sshd​、敏感文件访问),而不是 存储协议审计。
  • NFS 的审计更适合由 网络层日志(如 tcpdump​)或 专用存储审计工具(如 CIFS/samba​ 的完整日志)实现。
  1. 安全模型与责任边界

(1) 客户端 vs. 服务端的审计责任

(2) 分布式系统的复杂性

audit 主要用于 安全合规(如 sudo​、sshd​、敏感文件访问),而不是 存储协议审计。

NFS 的审计更适合由 网络层日志(如 tcpdump​)或 专用存储审计工具(如 CIFS/samba​ 的完整日志)实现。

NFS 服务端 只负责提供共享存储,不感知客户端的操作细节(如哪个用户执行 rm​)。

真正的操作者 是 NFS 客户端,因此:

  • 客户端应该记录自己的操作(如 auditctl -w /mnt/nfs_share​)。
  • 服务端只需保证共享目录的访问控制(如 /etc/exports​ 的 rw​/ro​ 权限)。

如果 NFS 服务端记录所有客户端操作:

  • 日志归属问题:如何区分不同客户端的相同操作?(需额外记录客户端 IP、UID 等)
  • 信任链问题:客户端可能伪造信息,服务端无法完全信任客户端提交的审计数据。

那么nfs client端删除文件如何监控呢?

只需要在nfs client端添加对应的审计即可。

问题结果

  1. 用户发现录音数据文件丢失,实际上是服务器将录音文件目录挂载到客户端,客户端上有定期清理的脚本,通过nfs协议删除过期的文件。
  2. 由于服务端audit不支持对nfs client端删除文件进行审计,因此如果要监控client端的行为,需要在对应的client端添加审计即可。
0条评论
0 / 1000
c****9
2文章数
0粉丝数
c****9
2 文章 | 0 粉丝
c****9
2文章数
0粉丝数
c****9
2 文章 | 0 粉丝
原创

文件数据丢失问题排查

2025-06-12 09:00:45
5
0

问题描述

用户发现录音数据文件丢失,但是查看audit审计日志没有相关文件删除的记录。用户需要排查文件是怎么被删除的。

问题分析

采用auditctl -l 查看审计规则的配置,确实对录音文件目录 /home/data/crm 添加了监控,对该目录的写入、属性变更都会记录相应日志。
image.png

采用 ausearch -i --ts "2025-04-25 00:00:00" | grep -i delete 获取删除的日志,发现无对应的审计日志。

crontab -l 有定时任务的配置,但都与删除是无关的。

从4月30日起,用户反馈说每天凌晨2点2分左右,录音文件目录大小都会变小。目录里没有任何压缩文件,判断文件在该时刻点被删除了。

建议用户在凌晨2点开启top监控,监控30分钟,监控脚本如下:

#!/bin/bash

OUTPUT\_FILE="top\_data.log"
 DURATION=180
 echo > OUTPUT\_FILE

end\_time=**(( **(date +%s) + DURATION ))

# 循环记录top数据,直到达到指定时长

while [ **(date +%s) -lt **end\_time ]; do
     date >> \$OUTPUT\_FILE
     top -b -n 1 >> \$OUTPUT\_FILE
     sleep 1
 done

crontab 设置如下:

2 \* \* \* \* /root/monitor.sh &

发现凌晨2点2分左右,服务器上的nfsd进程非常忙碌。
通过mount命令查看到该录音目录被nfs共享给其他客户端10.10.1.41。

image.png

进一步排查客户端发现有凌晨2点清理过期录音文件的脚本。

[root@ecs-umjp2hbx task]# crontab -l
 0 2 \* \* \* /home/iflytek/znzj/source/clean\_wav.sh
 0 1 \* \* \* /home/iflytek/znzj/source/clean\_log.sh
 0 3 \* \* \* /home/iflytek/share/qingli.sh
 0 5 \* \* \* /home/iflytek/znzj/epc-1094/epcclearlog.sh
 [root@ecs-umjp2hbx task]# more /home/iflytek/znzj/source/clean\_wav.sh
 #!/bin/bash

TARGET\_DIR="/home/iflytek/znzj/source"
 find "\$TARGET\_DIR" -name "\*.wav" -type f -mtime +7 -exec rm -f {} ;

因此录音文件删除原因已查明。

为什么删除没有审计日志呢?

审计日志记录一般是通过syscall返回时记录的:

do_syscall_64
	syscall_exit_to_user_mode
		syscall_exit_work
			__audit_syscall_exit
				audit_log_exit
					audit_log_start

或是配置的一些监控事件,通过用户态命令触发,记录审计日志:(如 用户登录/登出 ssh, 特权命令执行 sudo 等)

__sys_sendto
	sock_sendmsg
		netlink_sendmsg
			netlink_unicast
				audit_receive
					audit_receive_msg
						audit_log_start

从上面可以看出,nfs client端删除文件是不支持审计的。

为什么nfs client端删除文件不支持审计?

  1. 技术架构限制:NFS 协议与内核审计的交互方式

(1) NFS 服务端处理的是 RPC 请求,而非本地系统调用

  • NFS 客户端 通过 RPC(远程过程调用) 向服务端发送文件操作请求(如 REMOVE​、CREATE​),而不是直接触发服务端的系统调用(如 unlink()​、open()​)。
  • audit 子系统 的监控机制主要基于:
    • 系统调用(syscall)(如 -S open​、-S unlink​)。
    • 文件路径监控(-w /path​)(依赖内核的 inotify​ 或 fanotify​)。
  • NFS 服务端 处理的是 RPC 层的操作,不会在本地触发对应的 syscall​,因此 audit 无法捕获。

(2) NFS 服务端的内核实现不挂钩 audit 机制

  • NFS 服务端(nfsd​)在内核中的实现是独立的,它:
    • 接收 RPC 请求 → 调用 VFS(虚拟文件系统)接口 → 修改文件系统。
    • 不会经过syscall​ 路径,因此 audit 无法拦截。
  1. 性能与扩展性考量

(1) NFS 的高性能需求

  • NFS 设计目标是 低延迟、高吞吐量,如果每个 NFS 操作都要经过 audit 子系统:
    • 额外开销:每个 RPC 请求都需要审计日志记录,影响 I/O 性能。
    • 日志爆炸:NFS 通常用于共享存储,频繁操作会导致 audit 日志量剧增(如 -w /shared​ 会记录所有读写)。

(2) 审计日志的适用场景

  • audit 主要用于 安全合规(如 sudo​、sshd​、敏感文件访问),而不是 存储协议审计。
  • NFS 的审计更适合由 网络层日志(如 tcpdump​)或 专用存储审计工具(如 CIFS/samba​ 的完整日志)实现。
  1. 安全模型与责任边界

(1) 客户端 vs. 服务端的审计责任

(2) 分布式系统的复杂性

audit 主要用于 安全合规(如 sudo​、sshd​、敏感文件访问),而不是 存储协议审计。

NFS 的审计更适合由 网络层日志(如 tcpdump​)或 专用存储审计工具(如 CIFS/samba​ 的完整日志)实现。

NFS 服务端 只负责提供共享存储,不感知客户端的操作细节(如哪个用户执行 rm​)。

真正的操作者 是 NFS 客户端,因此:

  • 客户端应该记录自己的操作(如 auditctl -w /mnt/nfs_share​)。
  • 服务端只需保证共享目录的访问控制(如 /etc/exports​ 的 rw​/ro​ 权限)。

如果 NFS 服务端记录所有客户端操作:

  • 日志归属问题:如何区分不同客户端的相同操作?(需额外记录客户端 IP、UID 等)
  • 信任链问题:客户端可能伪造信息,服务端无法完全信任客户端提交的审计数据。

那么nfs client端删除文件如何监控呢?

只需要在nfs client端添加对应的审计即可。

问题结果

  1. 用户发现录音数据文件丢失,实际上是服务器将录音文件目录挂载到客户端,客户端上有定期清理的脚本,通过nfs协议删除过期的文件。
  2. 由于服务端audit不支持对nfs client端删除文件进行审计,因此如果要监控client端的行为,需要在对应的client端添加审计即可。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0