为什么glibc不提供标准库来修改/etc/passwd和/etc/shadow,即添加用户,更改passwd,
我得出这个结论是因为我查了源码shadow
并没有找到这样的接口
答案1
因为这不是glibc的责任。 glibc 委托系统上安装的其他服务进行身份验证;如果有的话,那就是那些能够提供修改用户数据库的能力。
答案2
你从这里开始一个假设,这/etc/{passwd,shadow,group}
始终是单点真理(SPOT) 用于 Unix 机器上的用户信息。自 20 世纪 80 年代中期以来,情况并非如此,当时 Sun 推出了NIS。
相反情况的 API 确实存在:getpwnam(3)
和朋友。如果您网站的用户数据 SPOT 是LDAP服务器,很容易看出如何减少它丰富的输出仅显示 中存在的那些内容/etc/{passwd,shadow}
。
但是,您需要一个执行相反操作的 API。在不setpwnam(3)
知道后端数据存储是/etc/*
、NIS 或NIS+,或 LDAP,或活动目录, 或者...?你可以从海洋中过滤磷虾,但你无法从一桶磷虾中过滤出立方米的海洋。
答案3
如果你想一想,答案很简单,不可能有 C 标准库与它们交互,只是因为它们不是 C 标准功能。这在 Windows 上如何工作?