保护/ etc / passwd和/ etc / shadow不会出现并发访问

时间:2010-02-26 00:50:12

标签: c++ c linux passwd

如何保护/ etc / passwd和/ etc / shadow不受并发访问的影响?我在pwd.h中没有看到任何锁定机制。我看到pwd_mkdb的手册提到获取锁定,但是它只是锁定文件以进行独占访问吗?

如果我要编写一个实用程序来直接修改它们,或者通过get / set / endpwent系列函数,是否存在锁定这些文件的约定?

1 个答案:

答案 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在我的系统上没有任何内容。