linux中的文件访问控制

时间:2015-02-11 12:20:38

标签: c linux assembly module linux-kernel

我正在编写一个模块来控制文件访问。我现在正试图实施禁止文件打开。我已经尝试过内核模块系统开放过载:http://pastebin.com/JWKbpFYT 我也尝试过系统读取过载:http://pastebin.com/psK8vX41 第一个问题是我只能在控制台中限制对目标文件的访问(它没有在图形界面中工作,例如gedit)。 第二个没有工作,因为系统停止响应使用目标文件运行gedit。
如何在不使用SELinux的情况下禁止打开文件?

asmlinkage int custom_open(const char __user *file_name, int flags, mode_t mod)
{
   printk("hook: open(\"%s\")", file_name);
   if (!strcmp(file_name, "test"))
       return -1;
   return original_open(file_name, flags, mod);
}

struct file *fget(unsigned int fd)
{
 struct file *file;
 struct files_struct *files = current->files;

 rcu_read_lock();
 file = fcheck_files(files, fd);
 if (file) {
         /* File object ref couldn't be taken */
         if (file->f_mode & FMODE_PATH ||
             !atomic_long_inc_not_zero(&file->f_count))
                 file = NULL;
 }
 rcu_read_unlock();

 return file;

}

asmlinkage int custom_read(int fd, void *buf, size_t noct)
{
   struct file *filp = fget(fd);
   unsigned char f_name[DNAME_INLINE_LEN];
   strcpy(f_name,filp->f_path.dentry->d_name.name);
   if (!strcmp(f_name, "_ttt.c")){
        printk("hook1: read fd=(%d: -> %s)\n",fd,f_name);
        return -1;
 }
 return original_read(fd, buf, noct);
}

0 个答案:

没有答案