Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 保护/etc/passwd和/etc/shadow不受并发访问_C++_C_Linux_Passwd - Fatal编程技术网

C++ 保护/etc/passwd和/etc/shadow不受并发访问

C++ 保护/etc/passwd和/etc/shadow不受并发访问,c++,c,linux,passwd,C++,C,Linux,Passwd,如何保护/etc/passwd和/etc/shadow免受并发访问?我在pwd.h中没有看到任何锁定机制。我看到pwd_mkdb的手册中提到获得锁,但它只是为了独占访问而锁定文件吗 如果我要编写一个实用程序来直接修改这些文件,或者通过get/set/endpwent函数族修改这些文件,是否有一个锁定这些文件的约定?我认为现在大多数应用程序都使用PAM,不是吗。也就是说,您可以查看“pam_unix.so”的源代码,看看它们是如何做到的。我朝里面看了看,接着说: /* update the pas

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


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

我认为现在大多数应用程序都使用PAM,不是吗。也就是说,您可以查看“pam_unix.so”的源代码,看看它们是如何做到的。我朝里面看了看,接着说:

/* update the password database(s) -- race conditions..? */

retval = unix_update_db(pamh, ctrl, user, pass_old, pass_new);
它有许多前缀为“pwdb”的函数。谷歌再次披露了这一点,我认为这是问题的根源

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

#include <pwdb/pwdb_public.h>
#include <pwdb/pwdb_shadow.h>
#包括
#包括
但是
find-名称“*pwdb*”2>/dev/null
到目前为止在我的系统上没有显示任何内容