[英]C++ add linux user
什么是使用C ++在linux中添加用戶/組的最佳方法是否有一個我可以調用的庫? 我不想開始做這樣的事情:
fopen("/etc/passwd", "a");
fprintf(tmp, "%s:x:%d:1:%s:/%s/%s:/bin/ksh\n", username, usernumber, commentfield, userdir, username);
fclose(tmp);
fopen("/etc/shadow", "a");
fprintf(stmp, "%s:*LK*:::::::\n", username);
fclose(stmp);
謝謝!
我注意到,添加和更改用戶的大多數主要實用程序都是直接執行的,通常以不同的方式執行。 可用於修改passwd和shadow文件的函數在<pwd.h>
和<sys/types.h>
中公開, 它們是glibc的一部分 。
fgetpwent , getpwnam , getpw , getpwent_r , putpwent , setpwent
作為一個例子,我們可以看看busybox(通過TinyLogin )是如何做到的。 在busybox/loginutils/adduser.c
,他們通過構建passwd結構將用戶放入passwd文件,然后調用putpwent
。 要在影子文件中添加用戶密碼,他們只需調用fprintf
並直接寫入字符串。
為了以現代方式驗證用戶,有Linux-PAM 。 但是就添加用戶而言,你可以在pam_unix_passwd.c中看到它們調用unix_update_db() ,它調用libpwdb中的各種函數,如果你使用它,你必須將它作為依賴項添加到項目中。
話雖這么說,我編寫了一些實用程序來解析passwd和shadow數據庫並直接修改它們,我感到內疚。 它運行良好,但這是在一個嵌入式系統,我可以嚴格控制一切。 我不必擔心像其他程序修改passwd db那樣的競爭條件。
如果需要添加組,則組數據庫也是如此 。
您可以嘗試使用libuser庫。
與libuser一起分發的應用程序之一是luseradd
,這個程序似乎是一個跨平台的useradd
實用程序。 luseradd的核心luseradd
使用libuser的lu_user_add
函數來物理創建用戶。
有關docs/html
請參閱源代碼發行版中的docs/html
文件夾。
添加用戶對於系統調用來說有點過高。 據我所知,也沒有任何廣泛使用的庫。 您最好的選擇可能是使用system
調用來調用帶有適當選項的useradd
程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.