我正在做一些Linux模块开发,将我限制为只有内核可用的库,并且我希望获取与我的模块用户名进行交互的用户的用户名。 AKA他们的“whoami”。我的模块实际上是围绕系统调用...我可以从内核空间中的current-> pid获取pid。是否有任何方法可能使用pid来追踪pid所属的用户?还是另一种更简单的方法?如何从Linux内核空间获取用户名
感谢
我正在做一些Linux模块开发,将我限制为只有内核可用的库,并且我希望获取与我的模块用户名进行交互的用户的用户名。 AKA他们的“whoami”。我的模块实际上是围绕系统调用...我可以从内核空间中的current-> pid获取pid。是否有任何方法可能使用pid来追踪pid所属的用户?还是另一种更简单的方法?如何从Linux内核空间获取用户名
感谢
可以使用filp_open功能从内核打开/etc/passwd
文件。接下来,您将需要使用file_operations读取文件:
struct file * file = filp_open(...);
file->f_op->read(file, ...);
读取文件内容可能为UID -> username
翻译是有帮助的。
只有在用户名映射到'/ etc/passwd'中时才有效。但地图也可以来自NIS,NIS +,LDAP等。 –
@HristoIliev:当然。在这种情况下没有办法。 Netlink + uid2name守护进程作为可能的解决方案。 –
优秀的答案 - 它的作品。 – PinkElephantsOnParade
'task_struct'中的字段包含所有者信息(UID,GID,有效UID,有效GID等),但仅作为数字ID。由'libc'提供的所有ID /名称解析服务都在用户空间中的所谓的命名服务交换机(NSS)中实现。据我所知,没有内核例程可以执行该解决方案,因为内核仅适用于ID(类似于它只能用于数字IP地址) –