保护/ etc/passwd和/ etc/shadow不受并发访问的影响

问题描述:

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

如果我要编写一个实用程序来直接修改它们,或者通过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); 

here里面有很多的前缀`PWDB”功能。谷歌搜索再次显示this,我认为这是passwd的来源。

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

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

find . -name "*pwdb*" 2>/dev/null至今却一无所获我的系统上。