Programm systemweit nur einmal ausführen
-
Hallo,
ich suche eine portable Möglichkeit sicherzustellen, dass ein Programm systemweit nur einmal ausgeführt wird. Relevant ist hierbei der Sicherheits-Aspekt (das Programm soll allermöglichst nicht ausgetrickst werden können, auch nicht von jemandem mit Superuser-Rechten). Wenig relevant beim Sicherheitsaspekt ist aber, dass jemand mit Disassembler (o.ä.) versucht das Programm anzugreifen.
Aus diesem Grunde fallen Lockfiles weg (Probleme mit symbolischen Links, Race Conditions etc.). Sockets kommen per Definition leider auch nicht Frage.
Meine nächste Überlegung ging in Richtung POSIX Mutexes. Leider muss das Setzen eines systemweiten Mutexes gemäß POSIX-Spec nicht implementiert sein und über ein Define abgefragt werden. Von daher fallen jene auch weg.
Was bleibt mir an Möglichkeiten? Wichtig wäre, dass diese portabel sind (z.B. Lösung über POSIX oder System V Funktionen). Wenn jemand sicherheitstechnische Bedenken an der Machbarkeit hat, wäre ich natürlich auch an einer Diskussion darüber interessiert.
Grüße und danke im Voraus.
-
7H3 N4C3R schrieb:
Relevant ist hierbei der Sicherheits-Aspekt (das Programm soll allermöglichst nicht ausgetrickst werden können, auch nicht von jemandem mit Superuser-Rechten).
Nun es gibt viele Möglichkeiten das zu realisieren, sofern der Aufrufer keine superuserrechte hat und das prog mit suid läuft. Ich bezweifle jedoch, dass es möglich ist (ausser das prog löscht sich selbst
), sofern der Aufrufer uid=0 oder eid=0.
Ich weis nicht was Du dammit erreichen willst, aber ich würde mir ein anderes Sicherheitskonzept überlegen. Der root jedenfalls sollt oberste Kontrolle über prozessverläufe haben. Der Versuch ihn auszusperren, bricht jedes Sicherheitskonzept.mfg
-
linu(x)bie schrieb:
Ich weis nicht was Du dammit erreichen willst
Die Idee ist folgende: Ein Lizenzmanager liest eine Lizenzdatei und stellt danach übers Netzwerk die in der Datei angegebenen Lizenzen zur Verfügung. Startet man den Server mehrfach auf verschiedenen Ports, so hätte man die n-fache Anzahl an Lizenzen.
Der Lizenzmanager wird mitausgeliefert. Also wird der Anwender sicherlich das starke Bedürfnis haben, mehr Lizenzen zu bekommen als eigentlich gedacht.
-
da könnten semaphore helfen.
semaphore sind ähnlich wie mutex aber systemweit.
http://www.pronix.de/pronix-218.html