Standard Linux permissions distinguish only owner, group, and other.
That model breaks down when two users need different permissions on
the same file, or when a directory needs to give one group read
access and another group write access. POSIX ACLs extend the model.
When standard permissions are not enough
Consider these scenarios:
A shared /srv/data directory must be writable by group devs
AND readable by group auditors, with nothing for others.
A log file is owned by the application but specific engineers
need read access without joining the application’s group.
A build directory needs to be writable by a CI service user and
the human engineers who ship to it.
POSIX ACLs handle these cases directly. The standard toolchain is
getfacl to read and setfacl to modify.
Anatomy of an ACL
Read-only / Safe— The 'user::rwx' line is the owner ACL (mirrors owner:). 'user:alice:rw-' is a named-user ACL. Two group ACLs (the group: line and group:auditors:r--) grant different access to different groups. The mask line is the effective-rights ceiling for named users and groups, and for the owning group. 'other::---' is unchanged.
The effective-rights ceiling for all non-owner entries
other::
Permissions for everyone else (unchanged from standard mode)
Modifying ACLs with setfacl
Configuration changesetfacl -m— setfacl -m modifies or adds an ACL entry. The format is who:NAME:perms. -x removes an entry. -b removes the entire ACL except the minimum (user::, group::, other::).
Read-only / Safels with ACL— The + at the end of the permission string indicates an extended ACL is present. ls without -l does not show ACLs; use getfacl for full ACL visibility.
$ ls -l /srv/data/project
drwxrwxr-+ 1 root devs 4096 Aug 9 11:11 /srv/data/project
Illustrative output
Default ACLs on directories
A directory can carry a default ACL that propagates to new files
and subdirectories created within it:
Configuration changedefault ACL— -d sets a default ACL on a directory. New files and subdirectories created inside inherit these ACL entries as their access ACL. Existing files are unaffected.
Default ACLs are how sysadmins give a whole project tree a
consistent permission model without managing every individual file.
Recursive ACL operations
Configuration changesetfacl -R— -R recurses. Combine with -m to set an ACL on every file in the tree. The default walk follows a symlink given as an argument but skips symlinks found inside subdirectories; -L (logical) follows symlinked directories all the way down, and -P (physical) follows none at all. Preview with getfacl -R before you write.
Configuration changeremove ACLs— -x removes a single named entry. -b removes the entire extended ACL except the minimum (user::, group::, other::). The + at the end of the mode string disappears.