PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Webinterface für Konfigurationsdateien



thovan
23-05-2005, 07:54
Hy,

für unser Postfix-Mailrelay soll ein Web-Interface programmiert werden, damit die User Ihre Black-/Whitelisten selbst verwalten können.

Dafür muss auf globale Konfigurationsdateien (in /etc ) zugegriffen werden und auch ein Systembefehl (postfix reload) ausgeführt werden.

Was ist da besser?
Perl oder PHP?

Was sollte ich wegen Zugriffsrechten auf Dateien/Verzeichnisse beachten?

michael.sprick
24-05-2005, 07:43
Nimm die Sprache, mit der Du am besten zurecht kommst.


Was die Berechtigungen betrifft, so musst Du sehr vorsichtig sein. Wenn Du Dateien in /etc/ schreiben willst, dann würde ich von der Webanwendung lediglich eine Art Jobliste erzeugen lassen. Nicht direkt schreiben. Dann braucht das Skript keine Schreibrecht auf /etc.

In einem Cronjob kannst Du dann ja alle 5 Minuten die Jobliste abarbeiten und die Änderungen in Deinen Dateien machen und den Server mit reload neu initialisieren.

thovan
24-05-2005, 07:47
In einem Cronjob kannst Du dann ja alle 5 Minuten die Jobliste abarbeiten und die Änderungen in Deinen Dateien machen und den Server mit reload neu initialisieren.

Das hätte aber den Nachteil, dass der Server alle 5 Minuten neu initialisiert werden würde.
Da müsste dann eine Überprüfung schon mit rein, dass er das nur bei Änderungen macht.

Aber wäre es nicht genau dasselbe, wenn ich vom Script einen "Interpreter" für die Jobliste ausführen lassen würde, der dann die entsprechende Berechtigung hat?

michael.sprick
24-05-2005, 08:34
Du kannst in der JobListe ja bei jedem Job ein Flag setzen, an dem Du erkennst, ob der Server neu gestartet werden soll. Evtl. muss das ja garnicht sein.
Außerdem kannst du ja acuh überprüfen, ob die Datei seit dem letzten Durchlauf verändert wurde... wenn nicht, brauchst du auch keinen Neustart.

Wenn das Skript z. B. als wwwrun läuft und dann einen "Interpreter" aufruft, der die Jobliste abbarbeitet, dann läuft der "Interpreter" grundsätzlich auch erstmal als wwwrun. Bleibt also nur wieder setuid oder sudo. Das geht zwar auch, kommt aber drauf an, wie sicher die Umgebung ist. Ich würde es nicht meinem Webserver überlassen, ein skript mit Rootrechten zu starten...

Wenn Du den Cronjob nimmst hast Du es komplett getrennt.

thovan
24-05-2005, 08:55
Dann ist bloss noch die Schwierigkeit, dem Web-Interface die aktuelle Konfiguration mitzuteilen.
(Irgendwie muss es ja an die aktuelle Config-Datei rankommen!)

Und ich muss irgendwie dass noch hinbekommen, dass es keine Probleme gibt, wenn ich während dieses Zietintervalles zwischen den CronJobs mehrmals Änderungen vornehme, dass die neuen Jobliste nicht die alte überschreibt und damit Parameter-Änderungen verloren gehen.

Hast Du dazu auch eine Idee?

thovan
01-06-2005, 13:29
Ich habe noch ein weiteres Problem:

Wie komme ich vom WebInterface an die Log-Files von postfix?

klewan
01-06-2005, 13:40
ich würd das mehr in die richtung lösen

einen kleinen inetd/xinet.d der nur connects von 127.0.0.1 zulässt

mit php (webinterface) drauf connecten und commandos als root (unter welchem halt der inetd dienst läuft) ausführen und die ausgabe über den socket auslesen

zusätzlich zum 127.0.0.1 check würd ich noch eine liste mit erlaubten commandos berücksichtigen und alles andre was nicht in dieser liste ist wird nicht ausgeführt

noch dazu ein paar pfad checks (damit keine .. and so on erlaubt sind)

thovan
01-06-2005, 14:18
einen kleinen inetd/xinet.d der nur connects von 127.0.0.1 zulässt

wie macht man sowas?
Ist die Umsetzung mit Perl/Shellscripts möglich?

Ausserdem zur Erhöhung der Sicherheit: der Dienst muss doch nicht als root laufen, sondern als ein Nutzer, der nur auf die benötigten Dateien Zugriff hat, oder?

klewan
01-06-2005, 15:43
jep sagt ich doch ein user
nur sobald du mit /etc anfängst herum zu dingensbumsen dann endets letztendlich fast immer beim root *fg* :-)



google mal nach inetd du kannst im prinzip jedes x beliebge programm (shell, c, irgend ein linux executable halt) ausführen
und bekommst als STDIN das was per socket reinkommt und alles was du auf STDOUT schreibst geht retour über den socket *fg*



mehr dazu -> google