创建新用户编程

问题描述:

可能重复:
How to create a linux user using C/C++?创建新用户编程

有什么方法来创建从Linux的C程序新用户?

+0

http://*.com/questions/3454089/how-to-create-a-linux-user-using-c-c – Bart 2011-05-02 14:49:18

+0

我害怕问,但为什么? – 2011-05-02 14:49:32

+0

你更喜欢C系统调用还是在shell中运行一个外部命令?这可以通过'popen' – 2011-05-02 14:50:29

这样做是相当复杂的过程。最简单的方法是简单地运行useradd程序,使用system()fork/exec。否则,如果你真的需要在自己的代码中完成,请获取useradd的源代码并研究它。有关查找useradd源的信息,请参见this question

+0

是不是可以“链接”到包含useradd的发行版中的开发包?这样就可以将它用作图书馆 - 这将是整洁的imho。 – vstrien 2011-05-02 14:56:41

+1

我刚刚查了一下资料来源,是的,为了干涉它,你不想干这个。您可以创建各种不错的错误__AND__冒着破坏用户(客户端?)登录系统的风险:) – sehe 2011-05-02 15:07:21

大多数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。有多种方式如何做到这一点。最简单的是拨打系统

system(“useradd newguy”);

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

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

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

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

在HOWTO在你的程序中集成的影子支持。请注意,这假定与passwd/shadow库存在静态链接。一旦上游代码中的安全问题得到解决(因为静态链接的代码已经包含在您的应用程序中,其中包括上游固定的安全流程/错误),这会使(恕我直言)巨大的负担提供即时安全更新。