有没有办法在Linux中用c程序创建新用户?
答案 0 :(得分:4)
完成所有事情是一个相当复杂的过程。最简单的方法是使用useradd
或system()
/ fork
运行exec
程序。否则,如果您确实需要在自己的代码中执行此操作,请获取useradd
的来源并进行研究。有关查找useradd
来源的信息,请参阅this question。
答案 1 :(得分:0)
大多数Linux系统中的用户并不是内核所知道的。对于大多数系统,可能相应地编辑密码文件(/ etc / passwd)。当然,为了被允许更改密码文件,您通常必须是root用户。
有关如何添加用户的详情,请参阅this page。您当然可以编写一个C程序,它可以复制useradd
命令所采取的步骤,也可以直接调用它。
答案 2 :(得分:0)
是的,在大多数系统上找到的adduser
或useradd
命令都是一个C程序。
创建用户通常只需要在/etc/passwd
和相关文件中添加条目,创建主目录,并将/etc/skel
中的某些文件复制到主目录中。有关详细信息,请查看adduser
或useradd
的源代码。
答案 3 :(得分:0)
有两种方式。
首先,您可以通过更改用户数据库来创建用户。在最简单的情况下,这是/ etc / passwd和/ etc / shadow。如果要为用户创建自己的组(这是现代Linux系统上的正常情况),则必须更改/ etc / group和/ etc / gshadow。但是您无法确定这是否有效,因为系统可以从NIS或LDAP域中获取用户。在这种情况下,必须在NIS或LDAP服务器上创建用户。
第二种方法是执行操作系统命令,该命令执行该任务。这是useradd。有多种方法可以做到这一点。最简单的是调用系统
system(“useradd newguy”);
这涉及执行shell。更高级的方法是在useradd二进制文件上使用execve进行fork。但结果是一样的。
system,fork和execve的手册页包含一些有用的示例。
答案 4 :(得分:0)
我提出了以下稍微可行的资源:
http://tldp.org/HOWTO/Shadow-Password-HOWTO-8.html
如何在程序中集成阴影支持。请注意,这假定与passwd / shadow libs的静态链接。一旦在上游代码中修复了安全问题,这就会给(IMHO巨大的)负担提供即时安全更新(因为静态链接的代码将被烘焙到您的应用程序中,包括上游修复的安全流/错误)。