File Permissions and Access Control Lists

Farukh KhanFarukh Khan
7 min read

File permissions in Linux are crucial for system security, determining who can access, modify, or execute files. As DevOps engineers, understanding how to manage permissions effectively is essential to prevent unauthorized access and ensure smooth workflows. This post covers everything from basic file permissions to ACL (Access Control Lists), SUID, SGID, and Sticky Bit, and even scripts to automate these tasks. Letโ€™s dive in! ๐Ÿš€


๐Ÿ“ Understanding File Permissions

In Linux, every file and directory is associated with three types of permissions: read (r), write (w), and execute (x). These permissions are granted to three categories of users:

  • Owner: The user who owns the file.

  • Group: The group that owns the file.

  • Others: Any other user on the system.

๐Ÿ” Example: Listing File Permissions

Letโ€™s create a file and check its permissions:

touch myfile.txt
ls -ltr myfile.txt

The output will look something like this:

-rw-r--r-- 1 user group 0 Oct 18 10:30 myfile.txt

Hereโ€™s what this means:

  • -rw-r--r-- โ†’ File permissions (r = read, w = write, x = execute)

    • Owner (rw-): Read and write permission.

    • Group (r--): Only read permission.

    • Others (r--): Only read permission.

  • 1 โ†’ Number of links to the file.

  • user โ†’ The file owner.

  • group โ†’ The group that owns the file.

  • 0 โ†’ File size (in bytes).

  • Oct 18 10:30 โ†’ Date and time of last modification.

๐Ÿ”ง Modifying Permissions

We can modify file permissions using the following commands:

  • Change the owner of the file using chown:

      sudo chown newuser myfile.txt
    
  • Change the group of the file using chgrp:

      sudo chgrp newgroup myfile.txt
    
  • Modify permissions for others using chmod:

      chmod u-w myfile.txt
    

Run ls -ltr again to verify the changes.

๐Ÿ”‘ Pro Tip: Always review your file permissions after making changes to avoid accidental exposure of sensitive data.


โœ๏ธ File Permissions

File permissions in Linux are the foundation of security and proper system administration. Every file and directory has associated permissions that dictate how users and groups can interact with them. Understanding these permissions helps to control access levels and ensure the right people have the proper permissions.

Understanding the Basics

Each file and directory in Linux is controlled by three permission types:

  • Read (r): Grants the ability to view the contents of a file or list the contents of a directory.

  • Write (w): Allows the user to modify or delete the contents of a file or add/remove files from a directory.

  • Execute (x): Grants permission to run a file (if it's an executable script or binary) or enter a directory.

These permissions are split across three categories of users:

  1. Owner (u): The person who created the file and has the most control.

  2. Group (g): A set of users who share access to the file based on their group membership.

  3. Others (o): All other users who are not the owner or part of the group.

Modifying File Permissions: The chmod Command

You can use the chmod command to modify the permissions of a file. This command can be used in symbolic or numeric modes. Letโ€™s explore both:

Symbolic Mode:

In symbolic mode, you can change permissions by specifying which user category (u, g, o) gets which permissions (r, w, x):

  • Grant write permission to the group:

      chmod g+w myfile.txt
    
  • Remove execute permission for others:

      chmod o-x myfile.txt
    

Numeric Mode:

In numeric mode, permissions are represented by numbers:

  • Read = 4

  • Write = 2

  • Execute = 1

So, when you sum them up:

  • 7 (rwx) = Full permission.

  • 6 (rw-) = Read and write.

  • 5 (r-x) = Read and execute.

  • 4 (r--) = Read only.

You can set the permissions using a three-digit number where each digit corresponds to the permissions for the owner, group, and others.

For example, to grant full access to the owner, read and execute permissions to the group, and only read permissions to others:

chmod 754 myfile.txt

The Role of chown and chgrp

  • chown: This command changes the owner of a file:

      sudo chown newowner myfile.txt
    
  • chgrp: This command changes the group ownership of a file:

      sudo chgrp newgroup myfile.txt
    

The Importance of File Permissions

Properly managing file permissions is crucial to maintaining system security and operational efficiency. Whether you are managing a single system or a large infrastructure, the concepts of ownership, groups, and others remain fundamental to controlling file access. Using chmod, chown, and chgrp commands, you can fine-tune who can view, modify, or execute files, ensuring the integrity and confidentiality of your system.


๐Ÿ” Access Control Lists (ACL)

Access Control Lists (ACLs) provide more granular control over file permissions, allowing you to specify permissions for individual users and groups in addition to the traditional owner-group-others model.

ACL Commands

  • View ACLs with getfacl:

      getfacl myfile.txt
    
  • Set ACLs with setfacl:

      setfacl -m u:username:rwx myfile.txt
    

๐ŸŽฏ Setting ACLs on a Directory

Letโ€™s create a directory and assign specific ACL permissions:

mkdir mydirectory
setfacl -m g:developers:rwx mydirectory
getfacl mydirectory

In this example, the developers group is granted full access to the mydirectory. ACLs provide flexibility in managing permissions across multiple users and teams, which is especially useful in collaborative environments.


๐Ÿ› ๏ธ Additional Automation Tasks

๐Ÿ”„ Task: Script to Modify File Permissions

When dealing with multiple files, automating permission changes can save significant time. Hereโ€™s a script that modifies permissions for all files in a directory based on user input:

#!/bin/bash
echo "Enter directory path:"
read dir
echo "Enter permissions (e.g., 755):"
read perm
chmod -R $perm $dir
echo "Permissions updated for all files in $dir"

To Run the Script:

chmod +x change_permissions.sh
./change_permissions.sh

Enter directory path:
myfile
Enter permissions (e.g., 755):
000
Permissions updated for all files in myfile

๐Ÿ”’ Task: Script to Set ACL for a Specific User

This script allows you to set ACL permissions for a user on a specific file based on user input:

#!/bin/bash
echo "Enter file path:"
read file
echo "Enter username:"
read user
echo "Enter permissions (e.g., rwx):"
read perm
setfacl -m u:$user:$perm $file
echo "ACL set for $user on $file"

To Run the Script:

chmod +x set_acl.sh
./set_acl.sh

๐Ÿšฆ 5. Understanding Sticky Bit, SUID, and SGID

๐Ÿงท Sticky Bit: Restricts file deletion in a directory to the owner. It's often used in shared directories like /tmp.

  • Example:

      chmod +t /tmp
    

๐Ÿ” SUID (Set User ID): Allows a file to be executed with the permissions of the file owner rather than the user running the file.

  • Example:

      chmod u+s myscript.sh
    

๐Ÿ‘ฅ SGID (Set Group ID): Files created in a directory inherit the group of the directory, ensuring that group ownership is maintained.

  • Example:

      chmod g+s /sharedfolder
    

๐Ÿ“‚ 6. Backup and Restore Permissions

Sometimes, you may need to back up file permissions before making changes. The following scripts will back up and restore permissions using ACL:

๐Ÿ—„๏ธ Backup Script:

#!/bin/bash
echo "Enter directory to backup permissions:"
read dir
getfacl -R $dir > permissions_backup.acl
echo "Permissions backed up to permissions_backup.acl"

To Run the Script:

chmod +x backup_permissions.sh
./backup_permissions.sh

๐Ÿ”„ Restore Script:

#!/bin/bash
echo "Enter directory to restore permissions:"
read dir
setfacl --restore=permissions_backup.acl
echo "Permissions restored from permissions_backup.acl"

To Run the Script:

chmod +x restore_permissions.sh
./restore_permissions.sh

๐Ÿš€Wrapping It Up ๐ŸŽ

And there you have it, folks! You're now armed with the knowledge to bend file permissions to your will. Remember, with great power comes great responsibility (and fewer "Permission denied" errors).

Keep experimenting, stay curious, and may your systems always be secure! ๐Ÿ”๐Ÿ’ช

#DevOps #Linux #FilePermissionNinja #SecuritySuperhero #BashScriptingWizard

P.S. Did this guide help you level up your DevOps game? Share it with your fellow tech adventurers and spread the file permission love! ๐Ÿ’–

0
Subscribe to my newsletter

Read articles from Farukh Khan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Farukh Khan
Farukh Khan