TrueNAS NFSv4 ACL allows delete without visible d/D in the ACE

I found an odd ACL behavior in TrueNAS SCALE / NFSv4 ACLs and would like to understand whether it is expected behavior or a bug.

Example: I set the folder ACL to user:dummy:rwxp--aARWc---:fd-----:allow. When a file is created inside that folder, the file inherits user:dummy:rwxp--aARWc---:------I:allow. Over SMB, creation works, but delete and rename do not, which is expected. However, when I log in via SSH and run sudo -u dummy -- rm -- /mnt/utopia/test/test.txt, the delete succeeds.

This suggests that local unlink() behavior and SMB delete/rename behavior are not matching in the way I expected. I would appreciate confirmation of whether this is normal NFSv4 / Samba / TrueNAS behavior, or whether it indicates a bug. I am also concerned about the possibility that system apps and users may appear to have only write access, while effectively also having delete access.

Thanks,
Alex

Below I put a bit of details regarding the dataset and ACL/ACE terminal output.

——

Folder permissions:

Editing NFSv4 ACL for directory: /mnt/tank/test

    user:dummy:rwxp--aARWc---:fd-----:allow

I create test file:
test.txt

cd test
root@mynas[/mnt/tank/test]# touch test.txt
root@mynas[/mnt/tank/test]# Get-ACL test.txt

File: test.txt

owner: 0

group: 0

mode: 0o100000

trivial_acl: false

ACL flags: none

    user:dummy:rwxp--aARWc---:------I:allow

Via SMB:
Create is allowed
Deleted and rename is not allowed

Via SSH in zsh shell:
echo $SHELL
/usr/bin/zsh

sudo -u dummy – rm – /mnt/tank/test/test.txt

Delete is allowed

——

zfs get all /mnt/tank/test
NAME PROPERTY VALUE SOURCE
tank/test type filesystem -
tank/test creation Mon Aug 3 16:18 2026 -
tank/test used 320K -
tank/test available 12.4T -
tank/test referenced 208K -
tank/test compressratio 1.00x -
tank/test mounted yes -
tank/test quota none default
tank/test reservation none default
tank/test recordsize 128K inherited from tank
tank/test mountpoint /mnt/tank/test default
tank/test sharenfs off default
tank/test checksum on inherited from tank
tank/test compression lz4 inherited from tank
tank/test atime off inherited from tank
tank/test devices on default
tank/test exec on inherited from tank
tank/test setuid on default
tank/test readonly off inherited from tank
tank/test zoned off default
tank/test snapdir hidden local
tank/test aclmode restricted local
tank/test aclinherit passthrough local
tank/test createtxg 14440213 -
tank/test canmount on default
tank/test xattr sa local
tank/test copies 1 local
tank/test version 5 -
tank/test utf8only off -
tank/test normalization none -
tank/test casesensitivity sensitive -
tank/test vscan off default
tank/test nbmand off default
tank/test sharesmb off default
tank/test refquota none default
tank/test refreservation none default
tank/test guid 10062150245975883744 -
tank/test primarycache all default
tank/test secondarycache all default
tank/test usedbysnapshots 112K -
tank/test usedbydataset 208K -
tank/test usedbychildren 0B -
tank/test usedbyrefreservation 0B -
tank/test logbias latency default
tank/test objsetid 140262 -
tank/test dedup off inherited from tank
tank/test mlslabel none default
tank/test sync standard inherited from tank
tank/test dnodesize legacy default
tank/test refcompressratio 1.00x -
tank/test written 128K -
tank/test logicalused 74K -
tank/test logicalreferenced 46K -
tank/test volmode default default
tank/test filesystem_limit none default
tank/test snapshot_limit none default
tank/test filesystem_count none default
tank/test snapshot_count none default
tank/test snapdev hidden inherited from tank
tank/test acltype nfsv4 local
tank/test context none default
tank/test fscontext none default
tank/test defcontext none default
tank/test rootcontext none default
tank/test relatime on default
tank/test redundant_metadata all default
tank/test overlay on default
tank/test encryption off default
tank/test keylocation none default
tank/test keyformat none default
tank/test pbkdf2iters 0 default
tank/test special_small_blocks 0 inherited from tank
tank/test snapshots_changed Tue Aug 4 0:40:00 2026 -
tank/test prefetch all default
tank/test org.freenas:description local
tank/test org.truenas:managedby 10.10.20.107 local
tank/test org.freenas:refquota_warning 95 inherited from tank

I can add that if I restrict the folder (and file) to read permissions then I am denied delete through sudo -u also. So it seems to be an extension of the write permissions which also gives delete.

Editing NFSv4 ACL for directory: /mnt/tank/test

    user:dummy:r-x---a-R-c---:fd-----:allow

Get-ACL test.txt

File: test.txt

owner: 0

group: 0

mode: 0o100000

trivial_acl: false

ACL flags: none

    user:dummy:r-x---a-R-c---:------I:allow