Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从应用程序创建Unix用户_C_Unix_Solaris_User Accounts_Libc - Fatal编程技术网

C 从应用程序创建Unix用户

C 从应用程序创建Unix用户,c,unix,solaris,user-accounts,libc,C,Unix,Solaris,User Accounts,Libc,我正在开发一个与更大的持续性保障应用程序相关的本地用户数据库 这个想法已经被提出,将我们的用户与系统用户联系起来,每次在我们的程序中生成新用户时,都会创建匹配的/etc/passwd条目。其他交互,如查询uid/gid中的用户名,或反之亦然,验证文件系统所有权,等等。我们已经定义了标准字段,如user.uid、user.gid、user.home、内部权限等,只需要一种将这些字段传递到系统的方法 问题是,在线搜索任何信息都是大海捞针——我还没有找到任何用于用户帐户获取者和设置者的标准库,我开始怀

我正在开发一个与更大的持续性保障应用程序相关的本地用户数据库

这个想法已经被提出,将我们的用户与系统用户联系起来,每次在我们的程序中生成新用户时,都会创建匹配的/etc/passwd条目。其他交互,如查询uid/gid中的用户名,或反之亦然,验证文件系统所有权,等等。我们已经定义了标准字段,如user.uid、user.gid、user.home、内部权限等,只需要一种将这些字段传递到系统的方法

问题是,在线搜索任何信息都是大海捞针——我还没有找到任何用于用户帐户获取者和设置者的标准库,我开始怀疑这些库是否存在?这里的方法正确吗?看来一定有更好的办法

请注意,出于所有意图和目的,该系统运行在单一用途(虚拟化)的系统上

最终编辑:最经济的解决方案是:

useradd -g group -c "firstname lastname" -d /export/home/username -m -s /bin/bash username

useradd
是您要找的吗


useradd
是您要找的吗


你可以把你的程序变成一个程序。不能帮助你真正做到这一点,但它可能值得你看看

补充:您也可以使用ldap


但这两种情况中的任何一种都意味着您只需要使数据库保持最新。passwd将自行处理

您可以将程序制作成一个。不能帮助你真正做到这一点,但它可能值得你看看

补充:您也可以使用ldap



但这两种情况中的任何一种都意味着您只需要使数据库保持最新。passwd将自行处理

我怀疑在数据库用户和系统用户之间建立1:1的关系是否是一个好主意。这将db应用程序紧密地绑定到底层操作系统结构,这可能不是您真正想要的,至少从长远来看不是。您最好设置第三个(独立)实体来进行身份验证,然后可以使用该实体对db用户和/或OS用户进行身份验证。LDAP可能是执行此操作的首选工具。@OliCharlesworth Linux!=Solaris@Kay:公平点!我读得太快了。这更适合@ColeJohnson,如果它在SO中超出范围,那么它将是该问题的合适位置。我怀疑在db用户和系统用户之间建立1:1的关系是一个好主意。这将db应用程序紧密地绑定到底层操作系统结构,这可能不是您真正想要的,至少从长远来看不是。您最好设置第三个(独立)实体来进行身份验证,然后可以使用该实体对db用户和/或OS用户进行身份验证。LDAP可能是执行此操作的首选工具。@OliCharlesworth Linux!=Solaris@Kay:公平点!我读得太快了。这更适合@ColeJohnson,如果它在SO中超出范围,那么它将是该问题的合适位置。不要在生产代码中使用您自己的实现。当然,你会毁了你的系统。@Derek_64246; u:调用其他程序是Unix的做法。这样做是非常受鼓励的,你应该这样做。实际上,在代码中使用它是更糟糕的解决方案。@ColeJohnson:从技术上讲,系统级工具是库,您只是以不同的方式使用它们。但使用单独的程序执行此操作还有另一个原因:SUID,在某些系统配置中可能是必需的。您不希望最终用户程序被SUID。@ColeJohnson:SUID二进制文件,即使用拥有该程序可执行文件的user:group权限执行的程序。许多与用户帐户管理相关的工具都是SUID,或者曾经是SUID/usr/sbin/passwd就是其中之一:它是SUID root,如果不是,它就不能用新密码更新系统密码数据库。@ColeJohnson:SUID执行的代码是安全关键的,因此必须仔细编写,并首先考虑安全性。如果有一个用于用户管理的库,那么链接该二进制文件的程序也必须是SUID,这意味着消费者程序具有非常强的安全性要求。因此,在任何维护良好的Unix(-like)系统中都找不到这样的库,因为这样的库在第二级上是非常危险的。不要在生产代码中使用您自己的实现。当然,你会毁了你的系统。@Derek_64246; u:调用其他程序是Unix的做法。这样做是非常受鼓励的,你应该这样做。实际上,在代码中使用它是更糟糕的解决方案。@ColeJohnson:从技术上讲,系统级工具是库,您只是以不同的方式使用它们。但使用单独的程序执行此操作还有另一个原因:SUID,在某些系统配置中可能是必需的。您不希望最终用户程序被SUID。@ColeJohnson:SUID二进制文件,即使用拥有该程序可执行文件的user:group权限执行的程序。许多与用户帐户管理相关的工具都是SUID,或者曾经是SUID/usr/sbin/passwd就是其中之一:它是SUID root,如果不是,它就不能用新密码更新系统密码数据库。@ColeJohnson:SUID执行的代码是安全关键的,因此必须仔细编写,并首先考虑安全性。如果有一个用于用户管理的库,那么链接该二进制文件的程序也必须是SUID,这意味着消费者程序具有非常强的安全性要求。因此,在任何维护良好的Unix(-like)系统中都找不到这样的库,因为这样的库在二级程度上是非常危险的。然而,考虑到将此作为解决方案实施的成本(以及问题的相对低优先级),I h
useradd -g group -c "firstname lastname" -d /export/home/username -s /bin/ksh username
mkdir -p /export/home/username
chown username /export/home/username