In any operating system, users and groups play a crucial role in managing access and permissions. When a process runs, it operates under the identity of a specific user—whether it’s Jane, Bob, or a system service. File access and ownership are strictly permission-based, ensuring that users cannot view or modify files they don’t have permission for. For example, Jane should not be able to access Bob’s private documents unless explicitly allowed.
Each user has a home directory where their personal files are stored. This directory is usually located at:
/home/username
(though this may vary depending on the Linux distribution).
User Identification (UID) and Group Identification (GID)
- Linux identifies users by User IDs (UIDs) rather than just usernames. Usernames are a more human-friendly way to manage accounts, but the system uses UIDs for internal processes.
- Groups help organize users with common permissions. Groups are identified by Group IDs (GIDs) and allow multiple users to share access to certain files or system functions.
System Users and the Root User
In addition to human users, Linux also has system users. These accounts are primarily used for system services and background processes (daemons) that keep the system running smoothly.
One of the most important users is the root user (also called the superuser). The root user has complete control over the system, including access to all files and the ability to start or terminate any process. However, using the root account all the time can be risky, as accidental actions (like deleting system-critical files) can cause major issues.
Using sudo for Root Privileges
Instead of logging in as root, a safer method is to use the sudo command (short for “superuser do”). This allows an authorized user to run specific commands with root privileges.
For example, let’s try to view a restricted file, such as /etc/shadow, which stores password hashes. Run:
$ cat /etc/shadow
You’ll likely see a Permission Denied error. Now, check the file’s permissions:
$ ls -la /etc/shadow
Example output:
-rw-r----- 1 root shadow 1134 Dec 1 11:45 /etc/shadow
This means only the root user and members of the shadow group can access it.
To view the file with root access, use sudo:
$ sudo cat /etc/shadow
Now, you’ll be able to see the file’s contents!
Using Root (Superuser) Access in Linux
Previously, we discussed how to gain superuser (root) access using the sudo command. Another method to execute commands as the superuser is by using the su command.
Using the su Command
The su command stands for “substitute user” and allows you to switch to another user account. If no username is specified, it defaults to the root user, opening a root shell. To use it, simply enter:
$ su
You’ll be prompted to enter the root password. If entered correctly, you will have full superuser privileges.
Why su is Risky
Although su provides root access, there are some disadvantages:
- Higher Risk of Mistakes: Running the entire session as root increases the chances of accidentally modifying or deleting critical system files.
- Lack of Command Tracking: Unlike
sudo, commands executed viasuare not logged, making it harder to track system changes.
For these reasons, it is generally safer to use sudo instead of su when executing commands that require elevated privileges.
Who Can Use sudo?
Not every user is allowed to execute commands as superuser. The system restricts root access to specific users for security reasons.
The /etc/sudoers file determines which users or groups have permission to use sudo. To modify this file safely, use the visudo command:
$ sudo visudo
This ensures that changes are properly validated before saving, preventing syntax errors that could lock users out of administrative access.
Understanding the /etc/passwd File in Linux
In Linux, usernames are just human-friendly labels, but the system actually identifies users using a User ID (UID). To see which users are mapped to which UIDs, you can check the /etc/passwd file.
Viewing the /etc/passwd File
To display the contents of this file, use the following command:
$ cat /etc/passwd
This file contains a list of users, with each line representing a single user. The first line usually looks like this:
root:x:0:0:root:/root:/bin/bash
Each line contains several fields, separated by colons (:). Let’s break them down:
- Username – The name of the user (e.g.,
root). - Password Placeholder – This usually contains an
x, meaning the encrypted password is stored in the/etc/shadowfile. Other symbols include:x→ Password stored in/etc/shadow*→ User cannot log in- Empty field → User has no password
- User ID (UID) – A unique number identifying the user (
rootalways has UID0). - Group ID (GID) – The primary group associated with the user.
- GECOS Field – Stores additional user information, such as the real name or contact details (comma-separated).
- Home Directory – The default directory where the user’s personal files are stored (
/rootforroot,/home/usernamefor regular users). - Shell – The default command-line shell assigned to the user (e.g.,
/bin/bash).
System Users vs. Human Users
You may notice many users listed in /etc/passwd that are not actual people. These are system users, created to run background processes (daemons) with specific permissions. For example, the daemon user is assigned to daemon processes.
Modifying the /etc/passwd File
While it’s possible to manually edit /etc/passwd to add or modify user details, it is not recommended. Instead, use tools like:
useradd– To create new usersuserdel– To remove usersvipw– To safely edit the/etc/passwdfile
Understanding /etc/passwd is essential for managing user accounts and system security in Linux! 🚀
Understanding the /etc/shadow File in Linux
The /etc/shadow file is responsible for storing user authentication details, including encrypted passwords and password policies. Since this file contains sensitive information, it requires superuser permissions to view.
Viewing the /etc/shadow File
To display its contents, use:
$ sudo cat /etc/shadow
Example entry:
root:MyEPTEa$6Nonsense:15000:0:99999:7:::
At first glance, it looks similar to /etc/passwd, but instead of just a placeholder, the second field contains an encrypted password. The fields, separated by colons (:), represent:
- Username – The name of the user (e.g.,
root). - Encrypted Password – The user’s hashed password (if it contains
!or*, the account is locked). - Last Password Change Date – The number of days since January 1, 1970 when the password was last changed (
0means the user must change it at next login). - Minimum Password Age – The minimum number of days before the password can be changed again.
- Maximum Password Age – The maximum number of days before the password must be changed.
- Password Warning Period – Number of days before password expiration that the system starts warning the user.
- Password Inactivity Period – Number of days after the password expires that the user can still log in.
- Account Expiration Date – The date after which the user account is disabled.
- Reserved Field – Currently unused, reserved for future use.
Modern Authentication Methods
While /etc/shadow plays a crucial role, many modern Linux distributions don’t rely solely on it for authentication. Instead, they use PAM (Pluggable Authentication Modules), which provides flexible and enhanced authentication mechanisms.
Understanding /etc/shadow is key to managing password security and user authentication on a Linux system! 🔐
Understanding the /etc/group File in Linux
The /etc/group file is used for managing user groups and their associated permissions. Groups help control access to files, directories, and system resources by grouping users together under specific permission sets.
Viewing the /etc/group File
To see its contents, use:
$ cat /etc/group
Example entry:
root:*:0:pete
The fields in /etc/group, separated by colons (:), are:
- Group Name – The name of the group (e.g.,
root). - Group Password – A placeholder (
*), as group passwords are rarely used. Instead, sudo or other privilege escalation methods are preferred. - Group ID (GID) – The unique identifier assigned to the group.
- List of Users – A comma-separated list of users who are members of the group (e.g.,
pete).
Managing Groups
Users can be manually added to groups in this file, but it’s recommended to use commands like:
groupadd– Create a new groupusermod -aG groupname username– Add a user to a groupgroups username– Show a user’s group memberships
Groups provide an efficient way to manage permissions and ensure controlled access to system resources.
User Management Tools in Linux
In enterprise environments, centralized user management systems handle user accounts and passwords. However, on a standalone machine, Linux provides command-line tools for managing users efficiently.
Adding Users
Users can be added using either the useradd or adduser command. The adduser command is more user-friendly, as it automatically creates a home directory and applies default settings.
$ sudo useradd alice
This command:
- Creates an entry for
alicein/etc/passwd. - Sets up default groups for the user.
- Adds a corresponding entry in
/etc/shadowfor authentication.
Removing Users
To delete a user, use the userdel command:
$ sudo userdel alice
This attempts to reverse the changes made by useradd, removing the user’s account.
Changing Passwords
To change the password for yourself or another user (if you have root privileges):
$ passwd alice
This command updates the user’s password, modifying the /etc/shadow file accordingly.
These tools provide an easy way to manage local users on a Linux system.
Skip to content

