[Samba] POSIX vs. Windows ACLs
Patrick Goetz
pgoetz at math.utexas.edu
Tue Nov 2 20:00:54 UTC 2021
Thanks, Jeremy; that was extremely informative.
So thinking out loud a bit. I've been looking at the AGDLP permissions
design pattern espoused by many of the Windows AD people. At first I
didn't think much of this until I heard someone point out that this is a
way to avoid having to mess with your filesystem ACLs, which perked my
interest, as I've spent what I would consider way too much time fine
tuning ACLs on multi-user systems with beyond POSIX basic security
requirements.
For the benefit of those not familiar with AGDLP, this stands for
A - Accounts
G - Global Security Groups
DL - Domain Local Security Groups
P - Permissions (on resources)
The idea is that you set up permissions on, let's say, a directory
resource for domain local groups, and then never touch them again.
You then grant/deny access to this folder by moving global groups in and
out of the affiliated domain local groups.
So, it would work like this:
I have a directory called /data/experiments/
- One group of users should have only read access
- Another group should have read and write access
So I create 2 domain local security groups: data-experiments-r, and
data-experiments-rw and set the appropriate ACLs for these groups on the
/data/experiments folder (using POSIX or Windows ACLs).
Right now bob, alice, ted, and jane should have rw access, and
bill, steve, sally, frieda, and nick should only have r access.
So I create a global group called G-pi-grad containing bob, alice, ted,
and jane, and another global group called G-students containing bill,
steve, sally, frieda, and nick.
I then add G-pi-grads to data-experiments-rw and G-students to
data-experiments-r.
Let's say right now nick is a student assistant, so shouldn't have write
access to experiments. But he graduates and becomes a grad student with
his own experiments to run. No problem, I move nick from G-students to
G-pi-grads.
We start a collaboration with people from another lab, biff, boff, and
boof. We'd like to give them read access to the experiments. No
problem, I create another global group called G-baff-lab containing
biff, boff, and boof, and then add the G-baff-lab group to the
data-experiments-r DL group. When the collaboration is over, I remove
G-baff-lab from data-experiments-r.
Notice I haven't touched the filesystem ACLs in all of this and don't
plan to have to -- ever.
I think the original intention of this was to make it easier to share
resources across domains, although the group types are horribly
misnamed. "Global" groups are domain specific, and can only contain
users/groups from a particular domain, while "Domain Local" groups can
contain Global groups from any domain. Um, what?
For those in need of the finer granularity offered by Windows ACLs, one
could envision creating DL groups for each required combination of ACLs,
and perhaps even deny groups because, say, you want everyone in 100
member G-labusers group to have write access to /important-stuff except
for Jack, because he keeps getting drunk and accidentally deleting files
in that folder, so jack would go in the data-experiments-d for deny
group, which overrides G-labusers membership.
These *seems* like it would get unmanageable fast, but in real life how
granular do most admins make these permissions anyway? I daresay that
because many admins don't fully understand Windows ACLs, they keep it
simple and could likely get by with what would be POSIX basic ACLs in
the linux world. Anyone familiar with any small offices where everyone
in the office has write access to every file in a giant shared
filesystem? I do. <:)
Any thoughts on this? My thought is this would allow me to stick to the
POSIX ACLs I'm comfortable with and which afford easy ssh-fuse access to
linux users at a remote location technically under an unaffiliated
domain. To use Windows ACLs on linux, I would need to have each linux
machine bound to the domain, and at the moment I'm not sure that's
feasible. And since the filesystem ACLs never change, I wouldn't want
Windows users messing with them anyway.
Based on what Jeremy said, I think it should be possible to convert from
POSIX ACLs to Windows ACLs at a later date, if things change?
On 11/2/21 13:27, Jeremy Allison wrote:
> On Tue, Nov 02, 2021 at 04:49:01AM -0500, Patrick Goetz via samba wrote:
>>
>> Another question referring to a Samba domain member file server.
>>
>> The file system is ext4 on an Ubuntu 20.04.
>>
>> I would like to use Windows ACLs so my windows users can change
>> permissions on directories/files, but we also use linux data
>> processing systems, so the permissions (beyond POSIX basic) need to
>> work there, too.
>>
>> I think this means I'm stuck using POSIX extended ACLs, with Windows
>> users not being able to change permissions. Just want to make sure I
>> understand all the possibilities:
>
> No, Samba will map Windows permission in a best-effort case
> to POSIX ACLs. It can also keep a copy of the pristine Windows
> ACL in an EA associated with the file so access via Windows clients
> is mediated by the same Windows ACL algorithm used on a Windows
> server.
>
>> Currently the linux systems access files through NFS mounts, so no
>> hope of Windows ACLs working there, but if I were to bind the linux
>> machines to the domain and do the mounts through SMB, would the linux
>> systems respect the Windows ACL authorizations because permission is
>> determined by the Samba file server?
>
> Yes. Samba obeys the pristine Windows ACLs before delegating
> to the underlying filesystem - i.e. if a Windows ACL says deny,
> we deny. If a Windows ACL says "allow", we are still bound by
> the underlying POSIX ACL mapping on ext4 so it's possible you
> may get a missmatch and a "deny" when the Windows ACL would
> expect "allow". But this is failing safe, not failing open,
> which is what you want.
>
>> Understood that I would lose the
>> ability to edit ACLs from linux, but the linux users are really
>> Windows users working on a linux system because that's where the
>> software is and they have no idea how to edit permissions there anyway.
>
> Linux users can use the smbcacls binary to edit Windows ACLs
> on a remote server.
>
>> Beyond this, if I'm working directly on the Samba file server, are
>> there command line tools available for editing Windows ACLs, or is
>> this sufficiently complicated that only a GUI will do?
>
> smbcacls.
>
>> The conjunction of linux and windows access control is a terrible
>> mess, as already discussed, but the world doesn't stop moving as a
>> result, so we will continue to cobble together bastardized
>> arrangements that mostly work. I'm at the Build a Frankenstein shop
>> now...
>
> "Puttin' on the Ritz !":
>
> https://www.youtube.com/watch?v=ab7NyKw0VYQ
>>> This message is from an external sender. Learn more about why this <<
>>> matters at https://links.utexas.edu/rtyclf. <<
>
More information about the samba
mailing list