我试图/home/xytao/safe
通过将模块添加到该钩子的内核来隐藏文件夹stat
,但是当我返回-2
(ENOENT,没有这样的文件或目录)时,我仍然可以使用cd /home/xytao/safe
进入该文件夹。
这是我的模块
asmlinkage long fake_stat(const char __user *filename, struct __old_kernel_stat __user *statbuf)
{
if (!strncmp(filename,"/home/xytao/safe",16))
{
return -2;
}
return real_stat(filename,statbuf);
}
使用strace bash -c "cd /home/xytao/safe"
,我可以看到返回值已经改变,这意味着这个模块加载正常,但它仍然成功进入文件夹。这是 strace 输出的一部分:
...
stat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/xytao", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/home/xytao/safe", 0x7ffd5104fd40) = -1 ENOENT (No such file or directory)
chdir("/home/xytao/safe") = 0
brk(0x1e66000) = 0x1e66000
getcwd("/home/xytao/safe", 4096) = 17
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
exit_group(0) = ?
+++ exited with 0 +++
这是否意味着我也需要上钩chdir
?