File Ownership

Every file has an owner and a group. These determine which permissions apply to whom.

Viewing Ownership

Terminal
$ls -l file.txt
-rw-r--r-- 1 alice developers 1024 Jan 14 file.txt

In this output:

  • alice is the owner
  • developers is the group

chown - Change Owner

Change the file's owner:

Terminal
$sudo chown bob file.txt
$ls -l file.txt
-rw-r--r-- 1 bob developers 1024 Jan 14 file.txt

sudo Required

Changing ownership requires root privileges (sudo), unless you're changing a file you own to a group you're in.

Change Owner and Group Together

Terminal
$sudo chown bob:staff file.txt
(owner: bob, group: staff)
$sudo chown bob: file.txt
(owner: bob, group: bob's default group)
$sudo chown :staff file.txt
(group only, same as chgrp)

The user:group syntax is the most common.

Recursive Ownership Change

Terminal
$sudo chown -R www-data:www-data /var/www/html/

-R changes ownership of all files and subdirectories.

chgrp - Change Group

Change only the group:

Terminal
$sudo chgrp developers file.txt

When to Use Which

  • chown user:group - When changing both
  • chown user - Owner only
  • chgrp group - Group only

Understanding Groups

See Your Groups

Terminal
$groups
user sudo docker developers
$id
uid=1000(user) gid=1000(user) groups=1000(user),27(sudo),999(docker),1001(developers)

Common System Groups

GroupPurpose
sudoAdministrative privileges
dockerRun Docker commands
www-dataWeb server access
admRead log files

Real-World Scenarios

Web Server Files

Terminal
$sudo chown -R www-data:www-data /var/www/html/
$sudo chmod -R 755 /var/www/html/

Shared Project Directory

Terminal
$sudo mkdir /shared/project
$sudo chgrp developers /shared/project
$sudo chmod 775 /shared/project

Now any member of developers can create files there.

Fix Permission Issues

After extracting archives or copying files:

Terminal
$sudo chown -R $USER:$USER ~/projects

Container Volume Permissions

Terminal
$sudo chown -R 1000:1000 ./data

Containers often need specific UID/GID ownership.

Knowledge Check

What command changes both owner and group of a file?

Quick Reference

CommandWhat It Does
chown user fileChange owner
chown user:group fileChange owner and group
chown :group fileChange group only
chgrp group fileChange group
-R flagRecursive (directories)

Key Takeaways

  • Every file has an owner (user) and a group
  • chown changes owner (and optionally group)
  • chgrp changes only the group
  • Usually requires sudo
  • Use -R for directories
  • Proper ownership is crucial for security

Next: special permissions - SUID, SGID, and sticky bit.