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

Patrick Goetz pgoetz at math.utexas.edu
Mon Nov 8 15:38:18 UTC 2021


I'm down to the last step of my current re-implementation of Samba, 
namely getting the permissions to work right.

Here is the share section (+ some general) from my smb.conf file:


    winbind refresh tickets = Yes
    vfs objects = acl_xattr

[share]
    comment = Share Directory
    path = /data/share
    guest ok = no
    browseable = yes
    writeable = yes
    create mask = 0770
    directory mask = 0770
    # inherit permissions = yes
    follow symlinks = yes



Here are the filesystem permissions on the directory:

root at data2:/data# ls -ld share
drwxrws---+ 3 root ea-staff 4096 Nov  6 16:31 share

root at data2:/data# getfacl share
# file: share
# owner: root
# group: ea-staff
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:group::rwx
default:group:ea-staff:rwx
default:mask::rwx
default:other::---


Notice that the setgid bit is set, with group = (security group) ea-staff

So, I login on a Windows machine as a member of the ea-staff group, and 
save a document to the share:

root at data2:/data/share# ls -l top*
-rwxrwx---+ 1 dhales domain users 227 Nov  8 09:12 
top-secret_document_only_staff_should_see.rtf


Notice that the setgid bit on the parent folder was ignored, and the 
primary group assignment to the file is Domain Users.  Worse, anyone in 
Domain Users has access to write this file, although I suppose the lack 
of other  "x" permission on the parent folder might prevent access.

I think I read that if you are using Windows ACLs, then the Windows ACLs 
are checked and honored first; however this seems like a violation of 
the least surprise principle, since I'm getting user rights  elevations 
(namely Domain Users read/write access) that I don't want.

These Wiki pages talk about using POSIX and Windows ACLs respectively:

   https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs
   https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs

  but I can't figure out how to tell the system I would prefer to base 
ACLs on POSIX rather than Windows ACLs.


Now, for the "it gets worse" category.  There is an awful lot of 
misinformation about configuring a Home share, perhaps because the 
Windows people seem to see this as something you use for backup only. 
The Home folder Wiki page also suggests that you can use GPO drive 
mapping for this rather than setting it in the user's Profile. Looking 
online I see Windows admins stating that one should *not* use GPO file 
sharing to configure the home directory and that only the user's Profile 
tab should be used for this.  In any case, Folder Redirection does not 
appear to work unless you set up a home directory under Profile.

Otherwise, using /home for this purpose appears to work fine and means 
the user will have immediate access to all their files when they ssh 
into the linux fileserver.  However:

[home]
    comment = Home Directories
    path = /data/home
    guest ok = no
    browseable = no
    writeable = yes
    create mask = 0700
    directory mask = 0700
    follow symlinks = yes

root at data2:/data# ls -ld home
drwxr-xr-x+ 8 root root 4096 Nov  6 08:27 home
root at data2:/data# getfacl home
# file: home
# owner: root
# group: root
user::rwx
group::r-x
group:domain\040admins:rwx	#effective:r-x
mask::r-x
other::r-x


/home is a bind mount to /data/home


The same user logs in on a W10 client and saves a file to his Documents 
folder:

root at data2:~# cd /home/dhales/Documents/
root at data2:/home/dhales/Documents# ls -l my*
-rwxrwx---+ 1 dhales domain users 222 Nov  8 09:25 my-super-secret-file.rtf


So looks like the create mask is being ignored as well?

I spend a lot of time adjusting permissions for users.  Most of them 
can't figure out how to do this themselves, and letting a user loose in 
the Windows ACL zoo seems like a recipe for disaster anyway.

Consequently I'd prefer to manage POSIX ACLs via the filesystem and ssh 
and then have the Windows ACL's approximated from that. Is there a way 
to do this?

It also seems to me that the filesystem permissions should *never* be 
bypassed under any circumstances.

Final question if anyone in the know has read this far. By default the 
Windows ACLs are stored in a TDB database on the fileserver's 
filesystem?  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.




More information about the samba mailing list