我正在使用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
是否有准确的方式或较低级别的方式,某种查找表可以保证我的准确结果?
答案 0 :(得分:9)
Unix文件权限使用UID工作。用户名不能拥有文件。只有UID可以。因此,如果文件属于特定的UID,则具有该UID的所有用户都拥有该文件。
因此,您获得的用户名无关紧要,因为拥有该UID的所有用户都拥有该文件。
答案 1 :(得分:5)
如果您有多个与单个UID关联的名称,则您有多个与该UID关联的名称。但就内核而言,所有的名称都是SAME用户的别名。
也就是说,这个名字纯属人类小说,唯一存储的是UID。
例如,假设我们在/ etc / passwd中有两行:
user:50:50:...
resu:50:50:...
这定义了从用户名到UID的两个映射。在内部,只有数字UID用于确定“某人”是谁,因此如果resu
创建文件并将权限设置为user:read / write,group:none,other:none,user
仍然可以阅读它,因为就内核而言,它们是相同的用户。
/the/example/file
owner: 50
group: 50
permissions: rw-------
就所有权而言,文件系统中存储的唯一内容是数字用户ID和数字组ID。对于从数字ID到人性化字符串的映射,找到的第一个映射是使用的映射,因为它们都是相同的。
在hort中,不要给两个用户提供相同的数字ID,因为如果你这样做,你就会让自己的生活太过艰难。