PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache: Problem mit php und libssh2



bloodknight
07.10.11, 07:06
Hallo zusammen,

ich habe ein merkwürdiges Problem unter CentOS 5.7. Es soll ein php-Skript aufgerufen werden, welches sich per SSH auf eine entfernte Maschine verbindet. Deshalb habe ich die libssh2-lib sowie die ssh2-extensions kompiliert. phpinfo() und php -m zeigen mir auch brav an, das alles funktionieren soll. Rufe ich das Script nun im Browser auf, kommt kein SSH-Verbindungsaufbau zustande. Mit tcpdump sehe ich auch keine entsprechenden Pakete. Nun das merkwürdige: Rufe ich genau das selbe Skript auf genau derselben Maschine nun in der Konsole mittels php auf, funktioniert es! Es kommt ein Verbindungsaufbau zustande, Login funktioniert, ich kann entsprechende SSH-Pakete sehen :ugly:

Das sagt mir jetzt: Skript ist ok; libssh2 funktioniert; entfernter Host ist erreichbar. Bleibt als "Fehlerquelle" ja nur der Apache oder? Daher meine Frage: Was läuft hier verkehrt?
Bin etwas ratlos und für jeden Tip dankbar!

ciao bloodknight

bisti
07.10.11, 17:28
Setze die "display_errors" Variable zu "on" in der php.ini Datei fest, und dann rufe den Script noch einmal, und schaue an der Fehlermeldung, wenn die überhaupt gibt. Es kann sowohl das php.ini als auch Selinux Problem sein(wie ich weiss, ist Selinux in dem CentOS eingeschaltet).

nightshifter
09.10.11, 20:18
Vergleiche mal die php.ini unter /etc mit der php.ini in /etc/apacheXX/.
Die eine bezieht sich auf lokale Aufrufe wenn php lokal aufgerufen wird, die innerhalb des Apache Verzeichnisses entsprechend für Apache.

bloodknight
10.10.11, 06:56
Guten Morgen,

SElinux habe ich gar nicht mit installiert, läuft also nicht. Da ich entsprechende Fehlermeldungen bekomme, gehe ich davon aus, dass die libssh2 geladen wurde, phpinfo() bestätigt das ja auch.
Hier die Errors:

Warning: ssh2_connect() [function.ssh2-connect]: Unable to connect to 10.x.y.z on port 22 in /var/www/html/test.php on line 4
Warning: ssh2_connect() [function.ssh2-connect]: Unable to connect to 10.x.y.z in /var/www/html/test.php on line 4
fail: unable to establish connection


Im Verzeichnis /etc/httpd gibt es keine gesonderte php.ini. Die Änderungen (wie jetzt die Änderung der display_errors Variable) werden ja aus der /etc/php.ini übernommen. Scheint also auch nicht der Quell allen Übels zu sein :(

marce
10.10.11, 22:46
darf der Apache-User sich denn überhaupt auf das fremde System verbinden?

Poste doch mal ein wenig Code - vielleucht sieht man dann, woran es hängen könnte... Logfiles wären auch nicht schlecht, der sshd auf der Gegenseite weiß vielleicht was zu seiner Weigerung...

bloodknight
11.10.11, 08:33
Moin moin,

der Apache-User verbindet sich nicht als Apache-User per SSH. Selbst wenn dem so wäre, müsste ich ja entsprechende TCP-Pakete fliegen sehen.

Das Problem begrenzt sich wie ich heute herausgefunden habe leider nicht auf ssh. Ein MySQL Verbindungsaufbau ist ebenfalls nicht möglich. Auch hier wieder das gleiche Bild: Per php in der Konsole aufgerufen funktioniert alles einwandfrei, auf dem Apache aufgerufen kommt keine Verbindung zu Stande.

Ggf. darf der Apache-Benutzer keine TCP-Sessions initiieren? Wie kann ich das prüfen? Apache als root zu starten ist keine Lösung und funktioniert mittlerweile auch gar nicht mehr...

EDIT:

Hier noch die Ausgabe zum MySQL-Problem in der /var/log/httpd/error_log:

[Tue Oct 11 08:33:22 2011] [error] [client 192.168.x.y] PHP Warning: mysqli_connect() [<a href='function.mysqli-connect'>function.mysqli-connect</a>]: (HY000/2003): Can't connect to MySQL server on '172.16.x.y' (13) in /var/www/html/uptime.php on line 28

marce
11.10.11, 08:36
öhm, wie ist denn der Apache bzw. das php installiert worden?

bloodknight
11.10.11, 08:45
Über yum, ebenso PHP-MySQL. phpinfo() und php -m sagen ja auch, dass alles funktionieren soll. Tut es ja auch, aber nur in der bash mittels php. :ugly:

bloodknight
11.10.11, 09:32
So, Asche über mein Haupt, ich habe den Fehler! Leider war auf der Mühle selinux noch aktiv, obwohl ich das standardmäßig schon bei der Installation im Kickstart-File ausschalte!

In diesem Falle hilft ein setsebool -P httpd_can_network_connect_db=1
oder gleich das Ausschalten von selinux in der /etc/selinux/config durch den Eintrag SELINUX=disabled