Re: [PATCH] selinux: Allow file owner to set "security.sehash"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jun 5, 2020 at 2:21 AM Chirantan Ekbote <chirantan@xxxxxxxxxxxx> wrote:
>
> On Mon, Jun 1, 2020 at 9:42 PM Stephen Smalley
> <stephen.smalley.work@xxxxxxxxx> wrote:
> >
> > On Mon, Jun 1, 2020 at 3:29 AM Chirantan Ekbote <chirantan@xxxxxxxxxxxx> wrote:
> > >
> > > Normally a process needs CAP_SYS_ADMIN in the namespace that mounted a
> > > particular filesystem in order to set a security xattr. However, this
> > > restriction is relaxed for the security.selinux xattr: the file owner
> > > or a process with CAP_FOWNER in its namespace may set this attribute.
> > >
> > > Apply this relaxed restriction to the security.sehash xattr as well.
> > > Since this xattr is mainly a performance optimization when labeling
> > > files recursively it shouldn't have stricter requirements than setting
> > > the selinux xattr in the first place.
> >
> > First, setting either security.<non-selinux> or security.selinux has
> > an additional MAC check beyond the DAC/capability check; in the former
> > case there is the FILE__SETATTR check and in the latter there are the
> > FILE__RELABELFROM/TO checks.  We need to preserve some kind of SELinux
> > permission check here.
> >
>
> So I understand correctly, what you're asking for is to change this section:
>
>     if (is_sehash)
>         return 0;
>
> to this instead:
>
>     if (is_sehash)
>         return dentry_has_perm(current_cred(), dentry, FILE__SETATTR);
>
> Is that correct?

I would suggest using FILE__RELABELFROM instead, under the raionale
that a process that is allowed to set security.sehash would also be
allowed to set security.selinux.  In contrast, a process might be
alowed to set another attribute (FILE__SETATTR) but not
security.selinux or security.sehash.

> > Second, security.sehash logic in userspace was introduced by Android
> > in its libselinux fork and then copied in upstream logic.  I'm not
> > sure Android wants to relax the current requirement for CAP_SYS_ADMIN
> > - I have copied them above.  A possible concern is that an
> > unprivileged process could disable the relabeling of a part of the
> > tree that it owns upon an upgrade, which could have unexpected
> > consequences.
>
> That's a good point.  Is this not an issue for the selinux xattr
> because the selinux check could prevent a process from changing the
> label of a file it owns?

Correct.

> The background for this patch is that I have a fuse server that runs
> in a user namespace.  It runs as root in that namespace and keeps all
> the file system caps so that it can set selinux xattrs.  However, it
> cannot set the sehash xattr as that needs CAP_SYS_ADMIN in the parent
> namespace.  Looking at the code I thought that might have just been an
> oversight but if it's intentional then do you have any suggestions for
> how to make this work?  I'd rather not weaken the sandbox for this
> process just so that it can set this one xattr.

I'd be willing to move from requiring CAP_SYS_ADMIN to performing a
SELinux permission check (either FILE__RELABELFROM or a new one), but
I'd like the Android folks to chime in here.  Maybe you can ping them
through other channels since they haven't responded yet.



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux