4

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

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

4

1 回答 1

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);

这里有很多以'pwdb'为前缀的函数。谷歌搜索再次揭示了这一点,我认为这是passwd的来源。

因此,我认为编辑这些文件是由libpwdb. 当然,我看到包括:

#include <pwdb/pwdb_public.h>
#include <pwdb/pwdb_shadow.h>

find . -name "*pwdb*" 2>/dev/null到目前为止,我的系统上什么也没出现。

于 2010-02-26T01:42:02.700 回答