GICT knowledge base
How to Lock a File for Renaming/Deleting in Linux
Published
File locking in Linux prevents files from being modified, renamed, or deleted by unauthorized users or processes. This is important in multi-user environments, shared systems, or when protecting critical files from accidental changes. This guide explains three effective methods for file locking in Linux.
Understanding File Locking Fundamentals
What is File Locking?
File locking restricts access to files, ensuring that only authorized users or processes can perform certain operations. In Linux, there are two main concepts:
- Advisory Locks: These locks rely on cooperation between processes. A process must check for a lock before accessing a file. If a process ignores the lock, it can still access the file.
- Mandatory Locks: These locks are enforced by the operating system. Any attempt to access a locked file is blocked by the kernel itself.
Why Lock Files?
- Data Integrity: Prevent corruption when multiple processes try to modify the same file.
- Security: Protect sensitive files from unauthorized deletion or modification.
- System Stability: Prevent accidental removal of critical system files.
- Concurrency Control: Manage access in multi-user or multi-process environments.
Method 1: Using the Immutable Attribute (chattr)
What is the Immutable Attribute?
The immutable attribute is the most powerful and effective method for preventing file deletion and modification. It makes files completely unchangeable, even by root. Once set, the file cannot be modified, deleted, renamed, or linked to.
Example
echo "Sensitive data" > /home/user/important.txt
Check current file attributes:
lsattr /home/user/important.txt
Make the file immutable:
sudo chattr +i /home/user/important.txt
Verify the immutable attribute is set:
lsattr /home/user/important.txt
Try to rename the file:
mv /home/user/important.txt /home/user/backup.txt
Try to delete the file:
rm /home/user/important.txt
Try to modify the file:
echo "new data" >> /home/user/important.txt
To remove protection when you need to modify the file:
sudo chattr -i /home/user/important.txt
Now you can delete or modify as needed:
rm /home/user/important.txt
Real-World Scenarios
- Protecting system configuration files:
sudo chattr +i /etc/ssh/sshd_config sudo chattr +i /etc/nginx/nginx.conf sudo chattr +i /opt/myapp/config.ini - Protecting multiple files at once:
sudo chattr +i /etc/myapp/*.conf sudo chattr -R +i /etc/sensitive/ - Database backup protection:
mysqldump mydb > /backups/mydb-2025-10-13.sql sudo chattr +i /backups/mydb-2025-10-13.sql
The Append-Only Attribute
For log files, you might want to allow adding new content but prevent modification of existing content. Set append-only attribute:
sudo chattr +a /var/log/application.log
Now you can append but not delete or modify existing content:
echo "New log entry" >> /var/log/application.log
rm /var/log/application.log
To remove append-only:
sudo chattr -a /var/log/application.log
Method 2: Using Directory Permissions (chmod)
The Basics
To delete or rename a file, you need write permission on the parent directory, not just the file itself. This is a key concept in Linux file systems. When you delete or rename a file, you are modifying the directory contents, not the file itself. Therefore, controlling directory permissions is the way to prevent file deletion.
Example
mkdir /home/user/protected_dir
echo "Important data" > /home/user/protected_dir/document.txt
Try to delete the file:
rm /home/user/protected_dir/document.txt
Recreate the file:
echo "Important data" > /home/user/protected_dir/document.txt
Check current directory permissions:
ls -ld /home/user/protected_dir
Remove write permission from the directory:
chmod u-w /home/user/protected_dir
Verify the permission change:
ls -ld /home/user/protected_dir
Try to delete the file:
rm /home/user/protected_dir/document.txt
Try to rename the file:
mv /home/user/protected_dir/document.txt /home/user/protected_dir/renamed.txt
To restore deletion capability:
chmod u+w /home/user/protected_dir
Now deletion works again:
rm /home/user/protected_dir/document.txt
Important Note About File Permissions
Common Misconception: Many people think removing write permission from a file prevents deletion. This does NOT prevent deletion:
chmod a-w /home/user/important.txt
rm /home/user/important.txt
The file can still be deleted because you have write permission on the parent directory.
Protecting File Content vs. Preventing Deletion
To prevent modification of file content:
chmod 444 /home/user/document.txt
To prevent deletion, remove directory write permission:
chmod u-w /home/user/
Now the file cannot be modified or deleted.
Real-World Scenarios
- Protecting a configuration directory:
sudo mkdir /etc/myapp sudo cp config.conf /etc/myapp/ sudo chmod u-w /etc/myapp - Shared directory with deletion protection:
mkdir /shared/documents chmod 555 /shared/documents - Database directory protection:
chmod u-w /var/lib/mysql
Method 3: Using File Ownership (chown)
What is File Ownership?
Every file in Linux has an owner and a group. Only the file owner and root can delete or rename a file, even if others have write permission on the directory. Changing ownership is a way to restrict who can perform operations on files.
Example
echo "Protected document" > /home/user/company_data.txt
Check current ownership:
ls -l /home/user/company_data.txt
Change ownership to root:
sudo chown root:root /home/user/company_data.txt
Verify ownership change:
ls -l /home/user/company_data.txt
Try to delete the file as regular user:
rm /home/user/company_data.txt
Only root can now delete the file:
sudo rm /home/user/company_data.txt
Alternative – change ownership to a specific user:
sudo chown admin:admingroup /home/user/sensitive.txt
Now only admin user can delete this file.
Combining Ownership with Permissions
echo "Team document" > /shared/project.txt
sudo chown projectlead:developers /shared/project.txt
sudo chmod 644 /shared/project.txt
Check the result:
ls -l /shared/project.txt
Now only projectlead can delete or rename the file. Members of developers group can only read it.
Real-World Scenarios
- Protecting application files:
sudo chown -R root:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/ - Shared configuration management:
sudo chown admin:sysadmin /etc/app/config.ini sudo chmod 640 /etc/app/config.ini - Backup file protection:
sudo chown backup:backup /backups/*.tar.gz
Important Notes
- Root Override – The root user can always delete files regardless of ownership or permissions, unless the immutable attribute is set with
chattr +i. - Directory Ownership Matters – To delete a file, you need write permission on the parent directory. Even if you own the file, you cannot delete it from a directory you do not have write access to.
- Group Permissions – Members of the file group have permissions defined by the group permission bits, but only the owner can change permissions or ownership.
Choosing the Right Method
- Use Immutable Attribute (chattr) when you need absolute protection even from root, protecting critical system or configuration files, preventing any modifications, deletions, or renames, or need append-only behavior for log files. This is best for maximum security and protection.
- Use Directory Permissions (chmod) when you need simple straightforward protection, want to prevent file deletion or renaming for multiple files in a directory, working in a multi-user environment, or want users to modify file content but not delete files. This is best for general purpose protection and easy to implement.
- Use File Ownership (chown) when you need to restrict deletion to specific users, managing multi-user systems, want to delegate file management to specific users or groups, or need granular control over who can delete files. This is best for multi-user environments and role-based access control.
Combining Methods for Maximum Protection
For critical files, you can combine multiple methods. Change ownership to root:
sudo chown root:root /etc/critical.conf
sudo chmod u-w /etc/
sudo chattr +i /etc/critical.conf
Now the file has maximum protection.
To modify this file later, remove all protections in reverse order:
sudo chattr -i /etc/critical.conf
sudo chmod u+w /etc/
Then make your changes, then re-apply protections.
Conclusion
These three methods represent the most practical approaches to file locking in Linux. The immutable attribute offers the strongest protection, directory permissions provide simple and effective deletion prevention, and file ownership enables fine-grained access control in multi-user environments.
Understanding the differences between these methods and when to use each one will help you protect your files effectively while maintaining system usability. Different scenarios call for different solutions, and sometimes combining methods provides the best protection. Always test your locking strategy in a safe environment before implementing it in production.
Related guides
How to Set Up zram on a Small VPS
Configure zram on Ubuntu with kernel and swap checks. Understand compressed memory limits, monitor real use and avoid unsafe swap-file changes.
LinuxHow to Find Services That Need a Restart After Updates with needrestart
Find services using outdated libraries with needrestart on Ubuntu. Read restart reports, review automatic restart policy and plan maintenance safely.
LinuxHow to Limit a Linux Service’s Memory with systemd
Limit a Linux service with systemd MemoryHigh, MemoryMax and swap controls. Check cgroup support, diagnose pressure and remove only your own policy.
LinuxHow to Protect SSH with CrowdSec on Ubuntu
Protect SSH with CrowdSec on Ubuntu. Connect log detection to firewall enforcement and test temporary blocking without losing administrator access.
