[devel] [PATCH hasher-priv v1 1/3] Make a daemon from the hasher-priv
Alexey Gladkov
legion на altlinux.ru
Чт Окт 1 22:43:04 MSK 2020
On Thu, Sep 17, 2020 at 04:10:13PM +0300, Arseny Maslennikov wrote:
> On Fri, Dec 13, 2019 at 12:42:03PM +0100, Alex Gladkov wrote:
> > From: Alexey Gladkov <legion на altlinux.org>
> >
> > All privileged operations moved to the daemon. Commands to the server
> > are sent through the unix domain socket. The credentials which the sender
> > specifies are checked by the kernel. The hasher-priv no longer SUID.
>
> I'm going to suggest some English literacy/typo improvements in a separate
> email.
>
> >
> > For each user server creates a separate session process that executes
> > commands only from the user who created it. The session process ends
>
> Since that new process will still be privileged, why the additional fork
> and the new listening socket inode? Is the strive for less complex
> daemon source code the only driver for that, albeit a perfectly viable
> one?
We have privileged server. When a user request comes in a session daemon
is forked for him that opens a socket for such user. A separate process
is created for each job. If the session daemon is inactive, then after a
session_timeout it will terminate. This is done to isolate one user from
another. You cannot DoS the main server.
> > after a certain period of inactivity.
>
> No problem with that, but IMO we still should be careful
> about resource leaks.
The admin controls the number of users and hence the number of possible
session daemons.
> >
>
>
>
> > Signed-off-by: Alexey Gladkov <legion на altlinux.org>
> > ---
> > hasher-priv/.gitignore | 1 +
> > hasher-priv/DESIGN | 281 ++++++++++++++++----------
>
> I'd like to see a formal description of the client-server protocol in e.
> g. hasher-priv/IPC, that shows the intended message exchanges and
> meanings. The message contents can be rather easily inferred from the C
> headers, but the semantics cannot. This ends up as a source of
> programming errors, see the other emails.
>
> The relevant information is probably already present in the DESIGN file,
> but, as this is documentation for humans, we should wrap it into a form
> that's easier to comprehend without wasting much time.
>
> I'm also worried about the message format using plain C ABI structs.
> We're not going to use it over the network on machines with different
> architectures, and we're never going to support a client and server from
> different package builds, sure. But is this enough of a justification?
Don't be fooled that a socket is being used. The hasher-provd will not be
able to work over the network. The file descriptors are passed over
the socket and privileges are checked.
> > hasher-priv/Makefile | 28 ++-
> > hasher-priv/caller.c | 81 ++++----
>
> After reading the following 2 new files...
>
> > hasher-priv/caller_server.c | 373 ++++++++++++++++++++++++++++++++++
> > hasher-priv/caller_task.c | 214 ++++++++++++++++++++
>
> ..., I'm not sure why do they have to be separate.
> They can even be merged with caller.c, perhaps.
>
> > hasher-priv/cmdline.c | 27 ++-
> > hasher-priv/communication.c | 392 ++++++++++++++++++++++++++++++++++++
> > hasher-priv/communication.h | 77 +++++++
> > hasher-priv/config.c | 143 ++++++++++++-
> > hasher-priv/epoll.c | 39 ++++
> > hasher-priv/epoll.h | 18 ++
> > hasher-priv/hasher-priv.c | 78 +++++++
> > hasher-priv/hasher-privd.c | 375 ++++++++++++++++++++++++++++++++++
> > hasher-priv/io_log.c | 2 +-
> > hasher-priv/io_x11.c | 2 +-
> > hasher-priv/killuid.c | 2 +-
> > hasher-priv/logging.c | 64 ++++++
> > hasher-priv/logging.h | 55 +++++
> > hasher-priv/main.c | 75 -------
> > hasher-priv/pass.c | 117 ++++++++++-
> > hasher-priv/pidfile.c | 128 ++++++++++++
> > hasher-priv/pidfile.h | 44 ++++
> > hasher-priv/priv.h | 33 +--
> > hasher-priv/server.conf | 13 ++
> > hasher-priv/sockets.c | 183 +++++++++++++++++
> > hasher-priv/sockets.h | 32 +++
> > hasher-priv/x11.c | 1 +
> > 28 files changed, 2632 insertions(+), 246 deletions(-)
> > create mode 100644 hasher-priv/caller_server.c
> > create mode 100644 hasher-priv/caller_task.c
> > create mode 100644 hasher-priv/communication.c
> > create mode 100644 hasher-priv/communication.h
> > create mode 100644 hasher-priv/epoll.c
> > create mode 100644 hasher-priv/epoll.h
> > create mode 100644 hasher-priv/hasher-priv.c
> > create mode 100644 hasher-priv/hasher-privd.c
> > create mode 100644 hasher-priv/logging.c
> > create mode 100644 hasher-priv/logging.h
> > delete mode 100644 hasher-priv/main.c
> > create mode 100644 hasher-priv/pidfile.c
> > create mode 100644 hasher-priv/pidfile.h
> > create mode 100644 hasher-priv/server.conf
> > create mode 100644 hasher-priv/sockets.c
> > create mode 100644 hasher-priv/sockets.h
>
> Wow, this patch is rather big. That would be easier to review if there
> was a bunch of logically self-contained commits, which could later be
> squashed by the merging maintainer, perhaps, if there's a requirement
> that every commit has to build successfully and run well.
>
> I'm going to post reviews in separate messages, one answer per file.
>
--
Rgrds, legion
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : signature.asc
Тип : application/pgp-signature
Размер : 195 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20201001/6351ce06/attachment.bin>
Подробная информация о списке рассылки Devel