User provisioning is one of the routine tasks that Linux system administrators carry out from time to time. In this tutorial, I will first explain the differences between the adduser
and useradd
command line tools and then show you how to create a user in Linux using both of these with clear examples.
Linux user groups
There are two broad categories of users in Linux: regular and system users. Regular users are created by the root or administrative user (sudo user). These users have login capabilities and home directories that contain personal files and folders.
On the other hand, Linux system users are created by the system during the installation of the operating system or software applications. They are used by the system to run services.
Note: For further guidance on managing Linux users, check our guide on how to list users in Linux.
How to create a user in Linux?
The adduser
and useradd
are command-line tools used to create new users in Linux/UNIX systems. The two carry out the same task but employ a different execution method. So, let's dive right in; below, I'll explain each method with a specific example of how to create a user in Linux.
Option 1: The adduser command
The adduser
command-line tool is a utility native to Debian-based distributions such as Ubuntu, Debian, and Mint to create a user in Linux. It's a powerful and more user-friendly command-line utility for adding users than the useradd
command. It provides an interactive approach for adding users where user creation is displayed step-by-step on the screen.
The adduser
command syntax is pretty straightforward. You simply type adduser
followed by the name of the user that you want to create.
sudo adduser username
For example, to create a new user called alex
, run the command:
sudo adduser alex
Once invoked, the command creates a new user and group that bears the username of the user being created. It then adds the user to the group and creates a home directory for the user. In addition, it copies files from the /etc/skel
directory to the new user’s home directory.
The /etc/skel
directory contains files and directories required in the new user’s directory. These include the .bashrc
, .bash_logout
, and .profile
configuration files.
Next, you will be prompted to provide the user’s password. Once you have provided and confirmed the password, you will be required to provide additional information about the user, such as full name, room number, work phone, and home phone. Fill in the information where applicable, or hit ENTER to skip.
To save the information provided, type ‘Y’ and hit ENTER.
To confirm the creation of the user, run the id
command followed by the username of the user.
id alex
This prints out the UID (User ID), GID ( Group ID), and the groups that the user belongs to. Alternatively, you can view the /etc/passwd
file, which is a colon-separated file that stores user information.
cat /etc/passwd | grep -i alex
As you can see, the adduser
command is straightforward and easy to use, especially for beginners. Also, note that the command requires root or superuser privileges. That implies you will always have to run it as root or invoke sudo
before the command if you are running it as a sudo user.
Option 2: The useradd command
The useradd
is another command-line utility for creating users in a Linux system. It comes included in all Linux distributions by default. Like its counterpart adduser
command, only root or sudo users can create new accounts with useradd
.
The useradd
utility refers to the /etc/login.defs
file, from where it applies default user parameters such as the range of User IDs and Group IDs, password aging controls, login timeout, etc.
The syntax for the useradd
command is as follows.
useradd [OPTIONS] username
Various options can be used alongside the useradd
command to specify user attributes. Let’s look at some of the commonly used useradd
command-line options.
1. Create a new user without any options
The useradd
command can be used to create a user without invoking any command-line options. For example, to create a user called alice
, run the command:
sudo useradd alice
The command appends an entry to the /etc/passwd, /etc/shadow, /etc/gshadow and /etc/group files.
Next, set the password using the passwd
command to enable the user to login to the system. So, invoke the passwd
command followed by the username.
passwd alice
Be sure to provide a strong password and confirm it.
Once done, confirm that the user has been created by running the id
command.
id alice
Additionally, you can search for the user’s entry in the /etc/passwd
file as shown.
cat /etc/passwd | grep -i alice
2. Create a User with a Specific User ID
By default, the system automatically assigns the next available UID from the range of user IDs contained in the /etc/login.defs
file.
The -u (--uid) option allows you to define a specific User ID for the user.
For example, to create a user called bob
with a UID of 1005
, run the command:
sudo useradd -u 1005 bob
Once again, you can verify the UID using the id
command:
id bob
From the output below, you can see that the user bob
has acquired a UID of 1005
, which also happens to be its GID.
3. Create a User with a Specific Group ID
When a new user is created, it belongs to a primary group whose Group ID ( GID ) is the same as the User ID ( UID ). Suppose you want to assign a different GID other than the default. You can achieve this by passing the -g (--gid) option and specifying the group name or GID number.
For example, to create a user called john
with a GID of 100
, run the command:
sudo useradd -g 100 john
Alternatively, you can specify the group name corresponding to the GID number. In this case, the users
group corresponds to GID 100
sudo useradd -g users john
You can verify the group the user belongs to using the id
command:
id -gn john
OR
id john
NOTE
The group that the user is being added to must already exist for this operation to be successful.
4. Create a Linux user and assign multiple groups
A Linux user can belong to two broad categories of groups: exactly one primary group, which is the default group, and one or multiple secondary groups.
You can pass the -G (--groups)
option to specify one or more secondary groups that the user can be a part of. For instance, in the command below, we are creating a user called mark
with a primary group called users
and belonging to secondary groups called wheel
, kvm
, and ftp
.
sudo useradd -g users -G wheel,kvm,ftp mark
To verify this, once again, run the id
command.
id mark
5. Create a new user with a home directory
A home directory is a login directory that contains the user's files and folders as well as environment setting files. This is the directory a user lands into upon login.
In older Linux distributions, the home directory is not created by default using the useradd
command.
Pass the -m (--create-home)
option to create a user home directory in the /home/<username>
path.
For instance, to create a user called patrick
with a home directory in the /home/patrick
path, run the command:
sudo useradd -m patrick
You can confirm the creation of the user’s home directory using the ls -la
command as shown.
ls -la /home/patrick
The output lists the user’s initialization files which are typically present in any user’s home directory.
6. Create a user with a unique home directory
As you can see, the default user's home directory is in the /home
directory. To specify a different location, pass the `-d' option.
In the following example, we create a new user called bill
with the home directory specified as opt/bill
.
sudo useradd -m -d /opt/bill bill
7. Create a user without a home directory
If you wish to exclude the creation of the user’s home directory, pass the -M
option followed by the username. In the following example, we create a new user called sandra
without the home directory.
sudo useradd -M sandra
To verify that the system skipped creating the home directory, run the command:
sudo ls -la /home/sandra
From the output, the contents of the home directory were not listed for the simple reason that the directory was not created.
8. Create a user with a specific comment
A comment is simply a short description of the user. I can include anything from a phone number, job title, residence, etc. To add a description, use the -c
option.
In this example, we are creating a new user called george
with the job title "Human Resource Manager" as the comment.
sudo useradd -c "Human Resource Manager" george
9. Create a user with an account expiry date
Lastly, you can create a new user and enforce an account expiry date. Once the account expires, the user will no longer be able to log in. This is mostly used when creating temporary users.
The expiry date is expressed in YYYY-MM-DD format.
For example, to create a new user called kristin
whose account expires on 2024-06-10
, run the command:
sudo useradd -e 2024-06-10 kristin
Invoke the chage
command to confirm the user account expiry date.
sudo chage -l kristin
Conclusion
In this tutorial, I've demonstrated how to create a user in Linux and add users using either the adduser
or useradd
command-line utilities. The adduser
command is an interactive utility available for Debian and Ubuntu-based Linux distributions, whereas the useradd
command works across all Linux distributions.