Seite 1 von 1

IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 07:36
von Pygoscelis papua
Ich möchte ein Programm erstellen, das folgendes tuen soll:
1.der superuser erstellt einen Prozess, der auf "requests" von anderen Programmen wartet
2.ein user schickt einen request, worauf der superuser-Prozess antwortet
3.er antwortet indem er aus einer Datei den für den user relevanten teil zurücksendet.

So teil 1 und 2 ist ja nicht schwer,
1.Dazu wollte ich eine MessageQueue aus dem sysv_ipc packet verwenden,
also erstelle ich eine Queue, und sorge dafr das beide Prozesse den Key bekommen.
2.Dann sendet der user den request mit MessageQueue.send(...) und der superuser empfängt ihn mit MQ.receive()

Aber wie kann man es hinbekommen, dass nicht ein anderer User auch noch MQ.receive() ausführt und dann einige requests umgeleitet werden,
und wie macht man das so, dass der user sich authentifizieren kann?

Und die letzte Frage ist: sollte man für soetwas IPC-MessageQueue verwenden, oder eher sockets oder shared memory?

Re: IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 08:08
von Sirius3
@Pygoscelis papua: Da Du eine bidirektionale Kommunikation willst, sind Sockets wohl das richtige.

Re: IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 09:28
von DasIch
Wieso nutzt du nicht einfach HTTP? Sofern du Zugriff auf den socket bekommst, könntest du einen Ident oder Peer Authentication benutzen.

Re: IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 09:29
von __deets__
Ich würde dir zu einer Middleware wie zeromq oder nanomsg raten. Dort gibt es schon fertige pattern für zB request/response sockets.

Re: IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 17:32
von Pygoscelis papua
Nee ich denke sockets ist schon gut ... letztendlich ist mein Projekt zum lernen gedacht und nicht um alles schon fertig zu haben,
außerdem werde ich im Studium sockets auch noch brauchen (dann aber in C :wink: )

Aber könnte man bidirektionale kommunikation nicht auch mit s Queues machen? ...

Re: IPC user -> root process

Verfasst: Montag 9. Oktober 2017, 17:39
von __deets__
Kann man. Muss man mehr Aufwand reinstecken, weil du entweder eine explizite Queue pro client hast (und entsprechend eine generische zum Aufbau genau solcher Queues brauchst, und den Muell abraeumen musst wenn zB dein client stirbt), oder du das Protokoll so aufbohrst das die client-PID als message-typ genutzt wird, um den dispatch individuell zu gestalten.

Sockets haben dieses Prinzip durch ihren accept-Call schon eingebaut. Dafuer baust du da dann wiederum ein Protokoll drueber um Messages zu bekommen, da sockets nur streams sind und du nicht weisst, ob du gerade einen Teil, eine ganze oder gar mehrere Nachrichten empfangen hast.