[systemd-devel] [PATCH] socket: introduce SELinuxLabeledNet option
Lennart Poettering
lennart at poettering.net
Wed Aug 20 06:29:37 PDT 2014
On Wed, 20.08.14 12:01, Michal Sekletar (msekleta at redhat.com) wrote:
> > > + if (context->selinux_labeled_net && use_selinux()) {
> > > + _cleanup_free_ char *label = NULL;
> > > +
> > > + err = label_get_socket_label(socket_fd, command->path, &label);
> > > + if (err < 0) {
> > > + r = EXIT_SELINUX_CONTEXT;
> > > + goto fail_child;
> > > + }
> > > +
> > > + err = setexeccon(label);
> > > + if (err < 0) {
> > > + r = EXIT_SELINUX_CONTEXT;
> > > + goto fail_child;
> > > + }
> > > + }
> >
> > If both SELinuxContext= and SELinuxLabeledNet= are set we should
> > probably not execute one after the other, but only one of them.
>
> I think that it makes sense to set both and resulting label will be combination
> of both. Note that from SELinux label we acquire from network we are using only
> security level part.
Hmm? But in both cases we just execute setexeccon()? Are you saying that
if we invoke setexeccon() twice with a specific combination of
parameters then it leads to different results than just doing the second
invocation and leaving the first one out?
The documentation doesn't mention that.
Obviously, I have no understanding of SELinux as it appears, but this
sounds so werid to me.
Dan, what's the story here?
> > > +#ifdef HAVE_SELINUX
> > > + if (!know_label && s->selinux_labeled_net) {
> > > + r = getcon(&label);
> > > + if (r < 0)
> > > + return r;
> > > + know_label = true;
> > > + }
> > > +#endif
> > > if (!know_label) {
> > >
> >
> > Can you explain this bit? Why would we label the listening socket with our own
> > label here?
>
> This is because of MLS SELinux policy implementation details. If we relabel to
> the context acquired from the target binary then it if not possible to connect to
> the socket because SELinux denies a packet receive on the socket.
>
> https://github.com/selinux-policy/selinux-policy/blob/rawhide-base/policy/mls#L361
I don't understand a word of this, I mus say.
But is it really the intention here to take the current process label
and apply it directly to the socket fd?
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list