我有以下代碼:
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 用戶擁有這個節點?
uj5u.com熱心網友回復:
sysfs 屬性的所有者和組識別符號由為其創建此屬性的kobject確定。
具體來說,它是可能包含集合所有者和組識別符號的回呼的get_ownership欄位struct kobj_type。該欄位具有以下簽名:
struct kobj_type {
...
void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
};
呼叫回呼時,*uid和*gid都包含 0(對應于 root 用戶)。回呼可以將這些輸出引數設定為其他值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/379251.html
上一篇:執行緒是否占用其獨立的內核空間?
