wpforge
Goto Top

Shell exec Script wird nur per ssh ausgefuehrt

Hallo,
ich habe ein php script, welches ein Shellscript (help.sh) ausführen soll.
Das tut es mittels echo shell_exec('./help.sh');
Auf der Kommandozeile mit php test.php funktioniert das wunderbar (als User ubuntu).

Wenn ich allerdings versuche das Script über den Browser aufzurufen gibt shell_exec() NULL zurück.
lasse ich mir shell_exec('dir') ausgeben, gibt er den Inhalt des richtigen Verzeichnisses aus (auch im Browser).

Der Apache läuft unter 'ubuntu' und das PHP Script auch.

Ich muss gestehen, ich bin etwas ratlos.

Gibt es Vorschläge, was ich noch schauen könnte?

Content-Key: 399270

Url: https://administrator.de/contentid/399270

Printed on: April 20, 2024 at 02:04 o'clock

Member: colinardo
colinardo Jan 24, 2019 updated at 11:28:35 (UTC)
Goto Top
Servus @WPFORGE .
Wenn ich allerdings versuche das Script über den Browser aufzurufen gibt shell_exec() NULL zurück.
Nun das ist so, über den Browser wird erst mal alles auf dem Apache mit dem Service-Account www-data ausgeführt und wenn diesr eben erstens keine Exec-Rechte auf das Skript/Pfad im Dateisystem besitzt und wenn darin auch noch zufällig Super-User Aktionen ausgeführt werden musst du die sudoers passend anpassen damit der Apache Service-Account www-data genügend Rechte erhält:
Bash-Skript von User www-data als root laufen lassen
Linux-Shell via PHP-Datei ausführen
usw.
Also erst mal die Exec Rechte auf das Skript per chmod für www-data anpassen und falls SU benötigt wird, wie oben in der sudoers www-data auf die minimalsten Rechte/Befehle für das Skript einschränken, Pfade zum Skript absolut angeben, Seite anwerfen, Kaffe trinken gehen.

Grüße Uwe
Member: StefanKittel
StefanKittel Jan 24, 2019 at 11:11:43 (UTC)
Goto Top
Hallo,

viele "böse" Befehle sind im WebServer gesperrt.
Da auch mal in die php.ini schauen.

Stefan
Member: erikro
erikro Jan 24, 2019 at 11:27:21 (UTC)
Goto Top
Moin,

was auch immer gerne zu Fehlern führt, sind relative Pfadangaben, da das Skript in einer anderen Umgebung ausgeführt wird als auf der ssh. Also alle Pfadangaben absolut. Dann noch mit der shebang die gewünschte Shell angeben, da der ausführende Systemuser gerne mal eine andere Standardshell hat als der, der sich per ssh verbindet.

hth

Erik
Member: WPFORGE
WPFORGE Jan 24, 2019 at 12:50:33 (UTC)
Goto Top
Der apache läuft unter dem User ubuntu.
echo posix_getpwuid(posix_geteuid())['name']; gitb das auch zurück.
Das ist ja das, was mich so ratlos macht ;)
Member: WPFORGE
WPFORGE Jan 24, 2019 at 12:52:04 (UTC)
Goto Top
Das hab ich auch gedacht.
shell_exec('dir') liefert allerdings auch im Browser das erwartete Ergebnis zurück
Member: colinardo
colinardo Jan 24, 2019 updated at 13:24:50 (UTC)
Goto Top
  • Was steht denn überhaupt im Skript?
  • shell_exec liefert dir keinen Exit Code des Skriptes, wenn es Probleme gibt liefert es dann nur null, benutze mal stattdessen exec() und lass dir den ExitCode ausgeben
  • Schreib in deinem Skript ein Log in ein File dann kannst du die betreffende Zeile lokalisieren bei der es evt. Probleme gibt, wenn es überhaupt ausgeführt wird.
  • Was sagt das Apache Log und das Systemlog?
  • PHP Error Reporting im Skript eingeschaltet?.
Der apache läuft unter dem User ubuntu.
Ist das ein Desktop-System oder ein Server Ubuntu? Das ist nämlich nicht Standard.
Member: WPFORGE
WPFORGE Jan 24, 2019 at 14:40:59 (UTC)
Goto Top
Das ist ein ubuntu server und das habe ich so umgestellt.
Ich hab das Problem gelöst. Warum weiß ich nicht, aber wenn ich aus shell_exec('./help.sh') => shell_exec("./help.sh 2>&1") mache funktioniert das korrekt.

Danke für eure Hilfe ;)
Member: colinardo
colinardo Jan 24, 2019 updated at 14:51:19 (UTC)
Goto Top
Warum weiß ich nicht, aber wenn ich aus shell_exec('./help.sh') => shell_exec("./help.sh 2>&1")
Wenn das so ist, dann findet die Ausgabe deines Skriptes und der deiner Befehle darin nur im StdErr statt in StdOut statt, deswegen face-smile. Konsolen Basics ...