umask Command Linux: Set Default File Permissions with Examples

August 25, 2025

The umask command is a fundamental Linux utility that controls the default permissions assigned to newly created files and directories. Understanding and properly configuring umask is crucial for maintaining system security and ensuring appropriate access controls in multi-user environments.

What is umask?

The term “umask” stands for user file creation mode mask. It’s a built-in shell command that determines which permission bits are turned off (masked) when new files and directories are created. Instead of setting permissions directly, umask works by subtracting permissions from the maximum possible permissions.

By default, Linux systems assign:

  • Files: Maximum permissions of 666 (rw-rw-rw-)
  • Directories: Maximum permissions of 777 (rwxrwxrwx)

The umask value is then subtracted from these maximum permissions to determine the actual permissions for new files and directories.

Understanding Permission Basics

Before diving into umask, let’s review Linux file permissions:

Permission Symbol Octal Value Description
Read r 4 View file contents or list directory
Write w 2 Modify file or create/delete files in directory
Execute x 1 Run file as program or access directory

Permissions are grouped for three categories:

  • Owner (u): The file creator
  • Group (g): Users in the same group
  • Others (o): All other users

umask Syntax and Usage

The basic syntax for the umask command is:

umask [option] [mask]

Common Options

Option Description
-S Display umask in symbolic notation
-p Display umask in a format that can be reused as input

Viewing Current umask Value

To check your current umask setting, simply run the command without arguments:

$ umask
0022

This shows the current umask value in octal notation. The leading zero indicates it’s an octal number.

To view the umask in symbolic format:

$ umask -S
u=rwx,g=rx,o=rx

This shows what permissions are allowed for new files and directories.

How umask Calculations Work

Understanding umask calculations is essential for proper usage. Here’s how it works:

For Files

Maximum file permissions: 666 (rw-rw-rw-)
Subtract umask: 022
Result: 644 (rw-r–r–)

For Directories

Maximum directory permissions: 777 (rwxrwxrwx)
Subtract umask: 022
Result: 755 (rwxr-xr-x)

Practical Example

# Check current umask
$ umask
0022

# Create a test file
$ touch testfile.txt

# Check its permissions
$ ls -l testfile.txt
-rw-r--r-- 1 user user 0 Aug 25 12:30 testfile.txt

# Create a test directory
$ mkdir testdir

# Check its permissions
$ ls -ld testdir
drwxr-xr-x 2 user user 4096 Aug 25 12:30 testdir

Setting umask Values

You can set umask temporarily for the current session or permanently in configuration files.

Temporary umask Setting

# Set umask to 027
$ umask 027

# Verify the change
$ umask
0027

# Test with a new file
$ touch newfile.txt
$ ls -l newfile.txt
-rw-r----- 1 user user 0 Aug 25 12:35 newfile.txt

Permanent umask Setting

To set umask permanently, add it to your shell configuration file:

For Bash users:

# Add to ~/.bashrc or ~/.bash_profile
echo "umask 027" >> ~/.bashrc

For system-wide settings:

# Add to /etc/profile (requires root privileges)
sudo echo "umask 027" >> /etc/profile

Common umask Values and Their Effects

umask File Permissions Directory Permissions Security Level
000 666 (rw-rw-rw-) 777 (rwxrwxrwx) Very Low
002 664 (rw-rw-r–) 775 (rwxrwxr-x) Low
022 644 (rw-r–r–) 755 (rwxr-xr-x) Medium (Default)
027 640 (rw-r—–) 750 (rwxr-x—) High
077 600 (rw——-) 700 (rwx——) Very High

Advanced umask Examples

Example 1: Secure Environment Setup

# Set restrictive umask for sensitive data
$ umask 077

# Create a private file
$ touch private_data.txt
$ ls -l private_data.txt
-rw------- 1 user user 0 Aug 25 12:40 private_data.txt

# Create a private directory
$ mkdir private_dir
$ ls -ld private_dir
drwx------ 2 user user 4096 Aug 25 12:40 private_dir

Example 2: Group Collaboration Setup

# Set umask for group collaboration
$ umask 002

# Create a shared file
$ touch shared_project.txt
$ ls -l shared_project.txt
-rw-rw-r-- 1 user developers 0 Aug 25 12:45 shared_project.txt

# Create a shared directory
$ mkdir shared_workspace
$ ls -ld shared_workspace
drwxrwxr-x 2 user developers 4096 Aug 25 12:45 shared_workspace

Example 3: Using Symbolic Notation

# Set umask using symbolic notation
$ umask u=rwx,g=rx,o=

# Check the octal equivalent
$ umask
0027

# This means:
# - Owner: full permissions (rwx)
# - Group: read and execute (rx)
# - Others: no permissions (---)

umask in Different Contexts

Shell Scripts and umask

You can use umask within shell scripts to control file creation permissions:

#!/bin/bash

# Save current umask
old_umask=$(umask)

# Set restrictive umask for sensitive operations
umask 077

# Create sensitive files
touch sensitive_config.conf
mkdir secure_logs

# Restore original umask
umask $old_umask

# Create regular files with original permissions
touch regular_file.txt

Process-Specific umask

# Run a command with specific umask
$ (umask 027; touch temp_file.txt)
$ ls -l temp_file.txt
-rw-r----- 1 user user 0 Aug 25 12:50 temp_file.txt

Security Considerations

Best Practices:

  • Default umask (022): Suitable for most general-purpose systems
  • Restrictive umask (027 or 077): Use for systems handling sensitive data
  • Permissive umask (002): Use only for collaborative development environments
  • Never use 000: This creates files and directories accessible to everyone

Common Security Mistakes

Mistake Risk Solution
Using umask 000 World-writable files Use minimum umask 022
Ignoring group permissions Unauthorized group access Set appropriate group restrictions
Not setting umask in scripts Inconsistent permissions Explicitly set umask in scripts

Troubleshooting Common Issues

umask Not Persisting

Problem: umask resets after logout
Solution: Add umask to shell configuration files (~/.bashrc, ~/.profile)

Files Still Have Wrong Permissions

Problem: Existing files don’t reflect new umask
Solution: umask only affects newly created files. Use chmod for existing files.

Application-Specific Issues

Problem: Some applications ignore umask
Solution: Check application documentation for permission settings

Testing umask Settings

Here’s a comprehensive test script to verify umask behavior:

#!/bin/bash

echo "Testing umask values..."

for mask in 022 027 002 077; do
    echo "Testing umask $mask"
    umask $mask
    
    # Create test file and directory
    touch "test_file_$mask.txt"
    mkdir "test_dir_$mask"
    
    # Show permissions
    echo "File permissions:"
    ls -l "test_file_$mask.txt"
    echo "Directory permissions:"
    ls -ld "test_dir_$mask"
    echo "---"
done

# Cleanup
rm test_file_*.txt
rmdir test_dir_*

Integration with Other Commands

umask works alongside other permission-related commands:

# Combined usage example
$ umask 027                    # Set default permissions
$ touch newfile.txt           # Create with umask permissions
$ chmod 755 newfile.txt       # Override with chmod if needed
$ chown user:group newfile.txt # Change ownership

Conclusion

The umask command is a powerful tool for controlling default file and directory permissions in Linux systems. By understanding how umask calculations work and implementing appropriate values for your environment, you can maintain security while ensuring proper access controls.

Key takeaways:

  • umask subtracts permissions from maximum defaults (666 for files, 777 for directories)
  • Use restrictive umask values (027, 077) for sensitive environments
  • Set umask permanently in shell configuration files
  • Test umask settings thoroughly before implementing in production
  • Combine umask with proper file ownership and additional security measures

Regular monitoring and appropriate umask configuration form the foundation of a secure Linux file system, protecting your data while maintaining necessary accessibility for users and applications.