读取proc文件中的权限被拒绝错误

时间:2014-01-07 16:41:51

标签: c linux module kernel permission-denied

我正在学习内核模块编程的教程。之后我编写了一些编程来在读取或写入/ proc文件时执行某些过程。我成功编译了模块并执行了insmod。但是,当我试图读取像

这样的proc文件时

cat / proc / procfile

它会抛出权限被拒绝错误。

我在我的代码中包含了模块权限功能,每次权限检查失败时都会发现这实际上会导致错误。

struct cred *proc_current; //to get the EUID for current task
static struct proc_dir_entry *our_proc_file;

static int module_permission(struct inode *inode, int op)
{
printk(KERN_INFO "permission is %d \n",op);
if(op==4||(op==2 && (proc_current->euid == 0)))
 return 0;
return -EACCES;
}

.....
//Init module
static int __init proc_init(void)
{
printk(KERN_INFO "Init module loaded \n");
our_proc_file=create_proc_entry(PROC_NAME, 0644, NULL);
if(our_proc_file == NULL)
{
remove_proc_entry(PROC_NAME,proc_root);
printk(KERN_INFO "Error in creating proc file \n");
return -ENOMEM;
}
our_proc_file->proc_fops=&fops;
our_proc_file->proc_iops=&iops;
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;
our_proc_file->uid=0;
our_proc_file->gid=0;
our_proc_file->size=80;
printk(KERN_INFO "proc file created in '/proc' \n");
return 0;
}

我尝试在init模块中将文件权限更改为777,但这对我没有帮助。 当我排除权限检查功能时,它可以工作。 还可以看一下权限函数,其中

printk(KERN_INFO "permission is %d \n",op);

始终打印36.这是什么原因以及如何在此处实际进行权限检查?

实际代码在这里 procfile.c

2 个答案:

答案 0 :(得分:0)

/ proc下的大多数文件都是root用户,如果你试图以普通用户的身份阅读它们,你会得到你引用的结果。

答案 1 :(得分:0)

替换
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;

使用
our_proc_file->mode = S_IRUGO | S_IWUGO | S_IXUGO;

参考:stat.h