C ++添加Linux用户
-
28-09-2019 - |
题
使用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 阴影文件暴露在 <pwd.h>
并在 <sys/types.h>
, , 和 他们是Glibc的一部分.
FGETPWENT, getpwnam, getpw, getpwent_r, Putpwent, setPwent
我们可以调查如何忙碌的箱子(通过 丁替辛)这样做。在 busybox/loginutils/adduser.c
, ,他们通过构建PARSWD结构将用户放入PassWD文件中,然后致电 putpwent
. 。对于在影子文件中添加用户密码,他们只需致电 fprintf
并直接写下字符串。
为了以现代方式对用户进行身份验证 Linux-Pam. 。但是就添加用户而言,您可以看到 pam_unix_passwd.c 他们打电话 unix_update_db(), ,其中称为各种功能 libpwdb, ,如果您使用该项目,则必须将其作为依赖性添加。
话虽这么说,我有罪写了几个实用程序来解析PassWD和Shadow数据库并直接修改它们。它运行良好,但这是在一个嵌入式系统上,我可以紧紧控制所有内容。我不必担心其他程序可以修改PassWD DB之类的比赛。
如果您需要添加一个组,那么 组数据库.
其他提示
您可以尝试使用 Libuser 图书馆。
用Libuser分发的应用之一是 luseradd
, ,似乎是跨平台的程序 useradd
效用。以此为核心 luseradd
使用libuser's lu_user_add
功能以物理创建用户。
看到 docs/html
文档源分布中的文件夹。
添加用户有点太高,无法进行系统调用。据我所知,也没有任何广泛使用的库。最好的选择可能是使用 system
打电话调用 useradd
program with appropriate options.