系统调用表Hook无法完全实现对docker容器系统调用的劫持?
需求:
使用系统调用表Hook技术,监控宿主机以及docker容器里的所有特定格式文件的操作(此处因为某些原因,必须使用内核模块技术实现)
现状:
通过替换系统调用表达到hook文件的打开操作比如open和openat,其中会对 .sen 格式文件打印进程名、文件名和内容(文件内容不多)。现在已成功在我的linux系统上安装成功模块,在宿主机上成功拦截 .sen 格式文件,在docker里拉取ubuntu镜像,操作文件也可以被拦截,流程如下:
# 拉取镜像
docker pull ubuntu
# 启动容器
docker -it --name=myubuntu /bin/bash
# 拷贝 .sen 文件到容器 /home 里
...
# 容器里操作 .sen 文件
cat /home/a.sen
# 在宿主机查看dmesg,发现日志按照预想情况打印
[18132.846627] proc = cat,file = /home/a.sen
[18132.861014] Hello word!
问题:
当我再拉取一个java8的镜像,重复以上操作时,发现java8容器里对sen文件的操作,在宿主机的dmesg日志里没有打印,就好像没有进过系统调用一样,这是为什么,我尝试过如下参数启动java8容器,但都是无功而返,请问这是为什么?
--cgroupns=host --privileged --security-opt seccomp=unconfined