如何使用C获取UNIX文件的所有者



我正在尝试使用C的unix文件的获取所有者的名称。我发现的唯一方法是使用stat(),然后getpwuid(stat.st_uid)。但是,它仅返回使用该UID的第一个用户名,密码文件中的用户可以具有相同的UID。显然,这是不可接受的,不能被信任。

参考:

所有者是从密码文件中收回的:http://pubs.opengroup.org/onlinepubs/007904875/functions/getpwuid.html

uid在密码文件中找到:http://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/

UNIX允许多个用户具有相同的UID:http://www.e-reading.org.ua/htmbook.php/orelly/networking/puis/ch04_01.htm

是否有一种准确的方式或较低级别的方式,某种查找表可以保证我准确的结果?

unix文件权限通过使用UID来工作。用户名不能拥有文件。只有UID可以。因此,如果文件属于特定的UID,则与所有使用该文件拥有该文件的用户相比。

所以您可以获得哪个用户名,因为所有使用UID都有该文件的用户。

如果与单个UID相关联的多个名称,则与该UID相关联的多个名称。但是就内核而言,所有thoser名称都是同一用户的别名。

也就是说,名字是纯粹的人类小说,唯一存储的是UID。

例如,例如,我们在/etc/passwd中有两行:

user:50:50:...
resu:50:50:...

这定义了从用户名到UID的两个映射。在内部,仅使用数字UID来确定谁是"某人",因此,如果resu创建文件并将权限设置为用户:读/写,group:none:none,其他:无:无,user仍然可以读取它,因为到目前为止当内核所涉及的情况下,它们是相同的用户。

/the/example/file
  owner: 50
  group: 50
  permissions: rw-------

就所有权而言,唯一存储在文件系统中的内容是数值用户ID和数值组ID。为了从数值ID到对人体友好的字符串,发现的第一个映射是使用的,因为它们都是相同的。

在霍尔特(Hort),不要给两个用户使用相同的数值ID,因为如果这样做,您会使自己的生活过于努力。

最新更新