我该如何保护 /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
在我的系统上目前没有找到任何内容。