如何保护/ etc / passwd和/ etc / shadow不受并发访问的影响?我在pwd.h
中没有看到任何锁定机制。我看到pwd_mkdb
的手册提到获取锁定,但是它只是锁定文件以进行独占访问吗?
如果我要编写一个实用程序来直接修改它们,或者通过get / set / endpwent系列函数,是否存在锁定这些文件的约定?
答案 0 :(得分:3)
我认为现在大多数应用都使用PAM,不是吗? http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_ADG.html。也就是说,您可以查看“pam_unix.so”的来源,看看他们是如何做到的。我查看pam_unix_passwd.c,然后按照:
/* update the password database(s) -- race conditions..? */
retval = unix_update_db(pamh, ctrl, user, pass_old, pass_new);
以here为前缀,其函数前缀为“pwdb”。谷歌再次透露this我认为passwd的来源。
因此,我认为编辑这些文件是由libpwdb
处理的。当然,我认为包括:
#include <pwdb/pwdb_public.h>
#include <pwdb/pwdb_shadow.h>
但到目前为止find . -name "*pwdb*" 2>/dev/null
在我的系统上没有任何内容。