我正在编写一个模块来控制文件访问。我现在正试图实施禁止文件打开。我已经尝试过内核模块系统开放过载: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);
}