Skip to content
CXinsect edited this page Apr 27, 2019 · 1 revision

项目概况

背景

运行环境

  • deepin Linux x86_64 系统,理论上也兼容其他 x86_64 Linux 系统

条件与限制

  • 区分服务端与客户端,一般运行在不同的机器上
  • 正式的运行环境是N(N>=2)台计算机节点,通过有线或者无线互联,且运行服务端机器有客户端机器能直连的IP地址

业务功能需求

  • 监视和记录指定目录下文件的打开和关闭动作(文件系统事件),并上报服务端(文件路径、文件句柄、操作方式等)
  • 配置了指定的监视服务器情况下,可接受服务端下发的文件操作指令,包括不限于读取、删除、重写等
  • 当监视服务器关闭或者网络不通时,客户端拒绝任何操作,不允许任何人打开文件(拒绝监视目录的一切文件操作)
  • 监视服务器不存在或者未配置时,记录相关的操作到日志文件,监视服务器可以查询历史操作日志

业务功能需求补充说明

  • 监视和记录指定目录下文件是否被打开(open)和关闭(close)。首先想到的是利用监控函数inotify实现文件的状态的监控,否决的原因待议。
  • 当这些文件被open和close时,根据题目要求此两个函数必须阻塞以待服务器完成对终端文件的操作(修改和恢复)。至于阻塞的方式讨论决定暂利用HOOK技术劫持系统调用。
  • 文件操作指令由服务器下发,所以此时要考虑服务器针对请求方发来的文件描述符分析请求方的权限决定是否可以继续执行后续的操作方式。
  • 客户端与服务器之间维持一个心跳包维持连接,一旦连接超时或者断开则将客户端的权限全部清除。

相关知识点

  • hook技术原理以及cpu运行级别。
  • 系统调用过程(open的具体调用过程)。
  • 网络编程。
  • Linux文件系统大致了解。
  • 日志管理。
  • 保护低运行级别程序不被高运行级别的程序的抢占方法。
  • 待补充。

系统功能需求

  • 文件系统操作监听和操作审计的功能,概要/详细设计中需要评估用户态还是内核态实现
  • 客户端和服务端通信的功能,用于包括相关的事件上报以及执行服务端下发的指令等

系统功能需求补充说明

  • 用户态容易被绕过,需要相关措施来进行保护,代码量较多。
  • 内核态不必考虑被绕过的风险,但是实现难度较大,搞不好弄坏系统。 待补充

性能及运行需求

  • 7x24 小时运行,可随时重启,能自动恢复服务