如何在Linux内核空间获取用户名

6
我正在进行一些Linux模块开发,只能使用内核可用库,并且我想获得与我的模块交互的用户的用户名,也就是他们的“whoami”。我的模块实际上是封装在系统调用周围的...我可以从内核空间中的current->pid获取pid。是否有任何方法,例如使用pid来跟踪拥有该pid的用户?还是有另一种更简单的方法?
谢谢

2
task_struct 中有一些字段保存所有者信息(UID、GID、有效 UID、有效 GID 等),但仅以数字 ID 的形式存在。所有 ID/名称解析服务都由 libc 在用户空间中实现,称为命名服务开关(NSS)。据我所知,内核没有执行解析的例程,因为内核只使用 ID(类似于它仅使用数字 IP 地址)。 - Hristo Iliev
1个回答

4
您可以使用 filp_open 函数从内核中打开 /etc/passwd 文件。接下来需要使用 file_operations 读取文件内容:
struct file * file = filp_open(...);
file->f_op->read(file, ...);

读取文件内容可能有助于将UID ->用户名进行翻译。


仅在用户名映射在/etc/passwd中时才起作用。但是映射也可以来自NIS、NIS+、LDAP等。 - Hristo Iliev
@HristoIliev:当然。在这种情况下没有其他办法。Netlink + uid2name守护进程可能是一个解决方案。 - Ilya Matveychikov
我使用了您的方法,但是我只能将passwd文件的一部分读入缓冲区。 - Jianchen
@Jianchen 这里没有能进行心灵感应的人。 - Ilya Matveychikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接