保护/ 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
至今却一无所获我的系统上。