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?
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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 399270
Url: https://administrator.de/forum/shell-exec-script-wird-nur-per-ssh-ausgefuehrt-399270.html
Ausgedruckt am: 22.12.2024 um 16:12 Uhr
8 Kommentare
Neuester Kommentar
Servus @WPFORGE .
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
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
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
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
- 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.