How to manage users with useradd in linux

In this guide we are going to explore how to use useradd to manage users in Linux. useradd allows you to add users in linux with specific properties, limitations, or comments.

useradd command is a low-level utility that is used for adding/creating user accounts in Linux and other Unix-like operating systems.

Linux is a multi-user system, which means that more than one person can interact with the same system at the same time. These users needs to be created before they use the system.

When invoked, useradd creates a new user account according to the options specified on the command line and the default values set in the /etc/default/useradd file. useradd also reads the content of the /etc/login.defs file. This file contains configuration for the shadow password suite such as password expiration policy, ranges of user IDs used when creating system and regular users, and more.

Only root or users with sudo privileges can use the useradd command to create new user account. When invoked, useradd creates a new user account according to the options specified on the command line and the default values set in the /etc/default/useradd file.

  • It edits /etc/passwd, /etc/shadow, /etc/group and /etc/gshadow files for the newly created user accounts.
  • Creates and populates a home directory for the new user.
  • Sets permissions and ownerships to the home directory.

Table of Content

  1. Create a New User
  2. Add a New User and Create Home Directory
  3. Create a User with Different Home Directory
  4. User with a Specific User ID
  5. User with a Specific User ID
  6. Add a User to Multiple Groups
  7. User without Home Directory
  8. User with Account Expiry Date
  9. User with Password Expiry Date
  10. Adding Custom Comments to user
  11. Specifying a User Login Shell
  12. Creating a System User
  13. Chaining the arguments
  14. Changing the Default useradd Values
  15. Deleting a User From Linux
  16. Adding a Group in Linux
  17. Change User’s Group

1. Create a New User

Basic syntax of the useradd command is:

# sudo useradd [options] username

Example:

sudo useradd citizix

When we add a new user in Linux with the useradd command, it gets created in a locked state and to unlock that user account, we need to set a password for that account with the passwd command.

$ sudo passwd citizix
Changing password for user citizix.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

An entry is automatically added to the /etc/passwd file:

$ cat /etc/passwd | grep citizix
citizix:x:1001:1001::/home/citizix:/bin/bash

The fields in the /etc/passwd are separated by colon : and they represent the following:

  • Username: User login name used to login into the system. It should be between 1 to 32 characters long.
  • Password: User password (or x character) stored in /etc/shadow file in encrypted format.
  • User ID (UID): Every user must have a User ID (UID) User Identification Number. By default, UID 0 is reserved for the root user and UID’s ranging from 1-99 are reserved for other predefined accounts. Further UID’s ranging from 100-999 are reserved for system accounts and groups.
  • Group ID (GID): The primary Group ID (GID) Group Identification Number stored in the /etc/group file.
  • User Info: This field is optional and allows you to define extra information about the user. For example, user full name. This field is filled by the ‘finger’ command.
  • Home Directory: The absolute location of the user’s home directory.
  • Shell: The absolute location of a user’s shell i.e. /bin/bash.

2. Add a New User and Create Home Directory

Use the -m (--create-home) option to create the user home directory as /home/username:

sudo useradd -m username

The command above creates the new user’s home directory and copies files from /etc/skel directory to the user’s home directory.

3. Create a User with Different Home Directory

By default, the useradd will create a home directory in with the same name as the username. To create a different home directory use the -d argument with the path to that directory.

This command creates home directory /opt/citizixone for user citizixone.

sudo useradd -d /opt/citizixone citizixone

Check in /etc/passwd

$ cat /etc/passwd | grep citizixone
citizixone:x:1002:1002::/opt/citizixone:/bin/bash

4. User with a Specific User ID

If you need to specify a user id for the user being created use the argument -u (--uid) like this:

sudo useradd -u 1009 citizix

5. Specific Group ID

To specify a group id, use the -g (--gid) option like in this example:

sudo useradd -g citizix citizixtwo

Verify the user’s GID with this command:

$ sudo id citizixtwo
uid=1003(citizixtwo) gid=1001(citizix) groups=1001(citizix)

$ cat /etc/passwd | grep citizixtwo
citizixtwo:x:1003:1001::/home/citizixtwo:/bin/bash

6. Add a User to Multiple Groups

If you want to add a user to multiple groups, use the -G (--groups) option like in this example:

Append the user citizix to groups admins, webadmin, developers:

sudo usermod -a -G admins,webadmin,developers citizix

Create a user citizixtwo adding it to groups admins, webadmin, developers:

sudo useradd -G admins,webadmin,developers citizix

Use these commands to verify that the users are added to the groups successfully:

sudo id citizix
sudo id citizixtwo

7. User without Home Directory

If you want to create a user without a home directory, use the -M option:

sudo useradd -M citizix

8. User with Account Expiry Date

Sometimes you want to create a user with expiry date. Use this command to create a user citizixfour that will expire on 2021-12-30:

sudo useradd -e 2021-12-30 citizixfour

To verify the age of the account and password use the chage command:

$ sudo chage -l citizixfour
Last password change                    : Oct 08, 2021
Password expires                    : never
Password inactive                   : never
Account expires                     : Dec 30, 2021
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

9. User with Password Expiry Date

The -f argument is used to define the number of days that the user is inactivated after a password expires. A value of `` inactivate the user account as soon as the password has expired. By default, the password expiry value set to -1 means never expire.

Here in this example, we will set an account password expiry date to be 45 days on a user citizixfive using -e and -f options.

sudo useradd -e 2021-12-30 -f 45 citizixfive
sudo chage -l citizixfive

10. Adding Custom Comments to user

The -c (--comment) option adds a short description for the new user. Typically the user’s full name or the contact information are added as a comment.

sudo useradd -c "Citizix User" citizixsix

Check the /etc/passwd

$ cat /etc/passwd | grep citizixsix
citizixsix:x:1006:1006:Citizix User:/home/citizixsix:/bin/bash

11. Specifying a User Login Shell

The -s (--shell) option is used to specify a login shell. We can either use one of the installed shells like /bin/bash or bin/zsh or for users who have nothing to do with the login shell we can do /sbin/nologin to specify that there is no login shell:

# Specify /bin/zsh
sudo useradd -s /bin/zsh citizix

# Specify no login
sudo useradd -s /sbin/nologin citizix

12. Creating a System User

Sometimes we need System users that will be used by either the system or applications that we install in the system.
Use the -r (--system) argument to define a system user:

sudo useradd -r grafana

13. Chaining the arguments

We can also chain the arguments when creating a user.

Check this example creating a user while creating a specified home directory /var/www/citizix and defining a custom login shell /bin/zsh and adding a comment Citizix Web User:

sudo useradd -m -d /var/www/citizix -s /bin/zsh -c "Citizix Web User" -U citizix

14. Changing the Default useradd Values

The useradd defaults are stored in the file /etc/default/useradd.

Checkout content of /etc/default/useradd:

$ cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

You can also query them using the argument -D for useradd command:

$ sudo useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

To update or change these values, either edit the file or use the useradd -D passing the values.

Example changing the login shell from /bin/bash to /bin/zsh

sudo useradd -D -s /bin/zsh

Let’s verify that it was updated:

$ sudo useradd -D | grep -i shell
SHELL=/bin/zsh

15. Deleting a User From Linux

To delete a user, use the userdel command:

sudo userdel citizixfive

16. Adding a Group in Linux

To manually create a group, use the command.

This creates a group sftp-users in our system:

sudo groupadd sftp-users

Let us confirm that the group was created

$ sudo grep sftp-users /etc/group
sftp-users:x:1007:

Use the command -G for other groups (-G adds the user to a new group but also keeps them in the old one (append).

Use the id command to confirm

sudo id citizix

17. Change User’s Group

To create a user and change its primary group to the one specified, use the -g option:

sudo useradd -g citizix citizixseven

Conclusion

We have explored how to do basic operations with the useradd commands. We managed to create users, add them to groups and modify them or delete them.

You can use the manpages to learn more about the useradd command:

man useradd

To check all options for the useradd, type the command in terminal with no option:

$ useradd
Usage: useradd [options] LOGIN
       useradd -D
       useradd -D [options]

Options:
  -b, --base-dir BASE_DIR       base directory for the home directory of the
                                new account
  -c, --comment COMMENT         GECOS field of the new account
  -d, --home-dir HOME_DIR       home directory of the new account
  -D, --defaults                print or change default useradd configuration
  -e, --expiredate EXPIRE_DATE  expiration date of the new account
  -f, --inactive INACTIVE       password inactivity period of the new account
  -g, --gid GROUP               name or ID of the primary group of the new
                                account
  -G, --groups GROUPS           list of supplementary groups of the new
                                account
  -h, --help                    display this help message and exit
  -k, --skel SKEL_DIR           use this alternative skeleton directory
  -K, --key KEY=VALUE           override /etc/login.defs defaults
  -l, --no-log-init             do not add the user to the lastlog and
                                faillog databases
  -m, --create-home             create the user's home directory
  -M, --no-create-home          do not create the user's home directory
  -N, --no-user-group           do not create a group with the same name as
                                the user
  -o, --non-unique              allow to create users with duplicate
                                (non-unique) UID
  -p, --password PASSWORD       encrypted password of the new account
  -r, --system                  create a system account
  -R, --root CHROOT_DIR         directory to chroot into
  -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
  -s, --shell SHELL             login shell of the new account
  -u, --uid UID                 user ID of the new account
  -U, --user-group              create a group with the same name as the user
  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user mapping
Last updated on Oct 14, 2024 11:46 +0300
comments powered by Disqus
Citizix Ltd
Built with Hugo
Theme Stack designed by Jimmy