C ++如何以编程方式将linux用户添加到组中

时间:2015-11-11 13:48:16

标签: c++ linux

是否可以在我启动程序时以编程方式将Linux上的用户添加到组中?我正在使用C ++。我知道它可以用shell来完成,但我需要在我的C ++程序中完成它,但是我不知道该使用什么。

3 个答案:

答案 0 :(得分:2)

你可以采取两种方法:

  1. 使用system()调用执行shell命令来完成工作。
  2. 直接修改/ etc / group文件。找到包含要添加的组的行应该相当容易,然后在最后添加要添加的用户(如果已经有组成员,请确保添加逗号)。
  3. 鉴于选择,我可能会使用上面的第一个选项。

    编辑:正如@DevSolar在他的评论中所指出的,这个答案假设您的系统正在使用/ etc中的passwd / shadow / group文件进行标准本地身份验证。如果您的系统没有使用本地身份验证,那么这是一个完全不同的球赛。

答案 1 :(得分:0)

Jared Sutton的两个选项是有效的,但我想指出,如果您使用现有的库,则不必自己实施编辑/etc/group

我至少知道busybox,它实现了这一点。在libbb/update_passwd.c

中定义了一个函数
int update_passwd(const char *filename, // /etc/group
    const char *name,                   // username
    const char *new_passwd,             // nullptr
    const char *member)                 // groupname

如果你想自己实现它,那么你可以查看它们的功能是如何工作的。

答案 2 :(得分:0)

许多配置管理软件解决了这个任务。 For example in Salt:

def adduser(name, username):
    on_redhat_5 = __grains__.get('os_family') == 'RedHat' and __grains__.get('osmajorrelease') == '5'    
    if __grains__['kernel'] == 'Linux':
        if on_redhat_5:
            cmd = 'gpasswd -a {0} {1}'.format(username, name)
        else:
            cmd = 'gpasswd --add {0} {1}'.format(username, name)
    else:
        cmd = 'usermod -G {0} {1}'.format(name, username)
    retcode = __salt__['cmd.retcode'](cmd, python_shell=False)
    return not retcode

如您所见,使用了操作系统命令。哪一个取决于它是什么操作系统:)