Skip to main content

Command Palette

Search for a command to run...

Understanding Linux File Permissions: A Visual Guide

Updated
7 min read
Understanding Linux File Permissions: A Visual Guide

Introduction

Have you ever encountered a "Permission denied" error while trying to access a file on Linux? Or wondered what those cryptic rwxr-xr-- characters mean when you run ls -l? Understanding Linux file permissions is fundamental to working with any Unix-like operating system, whether you're a developer, system administrator, or just getting started with Linux.

In this comprehensive visual guide, we'll demystify Linux file permissions, explore how they work, and learn how to manage them effectively. By the end, you'll confidently navigate file ownership, permissions, and security on any Linux system.

What Are File Permissions?

File permissions in Linux are a security mechanism that controls who can read, write, or execute files and directories. Every file and directory has an associated set of permissions that determine three levels of access:

  1. Owner (User) - The user who owns the file

  2. Group - Users who are members of the file's group

  3. Others - Everyone else on the system

For each of these three categories, Linux defines three types of permissions:

  • Read (r) - View the file contents or list directory contents

  • Write (w) - Modify the file or directory contents

  • Execute (x) - Run the file as a program or access the directory

This combination of three permission types across three user categories creates a powerful and flexible security model.

Viewing File Permissions

Let's start by looking at how to view permissions. The ls -l command displays detailed information about files, including their permissions:

bash

$ ls -l
total 24
-rw-r--r-- 1 alice developers 1024 Dec 15 10:30 document.txt
-rwxr-xr-x 1 alice developers 2048 Dec 15 10:31 script.sh
drwxr-xr-x 2 alice developers 4096 Dec 15 10:32 my_directory
-rw-rw---- 1 alice developers  512 Dec 15 10:33 private.txt

Let's break down what each part means:

-rw-r--r-- 1 alice developers 1024 Dec 15 10:30 document.txt
│└┬┘└┬┘└┬┘ │  │     │          │    │            │
│ │  │  │  │  │     │          │    │            └─ Filename
│ │  │  │  │  │     │          │    └─ Modification time
│ │  │  │  │  │     │          └─ File size (bytes)
│ │  │  │  │  │     └─ Group name
│ │  │  │  │  └─ Owner name
│ │  │  │  └─ Number of hard links
│ │  │  └─ Others permissions (read, no write, no execute)
│ │  └─ Group permissions (read, no write, no execute)
│ └─ Owner permissions (read, write, no execute)
└─ File type (- = regular file, d = directory, l = symbolic link)

The Three Permission Types

1. Read Permission (r)

For Files:

  • View the file contents

  • Copy the file

  • Examples: cat, less, grep, cp

For Directories:

  • List the directory contents

  • See filenames inside the directory

  • Example: ls directory_name

Important Note: Read permission on a directory doesn't grant access to file contents, only to see the names of files in the directory.

2. Write Permission (w)

For Files:

  • Modify file contents

  • Delete the file (if directory also has write permission)

  • Rename the file (if directory also has write permission)

  • Examples: nano, vim, echo, rm

For Directories:

  • Create new files in the directory

  • Delete files from the directory

  • Rename files in the directory

  • Create subdirectories

  • Examples: touch, mkdir, rm, mv

Important Note: Write permission on a directory allows you to delete files even if you don't have write permission on the files themselves!

3. Execute Permission (x)

For Files:

For Directories:

  • Access (enter) the directory

  • Access files within the directory if you know their names

  • Make it the current directory with cd

  • Example: cd directory_name

Critical Note: Without execute permission on a directory, you cannot access ANY files in that directory, even if you have read permission on the directory!

The Three User Categories

1. Owner (User)

The user who owns the file. Usually the person who created it, but ownership can be transferred.

Example: Alice creates a file, so Alice is the owner.

2. Group

A collection of users who share access to files. Every file belongs to one group.

Example: Alice and Bob are both in the "developers" group, so files owned by this group are accessible to both.

3. Others (World)

Everyone else on the system who is neither the owner nor in the group.

Example: Any user on the system who isn't Alice and isn't in the "developers" group.

Permission Notation: Two Ways

Linux represents permissions in two different notations: symbolic (letters) and octal (numbers).

Symbolic Notation (rwx)

Uses letters to represent permissions:

  • r = read

  • w = write

  • x = execute

  • - = no permission

Format: rwxrwxrwx

  • First three characters = owner permissions

  • Second three characters = group permissions

  • Third three characters = others permissions

Examples:

rwxr-xr-x  Owner: read, write, execute | Group: read, execute | Others: read, execute
rw-r--r--  Owner: read, write | Group: read | Others: read
rwx------  Owner: read, write, execute | Group: none | Others: none
r--------  Owner: read only | Group: none | Others: none

Octal (Numeric) Notation

Uses numbers 0-7 to represent permissions. Each permission has a numeric value:

  • r (read) = 4

  • w (write) = 2

  • x (execute) = 1

Add these values together to get the permission number for each category.

Common Permission Values:

OctalBinarySymbolicMeaning
0000---No permissions
1001--xExecute only
2010-w-Write only
3011-wxWrite and execute
4100r--Read only
5101r-xRead and execute
6110rw-Read and write
7111rwxRead, write, and execute

Example Conversions:

rwxr-xr-x = 755
- Owner: rwx = 4+2+1 = 7
- Group: r-x = 4+0+1 = 5
- Others: r-x = 4+0+1 = 5

rw-r--r-- = 644
- Owner: rw- = 4+2+0 = 6
- Group: r-- = 4+0+0 = 4
- Others: r-- = 4+0+0 = 4

rwx------ = 700
- Owner: rwx = 4+2+1 = 7
- Group: --- = 0+0+0 = 0
- Others: --- = 0+0+0 = 0

Special Permissions

Beyond the basic read, write, and execute permissions, Linux has three special permission bits:

1. Setuid (Set User ID) - 4000

When set on an executable file, the program runs with the permissions of the file's owner, not the user who executed it.

2. Setgid (Set Group ID) - 2000

On Files: Program runs with the group permissions of the file's group.

On Directories: New files created in the directory inherit the directory's group, not the creator's default group.

3. Sticky Bit - 1000

When set on a directory, only the file owner, directory owner, or root can delete or rename files in that directory, even if others have write permission.

Conclusion

Understanding Linux file permissions is crucial for anyone working with Linux systems. While the concept might seem complex at first, the logic is straightforward:

  1. Three permission types: Read (r), Write (w), Execute (x)

  2. Three user categories: Owner (u), Group (g), Others (o)

  3. Two notations: Symbolic (rwx) and Octal (755)

  4. Three commands: chmod (change permissions), chown (change owner), chgrp (change group)

Mastering file permissions allows you to:

  • Secure sensitive data

  • Set up collaborative workspaces

  • Troubleshoot access issues

  • Configure servers correctly

  • Follow security best practices

Remember the principle of least privilege: start with restrictive permissions and open them up only as needed. When in doubt, use 644 for files and 755 for directories—these are safe defaults that work for most scenarios.

As you continue your Linux journey, file permissions will become second nature. Practice with the examples in this guide, experiment in a safe environment, and don't be afraid to check permissions frequently with ls -l. Happy securing!

Further Reading and Resources

  • man chmod: Detailed manual page (man chmod)

  • man chown: Ownership manual (man chown)

  • POSIX Permissions: Standards documentation

  • Advanced Topics: Access Control Lists (ACLs), SELinux contexts

  • Practice: Set up a local Linux VM and experiment safely

What permission challenges have you faced? Share your experiences in the comments below!

Tags: #Linux #FilePermissions #SystemAdministration #Security #DevOps #CommandLine #Tutorial