Updated: 9 October 2026 · Applies to: acl 2.3.1 to 2.4.0 on Debian 13, Ubuntu 24.04 and 26.04, AlmaLinux 10, Rocky Linux 9, Fedora 44 and Alpine 3.24
setfacl: command not found means the acl package is not installed. Install it and the command works straight away:
sudo apt install acl # Debian, Ubuntu sudo dnf install acl # AlmaLinux, Rocky Linux, RHEL, Fedora apk add acl # Alpine
If setfacl is installed but prints Operation not supported, the file system that holds the file does not support POSIX ACLs or has them switched off. Section 3 shows how to find and fix that.
1. Fix "setfacl: command not found"
setfacl, getfacl and chacl all come from the acl package. On Debian and Ubuntu it is an optional package, and it was missing in every minimal image we tested (Debian 13, Ubuntu 24.04 and 26.04, AlmaLinux 10, Rocky Linux 9, Fedora 44 and Alpine), so minimal installs, cloud images and containers often don’t have it:
$ setfacl -m u:nobody:r /tmp/report.txt bash: setfacl: command not found
- Install the package with the command for your distribution (above). On Debian and Ubuntu run
sudo apt updatefirst if the package list is old. - Check that it works:
$ setfacl --version setfacl 2.3.2
- If you are not sure which package holds a command, ask the package manager:
$ dpkg -S /usr/bin/setfacl acl: /usr/bin/setfacl $ dnf provides /usr/bin/setfacl # first line of the output acl-2.3.2-4.el10.x86_64 : Access control list utilities
Versions we found: acl 2.3.2 on Debian 13, Ubuntu 24.04 and 26.04, AlmaLinux 10 and Alpine 3.24, 2.3.1 on Rocky Linux 9 and 2.4.0 on Fedora 44. The examples below were run with 2.3.2 on Debian 13.
2. Check that ACLs work
Give the user nobody read and write access to a file, then read the ACL back:
$ sudo setfacl -m u:nobody:rw /tmp/report.txt $ getfacl -p /tmp/report.txt # file: /tmp/report.txt # owner: root # group: root user::rw- user:nobody:rw- group::r-- mask::rw- other::r-- $ ls -l /tmp/report.txt -rw-rw-r--+ 1 root root 0 Oct 9 17:58 /tmp/report.txt
The + after the permissions in ls -l shows that the file has an ACL. Without -p, getfacl prints the harmless note Removing leading '/' from absolute path names. For shared folders, recursive (-R) and default (-d) ACLs and removing entries, see how to configure ACLs on Linux.
3. Fix "setfacl: Operation not supported"
This error comes from the file system, not from setfacl. We got it on /proc, which has no ACL support:
$ setfacl -m u:nobody:r /proc/version setfacl: /proc/version: Operation not supported
You get the same message on a disk or share whose file system cannot store ACLs.
- Find the file system and its mount options:
$ findmnt -T /dev/shm TARGET SOURCE FSTYPE OPTIONS /dev/shm shm tmpfs rw,nosuid,nodev,noexec,relatime,size=64000k,inode64
Replace
/dev/shmwith your own path. Look at FSTYPE and check OPTIONS fornoacl. - Match the file system type:
- ext4 (the default on Debian and Ubuntu): the Linux kernel (built with ext4 ACL support, as distribution kernels are) turns ACLs on for every ext4 mount; the defaults stored in the file system (the
Default mount optionsline oftune2fs -l) do not change that. Only the oldnoaclmount option turned them off, and since Linux 6.1 ext4 no longer accepts it at all (we checked the kernel source). If your server runs an older kernel (uname -r), removenoaclfrom the line in/etc/fstaband runsudo mount -o remount,acl /data(use your mount point). On a current kernel, ext4 is not the cause: check the next items. - XFS (the default on AlmaLinux, Rocky Linux and RHEL): ACL support is always on, and XFS has no
aclornoaclmount option. See XFS will not mount with the noacl option. - Btrfs: on by default; the
noaclmount option turns it off. - tmpfs (
/dev/shmand, on some systems,/tmp): supported; setfacl worked in our test. - ZFS on Linux: the
acltypeproperty isoffby default. Turn it on per dataset withsudo zfs set acltype=posix pool/dataset; OpenZFS also recommendsxattr=sawith it. - NFS version 4: uses its own ACL format. Install
nfs4-acl-tools(available on all the distributions above) and usenfs4_setfaclandnfs4_getfacl. - FAT and exFAT (USB sticks, some external disks): no Linux owners or ACLs. Set access when mounting with the
uid=,gid=andumask=options instead. - /proc and /sys: virtual file systems; ACLs are not possible there.
- ext4 (the default on Debian and Ubuntu): the Linux kernel (built with ext4 ACL support, as distribution kernels are) turns ACLs on for every ext4 mount; the defaults stored in the file system (the
- Run the setfacl command again and check the result with
getfacl.
Inside Docker or Podman containers, setfacl worked on the container’s own overlay file system in our test. A folder mounted into a container follows the rules of the host file system it comes from.
4. Other setfacl errors
setfacl: Option -m: Invalid argument near character 3: the user or group in the rule does not exist (character 3 is where the name starts inu:alice:rwx). Create the account first, or use the numeric ID:setfacl -m u:1234:rw fileworks even without a matching user.setfacl: /tmp/rootfile: Operation not permitted: only the file’s owner or root can change its ACL. Run the command withsudo.setfacl: /tmp/missing.txt: No such file or directory: check the path.
macOS has no setfacl: it sets ACLs with chmod +a, for example chmod +a "admin allow write" file1, and shows them with ls -le. For ordinary permissions and ownership on Linux, see making sense of 755 and rwxr-xr-x and change the owner of a file with chown.
Ucartz services for this topic
- KVM VPS hosting: NVMe SSD and full root access, with Free Basic Managed Support.
- Unmanaged dedicated servers: full root access and free IPMI KVM, with Free Basic Managed Support.
- Linux server management: hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.
