Understanding Linux File Permissions and Ownership

Harish Kumar · · 1925 Views

Linux file permissions are a critical cornerstone in the architecture of Linux systems, serving as a fundamental aspect of their security model. They meticulously define who can access files and directories, playing a pivotal role in system security and integrity. Proper file permissions, encompassing user permissions, group permissions, and other permissions, are indispensable for controlling access to files, thereby ensuring the safeguarding of Linux-based systems against unauthorized access.

The mastery of Linux file permissions, including the application of commands like chmod for modifying file access controls, is essential for anyone managing Linux environments, be it in Ubuntu or other distributions. This article aims to delve into the comprehensive guide on understanding and managing Linux permissions, covering key concepts such as file ownership types, viewing file permissions, and the nuances of changing permissions and ownership with chmod, chown, and chgrp commands.

Understanding Linux File System Permissions

Components of Linux File Permissions

  1. File Types and Owners
    Every file and directory in Linux is associated with a file type and an owner. The file type can be regular, directory, or special types like symbolic links, denoted by the initial letter in the permission string (e.g., - for regular files and d for directories). Files are owned by a user and a group which determine the default access controls .

  2. Permission Groups
    There are three main permission groups in Linux: owner, group, and others. Each group has specific permissions that can be set, including read (r), write (w), and execute (x). These permissions determine the level of interaction users can have with a file or directory .

  3. Symbolic and Numeric Representations
    Permissions are represented symbolically as r, w, x for read, write, and execute respectively, and numerically using octal values where read is 4, write is 2, and execute is 1. This numeric representation helps in setting permissions using commands like chmod .

Understanding Linux File Permissions and Ownership

The Basics of Linux User Types

Linux, an open-source operating system modeled on UNIX, supports multiple users. It offers three types of user classifications:

  1. Owner/User: This is the individual who created the file or directory. By default, they have the most permissions.

  2. Group: Refers to a collection of users. Each user who is part of a group will have the same level of access to a file.

  3. Others: This tag refers to all other users who aren't part of the user or group associated with the file or directory.

How Permissions Influence User Interactions

Read, Write, and Execute

Every file and directory in a Linux system has three types of permissions:

  1. Read (r): This grants permission to view the contents of a file or directory.

  2. Write (w): This grants permission to modify or delete the contents of a file or directory.

  3. Execute (x): This grants permission to run a file or change into a directory.

Special Permissions

Linux also supports special permissions such as SUID, SGID, and the sticky bit which are used for executing files with the permissions of the file owner or group, and maintaining privacy in shared directories.

Permission Checking Order

When a user attempts to access a file, Linux checks permissions in a specific order: first for the user (owner), then the group, and finally for others. This hierarchical checking ensures that specific user permissions override the more general group or others permissions.

Ownership and Permission Types

Types of File Permissions and Ownership

  1. Basic Permission Sets
    Linux file permissions are structured into three distinct sets: owner, group, and others. Each set controls different levels of access such as read (r), write (w), and execute (x). For instance, a permission string rw-r--r-- suggests that the owner has read and write permissions, while the group and others have only read permissions. This structure ensures a flexible and secure management system for file access across different user groups.

  2. Numeric Representation of Permissions
    Permissions can also be numerically represented using octal values, where the digits reflect the permissions for the owner, group, and others respectively. For example, the octal value 744 means the owner has full permissions (read, write, execute), whereas the group and others have only read permission. This numeric system simplifies the process of setting permissions using commands like chmod.

  3. Special Permissions and Security
    Beyond the basic permissions, Linux supports special permissions such as SUID, SGID, and sticky bits. SUID allows a file to be executed with the permissions of the file's owner, SGID executes a file with the permissions of the group owner, and sticky bits are used mainly in directories to restrict file deletion to the file's owner or root. These special permissions are crucial for maintaining security and functionality in multi-user environments.

Understanding Ownership Levels

  1. File Ownership Categories
    Each file and directory in Linux is owned by a user and a group, which are assigned at the time of file creation. Ownership can be viewed using the ls -l command and modified with the chown and chgrp commands. This ownership plays a critical role in determining the baseline access permissions before the specific read, write, or execute permissions are applied.

  2. Permission Groups Explained
    There are three main permission groups in Linux: owners, groups, and all users. Owners have the most specific permissions, followed by groups which can consist of multiple users, and finally, all users, which apply to everyone else. This hierarchy helps administer permissions in a structured manner, ensuring that users have appropriate access rights based on their group membership.

  3. Common Permission Configurations
    Typical permission settings include 644 for files, allowing the owner to read and write while the group and others can only read, and 755 for directories, enabling the owner full access and the group and others to read and execute. These settings are crucial for protecting sensitive data while allowing necessary accessibility for system operation.

Viewing File Permissions

To effectively manage and secure Linux systems, understanding how to view file permissions is essential. This section provides detailed instructions on using various commands and interfaces to check these permissions.

Using Command-Line Tools

  1. The ls -l Command:
    To view permissions in a terminal, use the ls -l command. This command lists out files with details like permissions, owner, and group. The output begins with the file type, followed by permission bits for the owner, group, and others .

  2. Detailed File Information with stat:
    For more comprehensive details, the stat command can be employed. It provides information such as file access, modification times, Inode, and size, alongside the standard permission data.

Using Graphical Interface

  1. File Properties Window:
    In a graphical environment like GNOME or KDE, locate the file, right-click on the icon, and select "Properties". Navigate to the "Permissions" tab where the permission settings for the owner, group, and others are displayed. This method is particularly useful for users who prefer a visual approach to system management.

Understanding Output and Symbols

  1. Interpreting ls -l Output:
    The first character of the output indicates the file type (e.g., for regular files and d for directories). The next nine characters are divided into three sets, representing the permissions for the owner, group, and others respectively. For example, -rw-r--r-- shows a regular file where the owner can read and write, the group can read, and others can also read .

By familiarizing oneself with these commands and interfaces, users can effectively monitor and manage file permissions, ensuring robust security and operational efficiency in their Linux environments.

Changing File Permissions with chmod

To effectively manage Linux file permissions, the chmod command is indispensable. This command allows users to alter the file access permissions using either numeric or symbolic modes, ensuring appropriate access rights are maintained.

Numeric and Symbolic Modes Explained

Numeric Mode:

  1. Each permission level is represented by an octal number: read (4), write (2), and execute (1)

  2. Permissions for user, group, and others are set using a three-digit code, for example, chmod 754 filename grants full permissions to the owner, read and execute to the group, and only read to others . 

Symbolic Mode:

  1. Utilizes letters to denote user classes (u for user, g for group, o for others) and permissions (r, w, x). 

  2. Commands like chmod u+rwx, g+rw, o+r filename adjust permissions directly for each class.

Command in OCTAL Notation

Change in USER (U) Permissions

Change in GROUP (G) Permissions

Change in OTHERS (O) Permissions

chmod 777 foo

✓ Read
✓ Write
✓ Execute

✓ Read
✓ Write
✓ Execute

✓ Read
✓ Write
✓ Execute

chmod 501 foo

✓ Read
☐ Write
✓ Execute

☐ Read
☐ Write
☐ Execute

☐ Read
☐ Write
✓ Execute

chmod 365 foo

☐ Read
✓ Write
✓ Execute

✓ Read
✓ Write
☐ Execute

✓ Read
☐ Write
✓ Execute

chmod 177 foo

☐ Read
☐ Write
✓ Execute

✓ Read
✓ Write
✓ Execute

✓ Read
✓ Write
✓ Execute

Symbolic and Octal Notations

Symbolic Notation (ls -l)

Binary Representation

Octal Notation


111 101 101



110 100 100



111 000 000



101 101 101


Practical Usage of chmod

  1. Adding Permissions: To add execute permissions to a file, one would use chmod +x filename.

  2. Removing Permissions: Conversely, removing write permissions can be done with chmod -w filename.

  3. Setting Exact Permissions: To set exact permissions irrespective of previous settings, chmod u=rwx,g=rx,o=r filename would be used, making adjustments clear and straightforward.

Advanced chmod Configurations

  1. Recursive Permission Changes: For directories with multiple files or subdirectories, applying permissions recursively is possible using the -R option, such as chmod -R 755 directoryname, which applies read, write, and execute permissions to the owner and read and execute permissions to others for all contained files.

  2. Special Permissions: The chmod command also handles special permissions like SUID, SGID, and sticky bits, which are crucial for tasks requiring elevated privileges or restricted deletion rights.

By mastering these commands and understanding their implications, users can ensure their Linux systems are secure and functional, adhering to necessary access protocols.

Changing Ownership with chown and chgrp

Overview of chown and chgrp Commands

The chown and chgrp commands are fundamental tools in Linux for managing file and directory ownership. The chown command allows for the modification of the owner and the group of a file or directory, using syntaxes like chown user:group filename for simultaneous changes, or chown user filename to change just the owner. Alternatively, chown user.group filename utilizes dot notation to achieve the same effect. This flexibility makes chown invaluable in environments like private servers where file ownership frequently needs adjustment.

Using chown and chgrp Commands

  1. Changing Owner: To change the owner of a file, use the command chown newowner filename. This command reassigns the ownership of the file to 'newowner'.

  2. Changing Group: The chgrp command is specifically used for changing the group ownership of a file or directory. Executing chgrp newgroup filename will transfer the group ownership to 'newgroup'.

  3. Recursive Ownership Change: For changing the ownership of all files and directories within a directory recursively, use chown -R user:group directoryname. This command is particularly useful for administrators who need to update permissions across numerous files and subdirectories efficiently.

Practical Applications and Considerations

The chown command is not only used to change the owner but also to modify the group when specified with the colon syntax, making it a versatile tool for comprehensive permission management. On the other hand, chgrp is straightforward for scenarios where only the group ownership needs alteration. It's crucial for users to have appropriate permissions to execute these commands, typically necessitating superuser privileges, especially in multi-user environments where file access needs strict regulation to maintain system security and functionality.


Through this extensive exploration of Linux file permissions, we've unveiled the critical importance of understanding and managing access controls within Linux systems. The guide has dissected the complexities surrounding the classification of permissions, the practical application of commands like chmod, chown, and chgrp, and the significant impact that proper permission handling has on system security and efficiency. By encapsulating the foundational elements of file types, ownership, and detailed permission sets, readers are equipped with the knowledge to navigate the Linux permission landscape with confidence, ensuring the safeguarding of system integrity against unauthorized access.

Reflecting on the broader implications of our discussion, the articulation of Linux permissions not only strengthens individual system security but also fortifies the overall resilience of Linux environments in varied applications. The encouragement toward further exploration and application of these principles signifies a step toward mastering Linux administration and contributes to the cultivation of more secure computing environments. As the landscape of digital security evolves, the principles and practices outlined here will continue to serve as an indispensable resource for users and administrators alike, advocating for a vigilant and informed approach to system management and data protection.


  1. What are the three types of permissions available in Linux?
    In Linux, permissions are categorized into three types based on the type of owner: user, group, and others. Each category can have permissions set for reading, writing, and executing files. The chmod command is commonly used to change these permissions.

  2. What does the permission code 777 signify in Linux?
    The permission code 777 in Linux grants full access, allowing all users to read, write, and execute the file or directory.

  3. What does the permission code 755 signify in Linux?
    The permission code 755 in Linux allows the file owner to read, write, and execute the file. Meanwhile, it only allows other users to read and execute the file, but they cannot modify it.

  4. What are the different groups of permissions in Linux?
    Linux categorizes permissions into four main groups: 
    u for the Owner. 
    g for the Group. 
    o for Others. 
    a for All users. These groups help define who can access and modify files.


Please login or create new account to add your comment.

You may also like:

How To Install NVM (Node Version Manager) on Ubuntu System?

This tutorial will assist you with installing NVM on the Ubuntu machine. Additionally, allow you to install different node versions and other useful examples.
Harish Kumar

Install Laravel Valet Linux+ development environment on Ubuntu System

The official Laravel Valet development environment is great if you are an Apple user. But there is no official Valet for Linux or Window system.
Harish Kumar

Install and Setup Oh-My-Zsh on Ubuntu System

In this post, I will show you how to install ZSH (Z-Shell). Then, we set up the oh-my-zsh framework for managing ZSH. We will likewise show you how to change the ZSH theme and (...)
Harish Kumar

10 Things to Do After Installing Ubuntu Operating System

In this article, I will show you 40 things you can do after installing Ubuntu on your system. This isn't restricted to a specific version of Ubuntu; you can follow these on any (...)
Harish Kumar

Ubuntu Installation step by step guide with disk partitioning

Ubuntu is the most loved OS for many desktop users, particularly for developers. Canonical releases new Ubuntu versions every six months with free support for nine months and every (...)
Harish Kumar

How to Install phpMyAdmin with Nginx on Ubuntu Server?

The phpMyAdmin is an open-source PHP-based tool for handle MySQL and MariaDB databases over a web-based interface. 
Harish Kumar