exec() und mail.sh

Frank Burian

New Member
Hallo,

ich möchte per PHP5-Script via der Funktion exec() ein Postfach einrichten.

PHP:
    exec('/usr/local/psa/bin/mail.sh -c test@meinedomain.de -passwd test',$a,$b);
    print_r($a); echo '<br />'.$b;

mail.sh liefert aber ein Return mit der Zahl 254 an die Variable $b!
Woran kann das liegen, und wo finde ich eine Übersicht über die Error-Codes von mail.sh?

Das komische in der Konsole läuft der Befehl ohne Probleme, nur über exec() leider nicht.

Hat jemand ein Idee?
 
Da seh ich nur:

#!/usr/local/psa/admin/bin/php
<?php
die("The file mail.php is part of Plesk distribution. It cannot be run outside of Plesk environment.\n");
__plesk_loader_pragma__('B');
?>
AÊXd¥Ab«Éäxb9jEW7^t¨B™Ûy+Ä~Ks$S0þ4 õI™Ž€¢Œ*ìŠbàh™"jÌD×BI³€áháÒ”Ç7Mô†[ïpu‚b8B¥Öhx4

Was soll ich da ändern?

Habs mal mit sudo probiert, zwecks den Rechten, dann bekomm ich aber 1 zurück, was dann der Fehlercode von sudo sein wird!

exec('/usr/bin/sudo /usr/local/psa/bin/mail.sh -c test@chemnitzer.de',$a,$b);

Was kann noch der Fehler sein?
 
Ich hatte überlesen dass es auf der Shell direkt lauft, das die() im Code stoert mich ein wenig :)

Ich erinnere mich genau daran dass meine ersten Versuche ein GameServer-System zu basteln die gleiche Fehlermeldung bei Direktaufruf brachte, der Fehler war da dass das Script eine Ausgabe auf einen tty machen wollte, was beim Apache-User nicht geht (nobody oder www-data haben kein tty zugeordnet)

Falls es daran liegen sollte: ich empfehle dir KEIN tty zuzuordnen, das kann einem Angreifer der shell-code injecten kann die Pforten noch groesser öffnen als sie momentan mit shell_exec schon geöffnet sind...

Eine gute Loesung koennte ich dir allerdings vorschlagen:
bei meinen aktuellen Entwicklungen benutze ich ein "PHP2SSH"-System auf Basis von PHP5 mit libssh2 ein, um ueber die IP 127.0.0.1 mit localhost zu kommunizieren, sprich eine vollwertige SSH-Verbindung zum Server aufzubauen.
Dazu musst du allerdings "Plaintext"-Authentifizunerg im SSHd erlauben und ein Apache-Modul basteln.
Bei Interesse an dieser Methode poste ich gern einen umfangreichen Loesungsweg, da es ein paar trickreichen Stellen gibt. Welches OS nutzt du?
 
  • Installier OpenSSL per Yast
  • Installier Libssh2 (im Downloadpaket drin) (./configure && make && make install)
  • Installier phpize mittels Yast
  • Kompilier (./configure && make && make install) die ssh2-0.10
  • Kopier die kompilierte ssh2.so in deinen PHP-Extension Ordner
  • Restarte Apache
Download

Die SSH2 0.10 ist bereits fertig gepatcht und sollte ohne Probleme funktionnieren.
Wenn configure ueber fehlende Kompiler usw meckert, diese ggf nachinstallieren.
Leider kann ich dir keine Liste mit Befehlen geben, da ich lokal und auf den Servern nur Debian4.0 einsetze und keinerlei Ahnung von Suse & Yast habe.
 
Back
Top