In Linux, every file and directory is assigned an owner and a group. This ownership system, combined with file permissions, forms the foundation of Linux security by determining exactly who can read, modify, or execute a file. When you need to transfer administrative control of a file to a different user, or assign it to a different administrative group, you use the chown (change owner) command.
Understanding Users and Groups in Linux
Before using chown, it is important to understand the hierarchy.
- Owner (User): The specific user account that created the file and has primary control over it.
- Group: A collection of users. If a file is assigned to the “developers” group, anyone in that group shares the group permissions for that file.
You can check the current owner and group of a file by running the ls -l command. The output will show the owner in the third column and the group in the fourth column.
Basic Syntax of the chown Command
Because changing file ownership is an administrative task that can impact system security, you almost always need superuser privileges to run chown. Therefore, the command is typically prefixed with sudo.
The basic syntax is:
sudo chown [new_owner]:[new_group] filename
How to Change Only the File Owner
If you only want to change the user who owns the file, and leave the group exactly as it is, you simply provide the new username without a colon or group name.
For example, to transfer ownership of a file named report.txt to a user named johndoe:
sudo chown johndoe report.txt
After running this, johndoe will have full owner permissions over report.txt.
How to Change Both the Owner and the Group
To change both the owner and the group simultaneously, you separate the username and the group name with a colon (:). Do not include any spaces around the colon.
For example, to change the owner to johndoe and the group to accounting:
sudo chown johndoe:accounting report.txt
How to Change Only the Group
While Linux has a dedicated chgrp command specifically for changing groups, you can also achieve this using chown. To change only the group and leave the owner intact, you omit the username but keep the colon in front of the group name.
sudo chown :accounting report.txt
Using the Recursive Flag for Directories
By default, if you run chown on a directory, it only changes the ownership of the directory folder itself. The files inside remain untouched. If you want to change the ownership of a directory and every single file and sub-directory contained within it, you must use the -R (recursive) flag.
For example, to transfer ownership of the entire /var/www/html directory to the www-data user and group:
sudo chown -R www-data:www-data /var/www/html
Warning: Be incredibly careful when using the recursive flag, especially near root directories (/). Recursively changing ownership of system files can immediately break your Linux installation, requiring a complete system reinstall.