Re: context of socket passed between processes

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

 



On Thu, Sep 8, 2022 at 9:42 AM Paul Moore <paul@xxxxxxxxxxxxxx> wrote:
>
> On Thu, Sep 8, 2022 at 9:41 AM Ted Toth <txtoth@xxxxxxxxx> wrote:
> > On Wed, Sep 7, 2022 at 5:46 PM Paul Moore <paul@xxxxxxxxxxxxxx> wrote:
> > > On Wed, Sep 7, 2022 at 4:19 PM Ted Toth <txtoth@xxxxxxxxx> wrote:
> > > >
> > > > systemd uses a helper process (sd-listen) to create sockets and pass
> > > > their fds back to its parent. I've patched systemd to call semanage to
> > > > get the context for the port if it exists and create a context using
> > > > the returned type when calling setsockcreatecon.
> > >
> > > This obviously depends on how you structure and write your policy, but
> > > I don't think you want to use a port type directly as a socket type.
> > > I think we talked about this a little in the other thread, but for
> > > bound/listening sockets maybe you could do a transition for new child
> > > sockets based on the listening socket and port types.
> >
> > To be clear you are suggesting to call setsockcreatecon with the port
> > type but also have a transition rule to transition the port type to a
> > socket type?
>
> Two things:
>
> * I'm not sure you want to reuse a port type as a socket type, that
> seems wrong to me.

I was thinking I'd create an app type, port type, socket
type and a type transition:
type a_t;
type a_port_t;
type a_sock_t
type_transition init_t a_port_t:tcp_socket a_socket_t;

I'd use semanage or cil to set the port type.
semanage port -a -p tcp -t a_port_t XXXX
or:
portcon ...

Then when systemd is creating the socket for the activated service it
would lookup the port type in policy and call security_compute_create
passing in systemds context, the port context and tcp_socket class
which would return an a_socket_t context to be used in the
setsockcreatecon call.

>
> * The socket type transition I was talking about would be new as there
> is not currently a type transition when the kernel creates a new
> socket for incoming connections.
>
> > > > Everything looks
> > > > right i.e. the port type is retrieved, the context is created and
> > > > setsockcreatecon is called without errors. However 'netstat -Z' shows
> > > > the listening sockets type as init_t and not the type in the
> > > > setsockcreatecon call, is this the expected behavior? Can anyone help
> > > > me understand why this is happening?
> > >
> > > You're calling setsockcreatecon() before you create the listening
> > > socket, right?  I wouldn't expect this to work properly if you create
> > > the listening socket and then call setsockcreatecon() hoping to have
> > > the new label applied to the new child sockets.
> >
> > It's not my code  ;) the systemd sd-listen process code does the
> > setsockccreatecon, bind and then listen.
>
> Well, regardless of who wrote the code, setsockcreatecon() is not
> going to have any effect on a socket's label if it is called *after*
> the socket is created.  Additionally, setsockcreatecon() has no effect
> on child sockets created by incoming connections on a listening
> socket; if you want to affect the label of those child sockets today
> you would need to change the label of the listening parent socket.
>
> > Regarding how to get the port context, what would you suggest?
> > Currently I'm calling semanage functions but have considered using the
> > sepol instead.
>
> I'll leave that to the folks who better understand the SELinux
> libraries, my only comment would be that I'm not sure reusing the port
> label is a good idea here.
>
> --
> paul-moore.com



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

  Powered by Linux