【问题标题】:How do I make my kernel module's sysfs entry be owned by a non-root user?如何让我的内核模块的 sysfs 条目归非 root 用户所有?
【发布时间】:2022-01-14 12:34:35
【问题描述】:

我有以下代码:

static struct kobj_attribute my_attribute =__ATTR(my_node, 0444, my_show_fn, my_store_fn);
...
        kobject_init(&my_module->kobj, &ktype_my_module);
        ret = kobject_add(&my_module->kobj, kernel_kobj, "%s", "my_module");
        ...
        ret = sysfs_create_file(&my_module->kobj, &my_attribute.attr);

这将创建一个/sys/kernel/my_module/my_node node,由具有 0444 权限的 root 拥有。

如何让非 root 用户在内核代码中拥有该节点?

【问题讨论】:

  • 您是否尝试在 sysfs_create_file 之后更改节点的所有权?
  • @Philippe 是的,这是可行的,但对于我的用例来说,最好在内核中设置它。

标签: linux kernel sysfs file-ownership


【解决方案1】:

sysfs 属性的所有者和组标识符由为其创建该属性的 kobject 确定。

具体来说,它是struct kobj_typeget_ownership 字段,它可能包含集合所有者和组标识符的回调。该字段具有以下签名:

struct kobj_type {
    ...
    void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
};

调用回调时,*uid*gid 都包含 0(对应于 root 用户)。回调可能会将这些输出参数设置为其他值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2021-12-19
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多