Я пытался скрыть папку /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
?