2012-10-18 48 views
4

我正在做一些Linux模块开发,将我限制为只有内核可用的库,并且我希望获取与我的模块用户名进行交互的用户的用户名。 AKA他们的“whoami”。我的模块实际上是围绕系统调用...我可以从内核空间中的current-> pid获取pid。是否有任何方法可能使用pid来追踪pid所属的用户?还是另一种更简单的方法?如何从Linux内核空间获取用户名

感谢

+2

'task_struct'中的字段包含所有者信息(UID,GID,有效UID,有效GID等),但仅作为数字ID。由'libc'提供的所有ID /名称解析服务都在用户空间中的所谓的命名服务交换机(NSS)中实现。据我所知,没有内核例程可以执行该解决方案,因为内核仅适用于ID(类似于它只能用于数字IP地址) –

回答

1

可以使用filp_open功能从内核打开/etc/passwd文件。接下来,您将需要使用file_operations读取文件:

struct file * file = filp_open(...); 
file->f_op->read(file, ...); 

读取文件内容可能为UID -> username翻译是有帮助的。

+0

只有在用户名映射到'/ etc/passwd'中时才有效。但地图也可以来自NIS,NIS +,LDAP等。 –

+0

@HristoIliev:当然。在这种情况下没有办法。 Netlink + uid2name守护进程作为可能的解决方案。 –

+0

优秀的答案 - 它的作品。 – PinkElephantsOnParade

相关问题