54

Being new to Linux administration, I'm a little confused about the following commands:

useradd
usermod
groupadd
groupmod

I've just finished reading the user administration book in the Linux/Unix Administrator's handbook, but some things are still a little hazy.

Basically useradd seems straight forward enough:

useradd -c "David Hilbert" -d /home/math/hilbert -g faculty -G famous -m -s /bin/sh hilbert

I can add "David Hilbert" with username hilbert , setting his default directory, shell, and groups. And I think that -g is his primary/default group and -G are his other groups.

So these are my next questions:

  1. Would this command still work if the groups faculty and famous did not exist? Would it just create them?
  2. If not, what command do I use to create new groups?
  3. If I remove the user hilbert and there are no other users in those groups, will they still exist? Should I remove them?
  4. After I run the useradd command above, how do I remove David from the famous group, and reassign his primary group to hilbert which does not yet exist?

5 Answers 5

40

The usermod command will allow you to change a user's primary group, supplementary group or a number of other attributes. The -g switch controls the primary group.

For your other questions...

  1. If you specify a group, groupname, that does not exist during the useradd stage, you will receive an error - useradd: unknown group groupname

  2. The groupadd command creates new groups.

  3. The group will remain if you remove all users contained within. You don't necessarily have to remove the empty group.

  4. Create the hilbert group via groupadd hilbert. Then move David's primary group using usermod -g hilbert hilbert. (Please note that the first hilbert is the group name and the second hilbert is the username. This is important in cases, where you are moving a user to a group with a different name)

You may be complicating things a bit here, though. In many Linux distributions, a simple useradd hilbert will create the user hilbert and a group of the same name as the primary. I would add supplementary groups specified together using the -G switch.

3
  • 2
    thanks. if i do usermod -g hilbert hilbert will that remove hilbert's other groups? If so, how would I keep those other groups?If not, wow would I remove him from his other groups?
    – cwd
    Dec 15, 2011 at 23:06
  • 1
    Test it out and see for your particular environment.
    – ewwhite
    Dec 16, 2011 at 6:39
  • 2
    @MIck's answer gets my upvote because he points out that you need to use -a with -G (otherwise any group you leave off will be removed)
    – Jeff
    Jul 29, 2016 at 18:51
14

You need to read the man usermod which explains what happens with the various options:

usermod -g hilder hilder

will replace your login group from 'faculty' to 'hilder', as long as the group 'hilder' exists. If it doesn't exist then you first need to create it with groupadd.

When you use the -G option you should also use the -a option to append new groups to the current list of supplementary groups that user 'hilder' belongs. Without the -a option you will replace current supplementary groups with a new group set. Therefore use this cautiously.

8

To change a user's primary group in Linux:

  • usermod -g new_group user_name
  • terminate all user_name's active sessions

To test your changes run id and look at the value of gid=

If the command runs without errors but the gid hasn't change you've missed the bold part of step 2.

1
  • terminate all user_name's active sessions is key
    – Kamil
    Apr 19, 2021 at 1:07
1

answer #1 is good, still you could also choose to issue the following to add a new group:

# nano /etc/group

The downside of editing /etc/group directly is that you will have to come up with an unused GID (group ID number).

The following will allow you to change the primary group of a user. # nano /etc/passwd

You locate the line of the user, and change the GID (group number, look it up in /etc/group), keep in mind that the syntax is as follows:

 <name>:*:<UID>:<GID>:<comment>:<directory>:<shell>

There is no downside I can think of to this approach (provided you know the GID), it is what I frequently use for local users, mainly because I use many different UNIX systems with differing usermod, adduser, and useradd command options.

It is a bit more manual, however does the job. Note that you can use vi iso nano to edit the files, if you know vi.

0

To permanently change the primary group of the user execute the:

  • usermod -g groupname username command

Or you could use newgrp for small environment and temporary situation.

Create a new user bob and a new group dodo.

useradd bob

So in RedHat/Centos we have UID=(ID_number) bob; GID=(ID_number) bob as primary group by default

groupadd dodo

Add the user bob to the dodo group:

usermod -aG dodo bob -make sure to use "a"

Next use newgrp to change ownership:

newgrp dodo

Be careful of your account to have a password and to be member of the future primary group. And the newgrp opens a new shell; as long as the user stays in that shell, the primary group won't change. To switch the primary group back to the original, you could leave the new shell by running the exit command.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .