C модуль ядра Linux подключает стат, чтобы скрыть каталог - PullRequest
0 голосов
/ 24 октября 2018

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

...