如何将现有用户添加到现有组?

Spa*_*ky1 761 users groups

我想将 Apache 用户 ( www-data)添加到audio组中。我已经阅读了 的手册页useradd,但我没有任何运气。我正在运行 xubuntu 11.10。这是我在做什么:

$ sudo useradd -G audio www-data
useradd: user 'www-data' already exists
Run Code Online (Sandbox Code Playgroud)

如果我省略了-Gbash 选项,则会打印以下帮助信息useradd

$ sudo useradd  audio www-data
Usage: useradd [options] LOGIN
Options: -b, --base-dir BASE_DIR       base directory for the home directory...
Run Code Online (Sandbox Code Playgroud)

从手册页中我不清楚应该使用哪些选项来完成这项工作。

dpe*_*ino 1186

useradd命令将尝试添加新用户。由于您的用户已经存在,这不是您想要的。

相反:要修改现有用户,例如将该用户添加到新组,请使用该usermod命令。

尝试这个:

sudo usermod -a -G groupName userName
Run Code Online (Sandbox Code Playgroud)
  • 所述-a(附加)开关是必不可少的。否则,用户将从任何组中删除,而不是在列表中。

  • -G开关采用(逗号分隔的)附加组列表来分配用户。

通常(对于 GUI 或已经运行的进程等),用户需要注销并重新登录以查看添加的新组。对于当前的 shell 会话,您可以使用newgrp

newgrp groupName
Run Code Online (Sandbox Code Playgroud)
  • newgrp 将组添加到当前 shell 会话。

  • `sudo usermod -a -G [group-name] [user-name]` :对于那些在阅读标题后只看一眼答案的人来说,这只是一个速记 (79认同)
  • 我认为现在首选的方式是`sudo adduser 用户组`。它是更简单、更清晰的语法。请参阅@Bai 的回复。 (43认同)
  • 有没有办法绕过“注销并重新登录”部分?某种类型的更新组命令,也许? (20认同)
  • @con-f-use,如果您可以运行 `sudo login -f YOURUSERNAME`,它将启动一个新的 shell 会话。使用 `id` 命令来验证新会话是否在正确的组集中。但是,这不是“全局的”——它不适用于已经打开的终端。所以,真的,在可能的情况下,退出是最好的选择 (16认同)
  • 您可以使用`newgrp [group-name]` 命令为**当前会话** 的用户添加一个新组,而无需注销和再次登录。但是只有当前会话会受到影响。 (4认同)
  • @wilhil: `man usermod`: "**-a, --append** - 将用户添加到补充组。仅与 -G 选项一起使用。; **-G, --groups** GROUP1[,GROUP2,...[,GROUPN]]] *[...]* 如果用户当前是未列出的组的成员,则该用户将从该组中删除。此行为可以更改通过 -a 选项,将用户附加到当前的补充组列表。” (3认同)
  • -a 有什么作用?它似乎已折旧/不适用于它,但该命令已删除它。我似乎无法在几个版本的 man 中找到参考……但是,我在很多例子中都看到了它——它有什么作用? (2认同)

小智 236

将用户添加到组:

sudo adduser user group
Run Code Online (Sandbox Code Playgroud)

从组中删除用户:

sudo deluser user group
Run Code Online (Sandbox Code Playgroud)

  • @Tejendra 的评论似乎预设了使用 useradd 是可取/必须的来回答 OP 的问题;也许这个答案只是缺少词来表明 adduser/deluser 是更好的选择。 (15认同)
  • 对我来说,界面越简单越好,这就是我喜欢这个界面的原因。 (14认同)
  • 不完全是这个问题的要求 (5认同)
  • 这正是_正被问到的问题。@knocte,是的,我认为这是 Debian 特有的 (4认同)
  • @Auspex 我可以确认它在 Red Hat 上不起作用。 (3认同)

Amo*_*rin 66

添加到现有用户后:

usermod -a -G group user  
Run Code Online (Sandbox Code Playgroud)

您可能需要注销并登录才能从/etc/group.

  • 请把“需要注销和登录”部分加粗。 (22认同)
  • 我在 Ubuntu 14.10 上需要注销并重新登录。 (5认同)

enz*_*tib 33

我通常使用

sudo gpasswd -a myuser mygroup
Run Code Online (Sandbox Code Playgroud)

  • usermod 在我的系统 ubuntu 14.04 上不可用。这很好用! (3认同)

小智 13

我将此作为答案发布,因为我没有足够的声誉发表评论。正如@dpendolino 所提到的,为了使此命令的效果持续存在:

sudo usermod -a -G groupName userName

...您需要再次注销/登录。

但是,如果您需要一个快捷方式来立即开始使用您的新组成员身份(并且您拥有正确的sudo权限),我发现了以下解决方法:

$ sudo su -
# su [userName]
$ groups
Run Code Online (Sandbox Code Playgroud)

解释:

  • sudo su - 会给你一个root shell
  • su [userName] 将您与您的用户一起返回到 shell
  • groups现在运行时将显示您使用usermod -aG命令添加的组

就我而言,我试图将“docker”组添加到我的用户

前:

$ groups
userName adm cdrom sudo dip plugdev lpadmin sambashare wireshark lxd
Run Code Online (Sandbox Code Playgroud)

后:

$ groups
userName adm cdrom sudo dip plugdev lpadmin sambashare wireshark lxd docker
Run Code Online (Sandbox Code Playgroud)


小智 9

sudo usermod -a -G groupName userName
Run Code Online (Sandbox Code Playgroud)

会工作得很好,但我不得不完全重新启动,只是注销并再次登录并没有完成这项工作......


小智 7

在 Ubuntu 上,由于未启用登录身份rootsudo组中的用户可以提升某些受限命令的权限。任何受限制的命令都必须预先添加sudo以提升特权。

sudo usermod -a -G group user
Run Code Online (Sandbox Code Playgroud)

将现有用户添加user到名为 的补充组group。用户的主要组将保持不变。