IPC user -> root process

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Pygoscelis papua
User
Beiträge: 206
Registriert: Freitag 13. März 2015, 18: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: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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

Wieso nutzt du nicht einfach HTTP? Sofern du Zugriff auf den socket bekommst, könntest du einen Ident oder Peer Authentication benutzen.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14: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

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten