IPC user -> root process

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

IPC user -> root process

Beitragvon Pygoscelis papua » Montag 9. Oktober 2017, 07:36

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?
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Sirius3
User
Beiträge: 6385
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: IPC user -> root process

Beitragvon Sirius3 » Montag 9. Oktober 2017, 08:08

@Pygoscelis papua: Da Du eine bidirektionale Kommunikation willst, sind Sockets wohl das richtige.
DasIch
User
Beiträge: 2371
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Re: IPC user -> root process

Beitragvon DasIch » Montag 9. Oktober 2017, 09:28

Wieso nutzt du nicht einfach HTTP? Sofern du Zugriff auf den socket bekommst, könntest du einen Ident oder Peer Authentication benutzen.
Benutzeravatar
__deets__
User
Beiträge: 1100
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: IPC user -> root process

Beitragvon __deets__ » Montag 9. Oktober 2017, 09:29

Ich würde dir zu einer Middleware wie zeromq oder nanomsg raten. Dort gibt es schon fertige pattern für zB request/response sockets.
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18:36

Re: IPC user -> root process

Beitragvon Pygoscelis papua » Montag 9. Oktober 2017, 17:32

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? ...
import this
hidden python features

JAVA = Just Another Vulnerability Announcement :D
Benutzeravatar
__deets__
User
Beiträge: 1100
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: IPC user -> root process

Beitragvon __deets__ » Montag 9. Oktober 2017, 17:39

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder