2010-02-26 71 views
4

如何保護/ etc/passwd和/ etc/shadow不受併發訪問的影響?我在pwd.h中看不到任何鎖定機制。我看到pwd_mkdb提到獲取鎖的手冊,但是它只是鎖定文件以進行獨佔訪問?保護/ etc/passwd和/ etc/shadow不受併發訪問的影響

如果我要編寫一個實用程序來直接修改它們,或者通過get/set/endpwent系列函數來鎖定這些文件,是否有一個約定?

回答

3

我認爲現在大多數應用程序都使用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至今卻一無所獲我的系統上。