创建新用户编程
这样做是相当复杂的过程。最简单的方法是简单地运行useradd
程序,使用system()
或fork
/exec
。否则,如果你真的需要在自己的代码中完成,请获取useradd
的源代码并研究它。有关查找useradd
源的信息,请参见this question。
大多数Linux系统中的用户并不是内核所知道的。对于大多数系统,相应地编辑密码文件(/ etc/passwd)可能就足够了。当然,为了被允许更改密码文件,您通常必须是root用户。有关如何添加用户的更多信息,请参阅。您当然可以编写一个C程序,复制useradd
命令所采用的步骤,或者直接调用它。
是的,在大多数系统上找到的adduser
或useradd
命令是一个C程序。
创建用户通常只需添加一个条目到/etc/passwd
和相关文件,创建主目录,并将一些文件从/etc/skel
复制到主目录。有关详细信息,请参阅adduser
或useradd
的源代码。
有两种方法。
首先,您可以通过更改用户数据库来创建用户。在最简单的情况下,这是/ 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库存在静态链接。一旦上游代码中的安全问题得到解决(因为静态链接的代码已经包含在您的应用程序中,其中包括上游固定的安全流程/错误),这会使(恕我直言)巨大的负担提供即时安全更新。
http://*.com/questions/3454089/how-to-create-a-linux-user-using-c-c – Bart 2011-05-02 14:49:18
我害怕问,但为什么? – 2011-05-02 14:49:32
你更喜欢C系统调用还是在shell中运行一个外部命令?这可以通过'popen' – 2011-05-02 14:50:29