passthru(), system(), shell_exec funktionieren nicht..!?
t0bias
- php
hi,
ich bin am verzweifeln:
ich habe ein perl script geschrieben, welches ich eigentlich nicht
in php umschreiben möchte, da es mehrere cpan-module einbezieht.
nun währe ja naheliegend, das script mit
passthru('/usr/bin/perl /pfad/zum/script.pl samt parameter');
zu "inkludieren", aber sowohl passthru als auch system geben
"127" zurück.
shell_exec liefert die meldung:
Warning: shell_exec() [function.shell-exec]: Cannot execute using backquotes in Safe Mode in ......
das seltsame ist aber, dass ich den safe-mode zum testen mal deaktiviert habe
und trotzdem immer noch dieser fehler auftaucht !!
der pfad, mit dem ich das script aufrufe stimmt auch, in einer shell kann ich den
so 1:1 ausführen.
wer weiss rat?
danke und gruss
tobi
hallo,
nun währe ja naheliegend, das script mit
passthru('/usr/bin/perl /pfad/zum/script.pl samt parameter');
zu "inkludieren"
Ups. Selbst wenn du "wäre" mit ohne "h" geschrieben hättest, wäre das alles andere als naheliegend. "include" kann zwar einiges bewirken, aber es kann eines ganz bestimmt nicht: die Ausführung eines anderen Scripts, das einer anderen Programmiersprache und -technik angehört, zu ermöglichen.
wer weiss rat?
Verwende für ein Script immer die Technologie, für die es vorgesehen ist. Ein Perl-Script läßt sich nun einmal nicht von PHP parsen. Ansosnt wäre möglicherweise erst die genauere Kenntnis deiner Scripts und die Fehlersuche darin erfolgversprechend.
Tatsächlich sind die von dir angeführten PHP-Funktionen in der Lage, bestimmte "systemnahe" Programme, wie eben externe Programme, ausführen zu lassen. Dein PHP-Script muß lediglich deren Ergebnisse wieder entgegennehmen können. Und der Hinweis "Cannot execute using backquotes in Safe Mode" deutet darauf hin, daß du noch irgendein Problem mit der korrekten Verwendung einiger Zeichen hast. Schau mal im PHP-Handbuch nach.
Grüße aus Berlin
Christoph S.
Hellihello
Und der Hinweis "Cannot execute using backquotes in Safe Mode" deutet darauf hin, daß du noch irgendein Problem mit der korrekten Verwendung einiger Zeichen hast.
Das habe ich nicht kapiert. Welcher Zeichen denn? Safe_Mode On schließt doch wohl shell_exec() aus, wenn ich das nun recht gelesen habe. Und wenn man nun zB. imagemagick ausführen möchte (falls installiert), dann würde man entweder ein bestimmtes Verzeichnis definieren, in dem dann dann doch ausgeführt werden darf, oder aber bestimmte Funktionen freigeben, oder aber sogar (vermutlich unschön) einen HTTP-Request auf ein Shellskript absetzten, dass im cgi-bin liegt?
Grüße auch aus Berlin und gut Nacht für heut,
frankx
hallo,
Und der Hinweis "Cannot execute using backquotes in Safe Mode" deutet darauf hin, daß du noch irgendein Problem mit der korrekten Verwendung einiger Zeichen hast.
Das habe ich nicht kapiert. Welcher Zeichen denn?
Nun, ich habe dir den korrekten Link zur entsprechenden Handbuchseite angegeben - daher verzichte ich auf eine Wiederholung dieser Verlinkung. Dort steht ausdrücklich: "Die sog. Backticks (``). Achtung: Die Backticks sind keine einfachen Anführungszeichen!" - Und darauf bezog sich meine Anmerkung, daß vermutlich in deinem Script irgendein Zeichen nicht korrekt sein könnte. Prüfe dein Script daraufhin.
Vorschlag: nimm doch erstmal ein sehr kleines Testscript, das lediglich ein "hallo Welt" ausgeben soll. Also ein PHP-Script, das mit exec() oder einer der anderen angegebenen Funktionen ein Perl-Script aufruft, das dann eben nur "hallo Welt" ausgibt. Wenn das funktioniert, baust du diese Konstruktion Schritt für Schritt so weit aus, bis du deine originalen Scripts erreicht hast. Treten dann bei irgendeinem Zwischenschritt Probleme auf, weißt du wesentlich genauer, wo es nun eigentlich klemmt.
Safe_Mode On schließt doch wohl shell_exec() aus, wenn ich das nun recht gelesen habe.
Laut Handbuch ist das so, ja.
Und wenn man nun zB. imagemagick ausführen möchte (falls installiert), dann würde man entweder ein bestimmtes Verzeichnis definieren, in dem dann dann doch ausgeführt werden darf, oder aber bestimmte Funktionen freigeben, oder aber sogar (vermutlich unschön) einen HTTP-Request auf ein Shellskript absetzten, dass im cgi-bin liegt?
Das kapiere ich jetzt nicht ganz. Abgesehen davon, daß Shellscripts im cgi-bin eigentlich nichts zu suchen haben.
Grüße aus Berlin
Christoph S.
echo $begrüßung;
Und wenn man nun zB. imagemagick ausführen möchte (falls installiert), dann würde man entweder ein bestimmtes Verzeichnis definieren, in dem dann dann doch ausgeführt werden darf, oder aber bestimmte Funktionen freigeben, oder aber sogar (vermutlich unschön) einen HTTP-Request auf ein Shellskript absetzten, dass im cgi-bin liegt?
Das kapiere ich jetzt nicht ganz.
Wenn der Webserver Ressourcen zur Verfügung stellt, für die im cgi-bin liegende Programme ausgeführt werden, ...
Abgesehen davon, daß Shellscripts im cgi-bin eigentlich nichts zu suchen haben.
Was für Gründe sprechen gegen Shellscripts? Oder anders gefragt: Was darf deiner Meinung nach im cgi-bin liegen und was nicht?
echo "$verabschiedung $name";
Hellihello Christoph,
Nun, ich habe dir den korrekten Link zur entsprechenden Handbuchseite angegeben - daher verzichte ich auf eine Wiederholung dieser Verlinkung. Dort steht ausdrücklich: "Die sog. Backticks (``). Achtung: Die Backticks sind keine einfachen Anführungszeichen!"
Das hätte ich vielleicht schreiben sollen, dass mir das schon untergekommen war. Beim Befehl shell_exec() aber brauchts die Backticks ja nicht. Die ersetzen diesen doch.
Safe_Mode On schließt doch wohl shell_exec() aus, wenn ich das nun recht gelesen habe.
Laut Handbuch ist das so, ja.
Also kanns ja garnicht gehen, wenn der on ist. Ist es denn schlau, den Safe-Mode wirklich auszuschalten?
Dank und Gruß,
frankx (nur Mitleser, nicht Opening-Poster)
echo $begrüßung;
Ist es denn schlau, den Safe-Mode wirklich auszuschalten?
Der Safe-Mode wird ab PHP 6 sowieso nicht mehr vorhanden sein. Ansonsten ist er ein Versuch, Shared-Hosting-Probleme auf PHP-Ebene zu lösen.
Schlau ist es, sich über den Safe-Mode zu informieren, wie er arbeitet, welche Probleme er nicht lösen kann, und dann zu entscheiden, ob der Safe-Mode ein nützliches Mittel ist oder nicht. Das PHP-Handbuch klärt nicht wirklich über alle Aspekte des Safe-Modes auf. Du solltest deine Recherche auch darüber hinaus ausdehnen. Vielleicht verweisen schon die Userkommentare auf ergiebige Quellen (ich hab das aber nicht untersucht).
Wenn du in der Lage bist, den Safe-Mode selbst zu steuern, bedeutet das, dass du (mindestens) administrative Rechte an deinen Apache-PHP-Gespann hast. Wenn du nicht gerade ein Provider bist, und/oder mehrere Benutzer auf eine als Apache-Modul laufende PHP-Instanz zugreifen lassen willst, bringt er dir keine Vorteile. open_basedir, disable_functions und disable_classes lässt sich auch ohne Safe-Mode einstellen.
echo "$verabschiedung $name";
Hellihello dedlfix,
Schlau ist es, sich über den Safe-Mode zu informieren, wie er arbeitet, welche Probleme er nicht lösen kann, und dann zu entscheiden, ob der Safe-Mode ein nützliches Mittel ist oder nicht.
Ich hatte jetzt erstmal soviel verstanden, dass es sicherer ist, weil ich damit ja komplett verhindere, auf die shell zuzugreifen. Nach dem Motto, wer von der Sicherheitsarchitektur keine Ahnung hat, macht erstmal alle Türen zu?
Wenn du in der Lage bist, den Safe-Mode selbst zu steuern, bedeutet das, dass du (mindestens) administrative Rechte an deinen Apache-PHP-Gespann hast. Wenn du nicht gerade ein Provider bist, und/oder mehrere Benutzer auf eine als Apache-Modul laufende PHP-Instanz zugreifen lassen willst, bringt er dir keine Vorteile. open_basedir, disable_functions und disable_classes lässt sich auch ohne Safe-Mode einstellen.
Ja, es ist ein virtueller Server. Ich hatte von PHP4 auf PHP5 geupgradet und alle Einstellungen versucht zu übernehmen. Im wesentlichen laufen darauf Domains und Subdomains einer Schule, einzelne Bereiche/AGs haben eigene FTP-Zugänge für ihre Subdomains.
Was mich jetzt eben interessiert wäre eventuell die Verwendung von imagemagick. Ich möchte nicht generell shell_exec zulassen, auch nicht spezielle Funktionen ausklammern (da müsst ich ja wissen, welche das sein sollen), auch ein spezielles Verzeichnis bringt ja nischt, da die FTP-User ja als Heimatverzeichnis nicht aus dem Bereich ihrer Subdomain (Vhost) rauskommen und wohl auch nicht sollen.
Dank und Gruß,
frankx
Moin!
nun währe ja naheliegend, das script mit
passthru('/usr/bin/perl /pfad/zum/script.pl samt parameter');
zu "inkludieren"Ups. Selbst wenn du "wäre" mit ohne "h" geschrieben hättest, wäre das alles andere als naheliegend. "include" kann zwar einiges bewirken
Von include ist hier aber nicht im geringsten die Rede, der im Posting genannte PHP-Befehl lautet passthru().
- Sven Rautenberg