Post

Mastering Linux Permissions: From chmod to umask

Mastering Linux Permissions: From chmod to umask

nix

Understanding how Linux handles file access is a cornerstone of system administration. Whether you are troubleshooting a “Permission Denied” error or securing a web server, you need to know how to manipulate the permission bits effectively.

1. Understanding umask (The Default Filter)

Before a file is even created, the umask (user mask) determines its starting permissions. Think of it as a filter that “strips away” permissions from the system defaults.

  • System Defaults: * Files: 666 (rw-rw-rw-)
    • Directories: 777 (rwxrwxrwx)
  • How it works: If your umask is 002, the system subtracts that from the default.
    • Example: 777 (Dir) - 002 = 775.

Common umask settings:

  • umask 022: Common default. Gives the owner full access, but others can only read/execute.
  • umask 077: Tightened security. Only the owner has access; all permissions for group and others are stripped.

2. Symbolic Permissions (The “Wordly” Way)

Symbolic mode is often more intuitive when you want to add or remove a specific permission without calculating the entire bitmask.

Objects: u (user), g (group), o (others), a (all)
Operators: + (add), - (remove), = (set exactly)

Examples:

  • Add write for group: chmod g+w file2
  • Remove write from others: chmod o-w file2
  • Set group to read/write only: chmod g=rw file2
  • Make a script executable for everyone: chmod a+x file2

Note: There is a subtle difference between chmod +x and chmod a+x. On some systems, +x only adds execution for the user/owner if the umask allows, while a+x explicitly applies it to all.


3. Numeric Permissions (The “Octal” Way)

When you need to set the entire permission string at once, numeric mode is the fastest method.

layout: post title: “Mastering Linux Permissions: From chmod to umask” date: 2026-02-07 categories: [Linux, DevOps] tags: [security, terminal, sysadmin] —

Understanding how Linux handles file access is a cornerstone of system administration. Whether you are troubleshooting a “Permission Denied” error or securing a web server, you need to know how to manipulate the permission bits effectively.

1. Understanding umask (The Default Filter)

Before a file is even created, the umask (user mask) determines its starting permissions. Think of it as a filter that “strips away” permissions from the system defaults.

  • System Defaults: * Files: 666 (rw-rw-rw-)
    • Directories: 777 (rwxrwxrwx)
  • How it works: If your umask is 002, the system subtracts that from the default.
    • Example: 777 (Dir) - 002 = 775.

Common umask settings:

  • umask 022: Common default. Gives the owner full access, but others can only read/execute.
  • umask 077: Tightened security. Only the owner has access; all permissions for group and others are stripped.

2. Symbolic Permissions (The “Wordly” Way)

Symbolic mode is often more intuitive when you want to add or remove a specific permission without calculating the entire bitmask.

Objects: u (user), g (group), o (others), a (all)
Operators: + (add), - (remove), = (set exactly)

Examples:

  • Add write for group: chmod g+w file2
  • Remove write from others: chmod o-w file2
  • Set group to read/write only: chmod g=rw file2
  • Make a script executable for everyone: chmod a+x file2

Note: There is a subtle difference between chmod +x and chmod a+x. On some systems, +x only adds execution for the user/owner if the umask allows, while a+x explicitly applies it to all.


3. Numeric Permissions (The “Octal” Way)

When you need to set the entire permission string at once, numeric mode is the fastest method.

ValuePermissionSymbol
4Readr
2Writew
1Executex
0None-

The Formula: Read (4) + Write (2) + Execute (1) = Total

Common Octal Examples:

  • chmod 666 file2: Everyone can read and write (no execution).
  • chmod 755 dir1: Owner can do everything; nix others can only read and enter the directory.
  • chmod 744 file2: Owner has full control; group/others can only read.
  • chmod 006 file2: Only “others” can read and write. (User and Group have 0).

4. Directory Specifics & Special Bits

nix

Directories behave slightly differently than files:

  • Read (r): Allows you to ls (list) the files inside.
  • Execute (x): The minimum permission required to “enter” (cd) into a directory.

The Recursive Flag

If you want to change permissions for a folder and everything inside it, use the -R flag: chmod -R a+x /path/to/directory

Capital X vs. lowercase x

  • chmod -R +x: Makes every single file and folder executable. (Usually a bad idea!)
  • chmod -R +X: This is “smart” execution. It only adds the execute bit to directories (so you can enter them) and files that already have an execute bit set.

5. Ownership: chown and chgrp

Permissions are meaningless if the file isn’t owned by the right person.

  • Change Owner: chown ali file2
  • Change Group: chgrp mygrp file2
  • Change Both: chown ali:mygrp file2

6. Verification with stat

While ls -al is the standard way to check permissions, the stat command gives you a cleaner, programmable output.

  • Check octal and human-readable: stat -c "%a %A" file2 Output: 755 -rwxr-xr-x

| Value | Permission | Symbol | | :— | :— | :— | | 4 | Read | r | | 2 | Write | w | | 1 | Execute | x | | 0 | None | - |

The Formula: Read (4) + Write (2) + Execute (1) = Total

Common Octal Examples:

  • chmod 666 file2: Everyone can read and write (no execution).
  • chmod 755 dir1: Owner can do everything; others can only read and enter the directory.
  • chmod 744 file2: Owner has full control; group/others can only read.
  • chmod 006 file2: Only “others” can read and write. (User and Group have 0).

4. Directory Specifics & Special Bits

Directories behave slightly differently than files:

  • Read (r): Allows you to ls (list) the files inside.
  • Execute (x): The minimum permission required to “enter” (cd) into a directory.

The Recursive Flag

If you want to change permissions for a folder and everything inside it, use the -R flag: chmod -R a+x /path/to/directory

Capital X vs. lowercase x

  • chmod -R +x: Makes every single file and folder executable. (Usually a bad idea!)
  • chmod -R +X: This is “smart” execution. It only adds the execute bit to directories (so you can enter them) and files that already have an execute bit set.

5. Ownership: chown and chgrp

Permissions are meaningless if the file isn’t owned by the right person.

  • Change Owner: chown ali file2
  • Change Group: chgrp mygrp file2
  • Change Both: chown ali:mygrp file2

6. Verification with stat

While ls -al is the standard way to check permissions, the stat command gives you a cleaner, programmable output.

  • Check octal and human-readable: stat -c "%a %A" file2 Output: 755 -rwxr-xr-x

This post is licensed under CC BY 4.0 by the author.