855

I want to add the Apache user (www-data) to the audio group. I've read the man page for useradd, but I'm not having any luck. I'm running xubuntu 11.10. Here's what I'm doing:

$ sudo useradd -G audio www-data
useradd: user 'www-data' already exists

If I leave out the -G option, bash, prints the help info for useradd:

$ sudo useradd  audio www-data
Usage: useradd [options] LOGIN
Options: -b, --base-dir BASE_DIR       base directory for the home directory...

It's not clear to me from the man page what options I should use to make this work.

Simón
  • 455
Sparky1
  • 12,469

8 Answers8

1296

The useradd command will try to add a new user. Since your user already exists this is not what you want.

Instead: To modify an existing user, like adding that user to a new group, use the usermod command.

Try this:

sudo usermod -a -G groupName userName
  • The -a (append) switch is essential. Otherwise, the user will be removed from any groups, not in the list.

  • The -G switch takes a (comma-separated) list of additional groups to assign the user to.

In general (for the GUI, or for already running processes, etc.), the user will need to log out and log back in to see their new group added. For the current shell session, you can use newgrp:

newgrp groupName
  • newgrp adds the group to the current shell session.
muru
  • 197,895
  • 55
  • 485
  • 740
dpendolino
  • 13,320
  • 83
    sudo usermod -a -G [group-name] [user-name] : Just a quickie for those who only glance at the answer after reading the headline – Programster Nov 11 '13 at 14:50
  • 2
    What does the -a do? It seems to be depreciated / doesn't work with it but the command works with it removed. I can't seem to find reference in a few versions of man... but, I have seen it in so many examples - what does it do? – wilhil Aug 09 '14 at 01:05
  • 45
    I think the preferred way now is sudo adduser user group. It is simpler and cleaner syntax. See the response from @Bai. – ctbrown Aug 14 '14 at 14:20
  • 3
    @wilhil: man usermod: "-a, --append - Add the user to the supplementary group(s). Use only with the -G option.; -G, --groups GROUP1[,GROUP2,...[,GROUPN]]] [...] If the user is currently a member of a group which is not listed, the user will be removed from the group. This behaviour can be changed via the -a option, which appends the user to the current supplementary group list." – Adam Michalik Jan 26 '16 at 15:03
  • 21
    Is there a way to get around the "logout and back in" part? Some type of update-groups command, maybe? – con-f-use Mar 19 '16 at 00:05
  • 18
    @con-f-use, if you can run sudo login -f YOURUSERNAME, it will start a new shell session. Use the id command to verify that the new session is in the correct set of groups. However, this isn't "global" - it doesn't apply to terminals that are already open. So, really, logging out is the best option, where possible – Aaron McDaid Mar 31 '17 at 14:57
  • 5
    You can use the newgrp [group-name] command to add a new group to the user of the current session without logging out and in again. Only the current session will be affected though. – stenix Nov 21 '17 at 10:17
  • @AaronMcDaid, thanks for the nice tip! There are situations when logging out is not an option and your tip saved me some troubles! – russoue Sep 27 '18 at 22:24
  • @con-f-use: I think a su - USERNAME will directly activate a new shell with the new groups settings available. From the docs: SYNOPSYS: su [options] [-] [user [argument...]] DESCRIPTION su allows commands to be run with a substitute user and group ID. The - is a short form for the loginparameter. – klaas Nov 25 '20 at 21:23
  • newgrp does not add the group to the current shell session. newgrp sets the user's primary group for the current session. Logging out and logging back in again updates the list of secondary groups - it does not modify the primary group at all, hence using newgrp is not an alternative to logging out and logging back in again. If you want an alternative to logging out and logging back in again, try exec sg <groupName> newgrp i.e. exec sg audio newgrp. More info here. HTH. – jaimet Aug 12 '23 at 16:44
261

Adding a user to a group:

sudo adduser user group

Removing a user from a group:

sudo deluser user group
Bai
  • 7,760
72

After adding to a existing user:

usermod -a -G group user  

You may need to logout and login to get the groups permissions from /etc/group.

Amos Folarin
  • 1,154
34

I normally use

sudo gpasswd -a myuser mygroup
enzotib
  • 93,831
15

I'm posting this as an answer because I don't have enough reputation to comment. As @dpendolino's mentioned, for the effects of this command to persist:

sudo usermod -a -G groupName userName

...you need to logout/login again.

However, if you need a shortcut to start using your new group membership immediately (and you have the correct sudo privileges) I have found this work-around:

$ sudo su -
# su [userName]
$ groups

Explanation:

  • sudo su - will give you a root shell
  • su [userName] returns you to a shell with your user
  • groups when run now will show the group you added with the usermod -aG command

In my case I was trying to add the 'docker' group to my user

Before:

$ groups
userName adm cdrom sudo dip plugdev lpadmin sambashare wireshark lxd

After:

$ groups
userName adm cdrom sudo dip plugdev lpadmin sambashare wireshark lxd docker
  • Another option to apply the group membership is sudo login -f <username>, as per Aaron McDaid's comment on another answer. – David Oliver Jan 04 '20 at 20:08
11
sudo usermod -a -G groupName userName

will work just fine, but I had to reboot entirely, just log out and log in again did not do the job...

alex
  • 111
  • 1
  • 4
8

On Ubuntu, since logging in as root is not enabled, users in the sudo group can elevate privileges for certain restricted commands. Any restricted command must be prepended with sudo to elevate privilege.

sudo usermod -a -G group user

will add the existing user user to a supplemental group named group. The user's primary group will remain unchanged.

Eliah Kagan
  • 117,780
1

To permanantely add a user to a group, run this command:

sudo usermod -a -G <groupname> <username>

Then log out and log in again (or reboot if necessary).

Explanation:

The usermod command will modify the /etc/group file to list the specified username in the line relevant to that group. If you run grep <groupname> /etc/group, you should see your username in the output.

In Linux, every process is assigned to a user and groups, and any child processes inherit the user and groups of the parent process. So, for this change to take effect and propogate, you need to log out and log in again (at which point /etc/group is read and used). On Wayland, I've found that a full reboot is necessary.

If you run the command groups, you can see if the current process has the expected groups or not.

Flimm
  • 41,766