以编程方式创build新用户

可能重复:
如何使用C / C ++创build一个Linux用户?

有什么办法可以在Linux中从c程序创build新用户?

做正确的事情是一个相当复杂的过程。 最简单的方法是使用system()fork / exec来运行useradd程序。 否则,如果你确实需要在你自己的代码中做这个工作,那么就得到useradd的源代码并研究它。 有关查找useradd源的信息,请参阅此问题 。

大多数Linux系统中的用户并不是内核所知道的。 对于大多数系统,相应地编辑密码文件(/ etc / passwd)可能就足够了。 当然,为了被允许更改密码文件,你经常必须是root。

有关如何添加用户的更多信息,请参阅此页面 。 你当然可以编写一个C程序来复制useradd命令所采取的步骤,或者直接调用它。

是的,在大多数系统上找到的adduseruseradd命令是一个C程序。

创建一个用户通常只需要添加一个入口到/etc/passwd和相关文件,创建一个主目录,并将一些文件从/etc/skel复制到主目录。 有关详细信息,请参阅adduseruseradd的源代码。

有两种方法。

首先,您可以通过更改用户数据库来创建用户。 在最简单的情况下,这是/ etc / passwd和/ etc / shadow。 如果你想为用户创建一个自己的组,这是现代Linux系统的一般情况,你必须修改/ etc / group和/ etc / gshadow。 但是您不能确定这是否正常工作,因为系统可能会从NIS或LDAP域中获取用户。 在这种情况下,用户必须在NIS或LDAP服务器上创建。

第二种方法是执行作业的操作系统命令。 这是useradd。 有多种方式如何做到这一点。 最简单的就是打电话给系统

系统(“useradd newguy”);

这涉及到一个shell的执行。 更高级的方法是在useradd二进制文件上使用execve执行fork。 但结果是一样的。

系统,fork和execve的手册页包含一些有用的例子。

我想出了以下稍微可行的资源:

http://tldp.org/HOWTO/Shadow-Password-HOWTO-8.html

关于如何将阴影支持集成到您的程序中。 请注意,这假定与passwd / shadow库存在静态链接。 一旦上游代码中的安全问题得到解决(因为静态链接的代码已经被烧入你的应用程序,包括上游固定的安全流程/错误),这就给IMHO提供了巨大的负担。