如何保护 /etc/passwd 和 /etc/shadow 免受并发访问?我没有看到任何锁定机制pwd.h
。我看到手册中pwd_mkdb
提到获得锁,但它只是锁定文件以进行独占访问吗?
如果我要编写一个实用程序来直接修改它们,或者通过 get/set/endpwent 系列函数,是否有锁定这些文件的约定?
我认为现在大多数应用程序都使用 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
到目前为止,我的系统上什么也没出现。