[Samba] permissions, and maybe a violation of the least surprise principle

Patrick Goetz pgoetz at math.utexas.edu
Tue Nov 9 15:41:39 UTC 2021

On 11/9/21 07:02, Nick Couchman wrote:
>      >> What happens to these permissions if I migrate the data (say, via
>      >> rsync) to another server? Seems like all the Windows ACLs will
>     be lost
>      >> unless I transfer the relevant database as well.
>      >
>      > So long as rsync transfers EA's then all will work.
>     That's kind of the question, I guess. For ext4 the xattrs are stored in
>     a separate data block referenced from inodes via inode.i_file_acl*
>     https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes
>     <https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Extended_Attributes>
>     I suppose rsync could/would be smart enough to follow this pointer to
>     the xattrs.
> Yes, rsync will copy/synchronize extended attributes and POSIX ACLs. 
> However, keep in mind that POSIX ACLs and EAs are different things, and 
> so copying over one does not necessarily mean the other is copied over - 
> if you've applied Windows-type permissions that are stored in xattrs, 
> and you successfully copy over files with the EAs intact, the underlying 
> POSIX ACLs will not be copied/updated unless you make sure that you 
> specifically copy those over. The linkage between the POSIX ACLs and the 
> EAs is done completely by Samba and not by any Linux-level linkage 
> between the two.
>     This got me interested, so I'm running some tests.  For starters, if
>     you
>     `scp -p` files from an XFS filesystem to ext4, POSIX ALC's are not
>     preserved:
>     root at kraken:/EM/21sep30a# getfacl 20210930_YD04_68_004_0.0_14.08.45.eer
>     # file: 20210930_YD04_68_004_0.0_14.08.45.eer
>     # owner: jonesimages
>     # group: jonesimages
>     user::rwx
>     user:abril:r-x
>     user:jones:rwx
>     user:cryosparc_user:r-x
>     user:afb938:r-x
>     group::r-x
>     group:cns-joneslabusers:r-x
>     mask::rwx
>     other::---
>     root at kraken:/EM/21sep30a# scp -p  20210930_YD04_68_004_0.0_14.08.45.eer
>     pgoetz at frog.my-domain.com:/home/pgoetz/temp
>     [pgoetz at frog temp]$ getfacl 20210930_YD04_68_004_0.0_14.08.45.eer
>     # file: 20210930_YD04_68_004_0.0_14.08.45.eer
>     # owner: pgoetz
>     # group: pgoetz
>     user::rwx
>     group::rwx
>     other::---
>     Looks like rsync'ing from XFS to ZFS doesn't preserve POSIX extended
>     ACLs, either. Damn.  I need to find an ext4 system I'm using POSIX ACLs
>     on; maybe ext4 performs better in this regard.
>     Has anyone tested to see if copying files from ext4 to ext4 preserves
>     POSIX extended ACLs? Under some conditions (say same UID's on each
>     system)?
> What flags are you using with rsync? There's a flag specifically for 
> ACLs (-A), and one for xattrs (-X) so you have to make sure to specify 
> those. I generally have very good success with copying ACL across 
> filesystems, though I cannot say for sure that I've tried from XFS to 
> ZFS, etc. My rsync command generally looks like this:
> rsync -aADXHv <source> <destination>

That's it! I was just assuming -a covered everything, but the rsync man 
page indicates otherwise.  In particular, I was not using -A or -X.

Wow, you just averted a potential disaster I wasn't even aware of due to 
having too few brain cells. On the other hand, you saved me from the 
happy life of a baker when my PB filesystem crashes and has to be 
restored from backup, so pros and cons.

Question: why are you backing up devices? Does this only apply to root 
filesystem backups?

> Also, one thing I've found with rsync regarding ID mapping is this:
> * If the user account exists on the destination system, ownership will 
> be properly changed so that the username matches. So, if account "nick" 
> has ID 1001 on system A, and account "nick" has ID 2001 on system B, if 
> I rsync from system A to B, the account "nick" will own all of the files 
> on System B that the account owned on system A, regardless of the fact 
> that the numeric ID does not match.

Wait, what?! Why would rsync care or even know about the uid <-> 
username mapping? This is a feature of the directory service/files and 
outside the filesystem entirely AFAIK.

> * If the user account does not exist on system B, or files are owned by 
> a UID that has no user on system A, then the ownership will just be 
> copied over numerically. So, if account "nick" exists on system A with 
> ID 1001, and there is no account "nick" on system B, then the files will 
> be copied over with owner 1001. Also, if files on system A have an owner 
> ID of 1002 with no account, those will just be copied over with the same 
> numeric ID to system B.
>     If I have to restore a 1PB filesystem from backup and need to
>     reconstruct all the ACLs by hand it's going to be a sad, sad day. 
>     Week,
>     I meant; possibly month. Actually infinite, since I'll probably quit
>     and
>     will open a bakery instead. Bread doesn't have ACLs.
> I like bread. With butter. I will visit your bakery.
> -Nick

More information about the samba mailing list