[英]Providing permissions for a root user in a kernel module
Linux Kernel 5.0.0-37
我正在编写一个函数来管理作为指向struct inode_operations
的函数指针提供的struct inode_operations
。 这是一个简化的存根实现:
#include <linux/cred.h>
int pfsw_permission(struct inode *ino, int op){
if(uid_eq(INIT_USER->uid, get_current_user()->uid)){
printk(KERN_INFO "Current user is root\n");
} else {
printk(KERN_INFO "Current user is not root\n");
}
if(op & (MAY_READ | MAY_WRITE)){
return 0;
}
return -EACCES;
}
编译包含此函数的内核模块并尝试加载它时, dmesg
显示以下错误:
Unknown symbol root_user (err -2)
我认为这是由于INIT_USER
宏来自include/linux/sched/user.h定义为
extern struct user_struct root_user;
#define INIT_USER (&root_user)
问题:为什么符号root_user
声明,但未定义? 如何正确使用INIT_USER
?
linux 内核似乎没有使用EXPORT_SYMBOL
导出root_user
; 因此您不能从模块中使用它。
查看其定义,我们可以看到uid
值设置为GLOBAL_ROOT_UID
。 这是一个在include/linux/uidgid.h
定义的宏,基本上只是 0 到kuid_t
的类型kuid_t
因此如果您只需要 UID,您可以只使用该宏。
所以 ...
为什么符号
root_user
声明,但未定义?
符号已定义。 虽然它没有导出,所以你不能从模块中使用它。
如何正确使用
INIT_USER
?
“不是”。 你不能使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.