簡體   English   中英

C ++添加linux用戶

[英]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的一部分

fgetpwentgetpwnamgetpwgetpwent_rputpwentsetpwent

作為一個例子,我們可以看看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM