Apache reload mit PHP geht nicht mehr
Christian L.
- php
Hi,
ich hatte bereits vor knapp einem Jahr die Frage gestellt, ob man den Apache per PHP neu starten könne (http://forum.de.selfhtml.org/archiv/2002/12/31249/)
Ich hatte mich dann halt mit einem Reload begnügt und das folgende Script lief unter SuSE 7.1 problemlos.
$fp = popen('/bin/su -c "/etc/init.d/apache reload"','w') or die("Fehler");
fputs($fp,"rootpasswort") or die("PW Fehler");
pclose($fp);
Seit ich den Server nun auf Red Hat 9 umgestellt habe, funktioniert dieses einfache Script nicht mehr. Natürlich rufe ich nun anstelle von 'apache reload' 'httpd reload' auf.
Wenn ich in einer shell den Befehl '/bin/su -c "/etc/init.d/httpd reload"' eingebe, funktioniert es auch nach der Passworteingabe.
Fehlermeldungen erhalte ich keine, leider kann ich (bzw. weiß ich) nicht, wie ich die Rückmeldung der shell ausgeben kann. proc_open funktioniert nicht, da PHP 4.2.2 installiert ist.
Kann mir da irgend wer weiterhelfen?
Ciao
Christian
Hello,
Hast Du es schon mal mit
<?php #### apache.php ####
$start = /usr/bin/apachectrl restart
;
?>
ausprobiert?
Musst natürlich dem wwwrun dann mindestens Gruppen-X-Rechte geben.
Grüße
Tom
Hi Tom,
$start =
/usr/bin/apachectrl restart
;
Und was mach ich dann mit der Variablen $start?
ausprobiert?
Nein bisher nicht.
Musst natürlich dem wwwrun dann mindestens Gruppen-X-Rechte geben.
Was meinst du damit?
Ich will eigentlich keine anderen Rechte vergeben, deshalb auch die komplizertere Variante mit "popen" und der Übertragung des Passworts.
Ciao
Christian
Hello,
$start =
/usr/bin/apachectrl restart
;Und was mach ich dann mit der Variablen $start?
Die kannst Du nicht mehr ausgeben, weil der Apache schon weg ist, wenn die Antwort kommt.
ausprobiert?
Nein bisher nicht.Musst natürlich dem wwwrun dann mindestens Gruppen-X-Rechte geben.
Was meinst du damit?Ich will eigentlich keine anderen Rechte vergeben, deshalb auch die komplizertere Variante mit "popen" und der Übertragung des Passworts.
Na, dann mach's doch genauso, nur dass Du eben das apachectl (Oh, da hatte ich mich auch verschrieben - ctl ohne r !) -Script benutzt. Da liegt meistens ein Link in /usr/bin
Musst eben mal suchen, wo das Script wirklich abgelegt wurde.
Grüße
Tom
Hi,
ich habe es nun mit folgendem probiert.
-------------
$fp = popen('/bin/su -c "/usr/sbin/apachectl reload"','w') or die("Fehler");
fputs($fp,"rootpasswort") or die("PW Fehler");
pclose($fp);
--------------
Bringt leider auch nichts.
Wie meintest du das vorhin mit
$start = /usr/bin/apachectrl restart
;
Da passiert doch nichts, ausser dass eben der Variablen start ein String mit dem Wert /usr/bin/apachectrl restart
zugewiesen wird.
Ciao
Christian
Moin!
Wie meintest du das vorhin mit
Schätze, er meint sowas:
$start = system(/etc/init.d/apachectl restart
);
oder:
$start = system(/etc/init.d/httpd restart
);
oder ...
Eine Antwort wird's da nicht geben, aber ein Problem:
darf der USER unter dem der Apache gestartet wird das Script ausführen? Vermutlich nicht. Also müssen die Rechte und die Gruppenzugehörigkeit des Users 'wwwrun' noch entsprechend angepasst werden.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
$start = system(
/etc/init.d/apachectl restart
);
oder:
$start = system(/etc/init.d/httpd restart
);
oder ...
Ist das mit den Backticks UND System nun nicht doppeltgemoppelt?
Eine Antwort wird's da nicht geben, aber ein Problem:
darf der USER unter dem der Apache gestartet wird das Script ausführen? Vermutlich nicht. Also müssen die Rechte und die Gruppenzugehörigkeit des Users 'wwwrun' noch entsprechend angepasst werden.
Ja, das hatte ich schon geschrieben.
Ich bekomme die Fehlernummer 126. Leider weiß ich nicht, wo die Linux-Fehlernummern zu finden sind.
Grüße
Tom
Moin!
Ist das mit den Backticks UND System nun nicht doppeltgemoppelt?
Oh. Die hatte ich übersehen. Hab sie für einfache Anführungsstriche gehalten, wie übrigens wohl mein Vorredner auch. Dafür hab ich sie mit Copy & Paste brav übernommen.
Ich bekomme die Fehlernummer 126. Leider weiß ich nicht, wo die Linux-Fehlernummern zu finden sind.
Hm. Da ist Nachdenken angesagt.
[1] Wie sind denn die Rechte für apachectl / httpd gesetzt?
[2] startet der Indianer als wwwrun?
Es gab da mal was, da hat man als root ein Skript geschrieben, dieses an einen Benutzer verschenkt und dann konnte der, was er sonst nicht dürfte... irgendwo in den Tiefen meiner Linuxbücher sollte das von stehen. Den wwwrun in der gruppe root mitmachen zu lassen ist jedenfalls zu gefährlich.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Ich bekomme die Fehlernummer 126. Leider weiß ich nicht, wo die Linux-Fehlernummern zu finden sind.
[1] Wie sind denn die Rechte für apachectl / httpd gesetzt?
Ausführungsrechte auf das Control-Script für wwwrun
[2] startet der Indianer als wwwrun?
Ja. User wwwrun, Group wwwrun
Ich hab schon mächtig Google gequält. Aber die Fehlernummern kann ich nicht finden. Leider ist meine komplette Bibliothek bis auf einen Rest eingemottet. Sonst hätte ich's gleich.
Schade...
Grüße
Tom
Moin!
Ok. Versuch mal als root mittels su zum user wwwrun zu werden. Das sollte ohne Passwort gehen. Dann versuchst Du bitte mal das Control-Script von Hand zu starten.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
also:
Es ist, wie ich es mir dachte. Mit sudo kann man Befehle ausführen, wenn der Benutzer und der Befehl mit Pfadnamen und Optionen in sudoers stehen.
Ein Problem gabs mit dem Script: ich hatte zuviel erlauben müssen. Folglich lasse ich den wwwrun ein Perlskript starten, welches es ihm erlaubt: das pid-file zu lesen, den Apache zu beenden und neu zu starten. Dazu muss ich den Zugriff auf das Perlskript einräumen und außerdem auf das binary.
[1] /home/wwwrun/restartHttpd.pl: (erstellen, chmod 755)
#! /usr/bin/perl
open (DAT,'/var/run/httpd.pid');
$pid=<DAT>;
$kill="kill $pid";
system $kill;
system "/usr/sbin/httpd";
[2] /etc/sudoers: (anhängen)
wwwrun linux=NOPASSWD: /usr/sbin/httpd
wwwrun linux=NOPASSWD: /home/wwwrun/restartHttpd.pl
[3] in php:
start = system('sudo /home/wwwrun/restartHttpd.pl')
Tut es bei mir zumindest. Du musst/kannst die Pfade anpassen, ich habe dem wwwrun extra ein "home" erstellt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®