ZFS deletes ACLs when root edits a file

Andrew Leonard lists at hurricane-ridge.com
Tue Jun 12 19:15:12 UTC 2012


On Tue, Jun 12, 2012 at 7:42 AM, Fabian Keil
<freebsd-listen at fabiankeil.de> wrote:

> Marc Peters <marc at mpeters.org> wrote:
>
>> i observed a strange behaviour when using ACLs on a ZFS filesystem.
>> When a file has ACLs set and is edited by a user, the ACLs get lost
>> when the file is edited and saved.
>>
>> How to repeat:
>>
>> > mount
>> /dev/aacd0s1a on / (ufs, local)
>> devfs on /dev (devfs, local, multilabel)
>> /dev/aacd0s1d on /var (ufs, local, soft-updates)
>> appdata on /appdata (zfs, local, nfsv4acls)
>> /dev/md0 on /appdata/www/cache (ufs, local, soft-updates)
>>
>> > ls -al
>> total 3
>> drwxr-xr-x  2 mpeters  wheel  2 Jun 12 15:31 .
>> drwxr-xr-x  5 root     wheel  5 Jun 12 15:29 ..
>> > touch test.file ls -al
>> total 4
>> drwxr-xr-x  2 mpeters  wheel  3 Jun 12 15:32 .
>> drwxr-xr-x  5 root     wheel  5 Jun 12 15:29 ..
>> - -rw-r--r--  1 mpeters  wheel  0 Jun 12 15:32 test.file
>> > getfacl test.file
>> # file: test.file
>> # owner: mpeters
>> # group: wheel
>>             owner@:rw-p--aARWcCos:------:allow
>>             group@:r-----a-R-c--s:------:allow
>>          everyone@:r-----a-R-c--s:------:allow
>> > setfacl -m user:nobody:rwx::allow test.file ls -al
>> total 4
>> drwxr-xr-x  2 mpeters  wheel  3 Jun 12 15:32 .
>> drwxr-xr-x  5 root     wheel  5 Jun 12 15:29 ..
>> - -rw-r--r--+ 1 mpeters  wheel  0 Jun 12 15:32 test.file
>> > getfacl test.file
>> # file: test.file
>> # owner: mpeters
>> # group: wheel
>>        user:nobody:rwx-----------:------:allow
>>             owner@:rw-p--aARWcCos:------:allow
>>             group@:r-----a-R-c--s:------:allow
>>          everyone@:r-----a-R-c--s:------:allow
>> > vim test.file
>> (do some editing here)
>> "test.file" 2 lines, 12 characters written
>> > ls -al
>> total 4
>> drwxr-xr-x  2 mpeters  wheel   3 Jun 12 15:35 .
>> drwxr-xr-x  5 root     wheel   5 Jun 12 15:29 ..
>> - -rw-r--r--  1 mpeters  wheel  12 Jun 12 15:35 test.file
>> > getfacl test.file
>> # file: test.file
>> # owner: mpeters
>> # group: wheel
>>             owner@:rw-p--aARWcCos:------:allow
>>             group@:r-----a-R-c--s:------:allow
>>          everyone@:r-----a-R-c--s:------:allow
>>
>> As you can see, the ACL for user nobody is gone.
>>
>> Is this behaviour intended?
>
> It is expected if vim replaced the original test.file
> with a modified file with the same name, instead of
> actually editing the original file directly.
>
> To confirm that this is happening you could truss
> vim or run "ls -i test.file" before and after using
> vim (this is probably less reliable, though).
>
> The ACLs shouldn't get lost if you really modify the
> original, for example with:
>
> echo blafasel >> test.file

Also, take a look at what you have the aclmode property set to on the
ZFS file system.  If you have it set to "discard" and if vim makes a
chmod(2) call on the original file, then the ACL entries that do not
represent the mode of the file will be discarded.

-Andy

> Fabian


More information about the freebsd-fs mailing list