setfacl(1) on Solnix vs Linux and the BSDs
On Solnix, setfacl is the illumos /usr/bin/setfacl. It handles only POSIX-draft ACLs (UFS). Its options differ sharply from Linux and the BSDs: -d deletes entries rather than selecting the default ACL, -s replaces the whole ACL, and there is no -R, -x, -b or -k.
The manual pages
- Solnix: setfacl(1) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: setfacl(1) acl-2.4.0
- FreeBSD: setfacl(1) 15.1-RELEASE
- NetBSD: setfacl(1) 11.0
What Solnix runs
A default Solnix system runs the illumos setfacl at /usr/bin/setfacl. No other variants are shipped. The page says setfacl is for UFS, which supports POSIX-draft (aclent_t) ACLs. For NFSv4-style (ace_t) ACLs on ZFS, use chmod(1).
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux, FreeBSD, NetBSD | -d meaning | Solnix -d acl_entries deletes the listed entries, which are given without permissions. On Linux, FreeBSD and NetBSD, -d takes no argument and makes the other operations apply to the default ACL. A script copied from those systems will delete entries on Solnix.Source: Solnix setfacl(1) -d; Linux setfacl(1) -d, --default; FreeBSD setfacl(1) -d; NetBSD setfacl(1) -d |
| Linux, FreeBSD, NetBSD | removing entries | Solnix removes entries with -d. Linux, FreeBSD and NetBSD use -x (entries) and -X (file of entries). The Solnix synopsis has neither -x nor -X.Source: Solnix setfacl(1) SYNOPSIS, -d; Linux setfacl(1) -x, -X; FreeBSD setfacl(1) -x, -X; NetBSD setfacl(1) -x, -X |
| Linux, FreeBSD, NetBSD | no recursion or symlink options | The Solnix synopsis has no -R, -H, -L, -P or -h. Recursive ACL changes and symlink-walk control, which Linux, FreeBSD and NetBSD provide, are not documented for Solnix.Source: Solnix setfacl(1) SYNOPSIS; Linux setfacl(1) -R, -L, -P; FreeBSD setfacl(1) -R, -H, -L, -P, -h; NetBSD setfacl(1) -R, -H, -L, -P, -h |
| Linux, FreeBSD, NetBSD | -b and -k missing | Solnix has no -b (remove all extended entries) and no -k (remove the default ACL). On Linux, FreeBSD and NetBSD these are single flags.Source: Solnix setfacl(1) SYNOPSIS; Linux setfacl(1) -b, -k; FreeBSD setfacl(1) -b, -k; NetBSD setfacl(1) -b, -k |
| Linux, FreeBSD, NetBSD | replacing the whole ACL | Solnix has -s, which replaces the entire ACL, including the default ACL on a directory. Linux does this with --set or --set-file. The FreeBSD and NetBSD option lists have no -s.Source: Solnix setfacl(1) DESCRIPTION, -s; Linux setfacl(1) DESCRIPTION (--set, --set-file); FreeBSD setfacl(1) OPTIONS; NetBSD setfacl(1) OPTIONS |
| Linux, FreeBSD, NetBSD | -f versus -M | Solnix -f acl_file sets the file's ACL from acl_file (stdin if -). Linux, FreeBSD and NetBSD -M modifies the ACL from a file, adding and changing entries. Both accept getfacl-style # comments.Source: Solnix setfacl(1) -f; Linux setfacl(1) DESCRIPTION (-M); FreeBSD setfacl(1) -M; NetBSD setfacl(1) -M |
| Linux, FreeBSD, NetBSD | mask recalculation | Solnix -r recalculates the mask entry and ignores any mask given. The Solnix synopsis has no -n. Linux, FreeBSD and NetBSD use -n to skip recalculation. Linux also has --mask to force it when a mask is given.Source: Solnix setfacl(1) -r; Linux setfacl(1) -n, --mask; FreeBSD setfacl(1) -n; NetBSD setfacl(1) -n |
| FreeBSD, NetBSD | NFSv4 ACLs | Solnix setfacl manipulates only POSIX-draft ACLs; chmod handles NFSv4 ACLs. FreeBSD and NetBSD setfacl have -a position entries for NFSv4 ACLs, and say -m, -x, -R apply to them.Source: Solnix setfacl(1) DESCRIPTION; FreeBSD setfacl(1) -a, -m, -R; NetBSD setfacl(1) -a, -m, -R |
| FreeBSD, NetBSD | permission syntax | Solnix perms may be rwx or a number as used with chmod. FreeBSD and NetBSD describe only r, w, x, and - in the permissions field. Source: Solnix setfacl(1) acl_entries Syntax (perms); FreeBSD setfacl(1) POSIX.1e ACL ENTRIES (access permissions); NetBSD setfacl(1) POSIX.1e ACL ENTRIES (access permissions) |
| Linux, FreeBSD, NetBSD | default ACL entries | On Solnix, default entries carry a d[efault]: prefix, and a first -m on a default ACL must give a complete default ACL (user, group, other, mask, extras). Linux -d promotes ordinary entries to default entries. FreeBSD and NetBSD -d switches the target.Source: Solnix setfacl(1) -m, acl_entries Syntax; Linux setfacl(1) -d; FreeBSD setfacl(1) -d; NetBSD setfacl(1) -d |
| Linux | Linux-only options | Linux has --restore (restore a getfacl -R backup) and --test (list resulting ACLs without changing files). The Solnix page documents neither.Source: Linux setfacl(1) --restore, --test; Solnix setfacl(1) SYNOPSIS |
Everyday tasks
| Task | Solnix | Linux | FreeBSD | NetBSD |
|---|---|---|---|---|
| replace the whole ACL | setfacl -s acl_entries file | setfacl --set acl_spec file | — | — |
| add or modify entries | setfacl -m acl_entries file | setfacl -m acl_spec file | setfacl -m entries file | setfacl -m entries file |
| delete named entries | setfacl -d acl_entries file | setfacl -x acl_spec file | setfacl -x entries file | setfacl -x entries file |
| modify entries from a file | — | setfacl -M acl_file file | setfacl -M file | setfacl -M file |
| set the ACL from a file or stdin | setfacl -f acl_file file | — | — | — |
| remove the default ACL | — | setfacl -k file | setfacl -k file | setfacl -k file |
| apply recursively | — | setfacl -R | setfacl -R | setfacl -R |
Standards
- POSIX: setfacl is not a POSIX.1-2024 utility.
Writing portable scripts
- Do not use
-d,-sor-fin cross-platform scripts:-ddeletes entries on Solnix but selects the default ACL on Linux and the BSDs. Branch on the OS and write each syntax explicitly. - Use chmod, not setfacl, for NFSv4/ZFS ACLs on Solnix. FreeBSD and NetBSD handle NFSv4 ACLs through setfacl
-a.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.