Changing File Permissions in Linux

You are currently viewing Changing File Permissions in Linux

When you’re getting to grips with Linux, you’ll quickly encounter the need to deal with file permissions. It’s an essential part of managing your system’s security and functionality. Linux file permissions control who can read, write, or execute files and are a fundamental aspect that users and administrators must understand to ensure the integrity and security of their systems. By mastering file permissions, you can prevent unauthorized access and potential system misuse. In this blog post, we’ll explore how to view and modify file permissions, ensuring you have the necessary knowledge to keep your Linux system secure and functioning correctly.

Understanding Linux File Permissions

Before you start changing file permissions, it’s crucial to understand the basic principles behind them. In Linux, each file and directory is assigned access rights for three different categories of users:

  • The owner: The user who created the file or directory.
  • The group: The set of users that is assigned to the file or directory.
  • Others: All other users who have access to the system.

These rights determine what actions each category of user can perform and are defined by three types of permissions:

  • Read (r): The permission to view the contents of the file.
  • Write (w): The permission to modify or delete the file’s content.
  • Execute (x): The permission to run the file as a program or script.

Understanding the combination of these permissions is essential for managing your system. For example, a file with permissions set to -rw-r--r-- indicates that the owner can read and write the file, the group can only read it, and others have read-only access.

Viewing File Permissions

To begin working with file permissions, you first need to know how to view them. This is done using the ls -l command in the terminal, which lists the contents of a directory in a long format, including the permission strings.

For example, if you type ls -l in your terminal, you might see an output like this:

-rw-r--r-- 1 user group 0 Apr  1 12:34 example.txt

Here’s what each part of this line means:

  • -rw-r--r--: This is the permission string. The first character indicates if it’s a regular file (-), a directory (d), or a link (l). The next three characters (rw-) show the owner’s permissions (read and write in this case). The following three (r--) are the group’s permissions (read-only here), and the last three (r--) are the permissions for others (again, read-only).
  • 1: The number of hard links to the file.
  • user: The username of the owner.
  • group: The name of the group.
  • 0: The size of the file in bytes.
  • Apr 1 12:34: The date and time of the last modification.
  • example.txt: The name of the file.

Understanding this output is crucial as it provides all the information you need regarding who can do what with a file or directory. In the upcoming sections, we’ll delve into how to modify these permissions to suit your needs.

Changing File Permissions with chmod

Now that you know how to view file permissions, let’s talk about how to change them. The chmod (change mode) command is the go-to tool for modifying file permission in Linux. There are two methods to use chmod: symbolic mode and octal (numeric) mode.

Symbolic Mode

Symbolic mode is user-friendly and utilizes symbols to represent the user categories and permissions. The basic syntax is:

chmod [who][+|-][permissions] filename
  • who: u for user (owner), g for group, o for others, a for all.
  • + (add) or (remove) permissions.
  • permissions: r for read, w for write, x for execute.

For example, if you want to give execute permission to the user (owner) of the file:

chmod u+x filename

If you wish to remove the written permission from the group and others:

chmod go-w filename

Octal Mode

Octal mode uses numerical values to set permissions. This method might seem less intuitive at first, but it’s efficient for setting multiple permissions at once.

Each permission type has an associated number:

  • 4 for read (r)
  • 2 for write (w)
  • 1 for execute (x)

To find the number for a set of permissions, add the values of the desired permissions:

  • Read and write (rw-) would be 4 (read) + 2 (write) = 6.
  • Read, write, and execute (rwx) would be 4 (read) + 2 (write) + 1 (execute) = 7.

Here’s how you might use octal mode:

chmod 755 filename

This sets the owner permissions to read, write, and execute (7), and both group and others to read and execute (5).

The chown Command

File ownership is just as important as file permissions. The chown (change owner) command is used to change the owner and/or group of a file. The basic syntax is:

chown [owner][:group] filename

To change the owner to “user1”:

chown user1 filename

To change the owner to “user1” and the group to “group1”:

chown user1:group1 filename

For directories, you often want to change the ownership of all the files inside it as well. Use the -R (recursive) option:

chown -R user1:group1 directory

The chgrp Command

Sometimes, you only want to change the group ownership of a file or directory. This is where chgrp (change group) comes into play. It’s a straightforward command:

chgrp group filename

For example, to change the group of “example.txt” to “admin”:

chgrp admin example.txt

And, like chown, if you want to apply the change to a directory and all its contents recursively:

chgrp -R admin directory

In both chown and chgrp, only the owner of the file or the superuser can change the ownership of a file or directory, which is a security feature to prevent unauthorized transfer of control.

In the next sections, we’ll cover special permissions that can add another layer of control to your files and directories, and we’ll go over some best practices to keep your system secure while managing file permissions effectively.

Special Permissions

In addition to the basic file permissions, Linux also provides special permissions that extend or restrict the standard set of permissions. These special permissions are:

  • Set User ID (SUID): When set on an executable file, the SUID permission allows the file to be executed with the permissions of the file owner.
  • Set Group ID (SGID): Similar to SUID, SGID allows the file to be executed with the permissions of the group owner. When applied to a directory, new files created within inherit the directory’s group ID.
  • Sticky Bit: Primarily used on directories, the sticky bit ensures that only the file owner, the directory owner, or the root user can delete or rename the files within.

To set these special permissions using chmod, you can use either the symbolic or octal method:

  • Symbolic: chmod u+s for SUID, chmod g+s for SGID, and chmod +t for Sticky Bit.
  • Octal: Prefix the permission set with a 4 for SUID, 2 for SGID, and 1 for the Sticky Bit.

For example, to set SUID, SGID, and Sticky Bit all at once:

chmod 5777 filename

Understanding and using these special permissions can have significant implications for system security and functionality, so they should be used judiciously.

Best Practices for File Permissions

File permissions are a critical aspect of Linux system security. Here are some best practices to keep in mind:

  • Least Privilege Principle: Always set the minimum necessary permissions that allow users to perform their tasks. Overly permissive files can be a security risk.
  • Regular Audits: Periodically check the permissions of critical files and directories to ensure they have not been altered.
  • User Management: Assign users to groups effectively and use group permissions to manage access rather than setting individual user permissions.
  • Use Sudo: Instead of working as the root user, use sudo for administrative tasks to avoid accidental system-wide changes.
  • Backup Before Changes: Before making bulk permission changes, especially recursively, ensure you have backups in case of a mistake.

Advanced Tips

While the basics of file permissions are often sufficient for everyday use, advanced users can benefit from additional tools and concepts:

  • umask: The umask command sets the default permissions for newly created files and directories. By configuring umask, users can ensure that new files are not inadvertently created with insecure permissions.For example, a umask of 022 ensures that new files are created with 755 permissions (777 minus 022), which is read and write for the owner, and read only for the group and others.
  • Access Control Lists (ACLs): For more granular control over permissions, Linux supports ACLs, which allow you to specify permissions beyond the owner, group, and other models. To set an ACL, you would use the setfacl command:
setfacl -m u:username:rwx filename

This sets the read, write, and execute permissions for a specific user, regardless of the file’s general permissions.


Q1: What are the default file permissions when a file is created in Linux?

A1: The default permissions are determined by the umask setting of the user. Typically, files are created with the permissions of 666 minus the umask, and directories with 777 minus the umask.

Q2: Can I set SUID, SGID, and Sticky Bit permissions on directories?

A2: You can set SGID and Sticky Bit on directories. SGID will make new files created in the directory inherit the group of the directory. The Sticky Bit restricts deletion of files to the owner of the files. SUID is not effective on directories.

Q3: Why can’t I change the permissions of a file even though I am a user of the group with write permissions?

A3: Only the owner of the file or the root user can change file permissions. Being part of the group allows you to write to the file (if the write permission is set), but not change its permissions.

Q4: What does the chmod +x command do?

A4: The chmod +x command adds the execute permission for the owner, group, and others to a file or directory, allowing it to be run as a program or script.

Q5: How can I view the ACL settings on a file?

A5: To view the ACLs on a file, use the getfacl command:

getfacl filename

Q6: Is it safe to give full permissions (777) to a file or directory?

A6: Giving full permissions to a file or directory means anyone can read, write, or execute it. This can be a significant security risk and is not recommended unless absolutely necessary.

Q7: What command can I use to find files with SUID or SGID permissions?

A7: You can use the find command to locate files with these special permissions. For example:

find / -perm /2000  # For SGID
find / -perm /4000  # For SUID


Managing file permissions in Linux is a task that ranges from the straightforward to the complex, touching on aspects crucial to both functionality and security. In this post, we’ve covered the basics of viewing and changing permissions, and managing file ownership, and we’ve touched upon special permissions and advanced concepts like umask and ACLs.

Remember, the key to effective permission management is understanding the needs of your system’s users and the requirements of your files and programs. Apply the principle of least privilege, regularly review your permissions settings, and take advantage of advanced features to refine access controls.

By incorporating these practices into your routine, you can fortify your Linux environment against unauthorized access and ensure that each user has just the right level of access needed to perform their roles. Whether you’re a system administrator or a Linux enthusiast, the power to control your system wisely is at your fingertips.

We hope this guide has equipped you with the knowledge to confidently navigate the complexities of Linux file permissions. Keep experimenting, keep learning, and stay secure!

Atiqur Rahman

I am MD. Atiqur Rahman graduated from BUET and is an AWS-certified solutions architect. I have successfully achieved 6 certifications from AWS including Cloud Practitioner, Solutions Architect, SysOps Administrator, and Developer Associate. I have more than 8 years of working experience as a DevOps engineer designing complex SAAS applications.

Leave a Reply