Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Apache, Lighttpd, nginx, Cherokee
Anonymous

Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Anonymous »

Hallo, ich knacke hier an einem Problem, mit dem ich nicht weiter komme. Ich möchte von PHP aus ein Shellscript (welches aus der Shell direkt aufgerufen schon funktioniert und auch für die Rechte des Benutzer www-data frei gegeben ist) aufrufen. Das script wird auch aufgerufen und einfache Befehle wie echo abgearbeitet, aber es werden nicht alle Befehle ordentlich abgearbeitet. Ich glaube folgendes herausgefunden zu haben.

Die Ausgabe von set als User www-data gibt mir das folgende:

Code: Select all

www-data@XXX:~/snapshot$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLUMNS=80
DIRSTACK=()
EUID=33
GROUPS=()
HISTFILE=/var/www/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/var/www
HOSTNAME=XXX
HOSTTYPE=i386
HZ=100
IFS=$' tn'
LINES=51
LOGNAME=www-data
MACHTYPE=i386-pc-linux-gnu
MAIL=/var/mail/www-data
MAILCHECK=60
OLDPWD=/var/www
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
PIPESTATUS=([0]="0")
PPID=6621
PS1='u@h:w$ '
PS2='> '
PS4='+ '
PWD=/var/www/snapshot
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
TERM=xterm
UID=33
USER=www-data
_=setshell
www-data@XXX:~/snapshot$ 


Die Ausgabe von set aufgerufen von PHP und umgeleitet in eine Datei sieht allerdings anders aus:

Code: Select all

www-data@XXX:~/snapshot$ cat setphp
BASH=/bin/sh
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
DIRSTACK=()
EUID=33
GROUPS=()
HOSTNAME=XXX
HOSTTYPE=i386
IFS='
'
LANG=C
MACHTYPE=i386-pc-linux-gnu
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/usr/bin:/bin
POSIXLY_CORRECT=y
PPID=6616
PS4='+ '
PWD=/var/www/snapshot
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=2
TERM=dumb
UID=33
_=sh
www-data@XXX:~/snapshot$ 


Das PHPscript dazu

Code: Select all

<?php
system('set > setphp');
?>
Die Umgebungsvariable BASH lautet für den User www-data /bin/bash, von PHP aus aufgerufen allerdings nur /bin/sh. Wie kann ich die Umgebungsvariablen so setzen, dass sie von PHP aus gleich sind wie für den User www-data in der Shell?

Weiß hier irgendjemand Rat? Bin echt am verzweifeln und irgendwie reichen meine paar Linuxkenntnisse hier nicht mehr. System ist Debian Sarge.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Roger Wilco »

ebule.com wrote:Das script wird auch aufgerufen und einfache Befehle wie echo abgearbeitet, aber es werden nicht alle Befehle ordentlich abgearbeitet.
Tolle, vollständige und nützliche Fehlerbeschreibung...

ebule.com wrote:Die Ausgabe von set aufgerufen von PHP und umgeleitet in eine Datei sieht allerdings anders aus
Ja, zwangsläufig.
ebule.com wrote:Das PHPscript dazu

Code: Select all

<?php
system('set > setphp');
?>
"<?php print_r($_ENV); ?>" dürfte kürzer sein und die richtigen Werte ausgeben. ;)
ebule.com wrote:Die Umgebungsvariable BASH lautet für den User www-data /bin/bash, von PHP aus aufgerufen allerdings nur /bin/sh. Wie kann ich die Umgebungsvariablen so setzen, dass sie von PHP aus gleich sind wie für den User www-data in der Shell?
/bin/sh ist i. d. R. ein symbolischer Link auf /bin/bash.
ebule.com wrote:Weiß hier irgendjemand Rat?
Nicht ohne das Skript zu kennen.
mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by mattiass »

Roger Wilco wrote:
/bin/sh ist i. d. R. ein symbolischer Link auf /bin/bash.
Die Bash hat in /bin nix zu suchen. Da gehört höchstens die Bourne Shell hin. Auf drei von vier Systemen, die ich betreue, ist /bin/sh ein echtes, statisch gelinktes Binary.

Leute, wenn Ihr Shellscripte schreibt, welche die Bash voraussetzen, dann schreibt nicht '#!/bin/sh' an den Anfang der Datei!
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Roger Wilco »

Warum wusste ich nur, dass so ein Kommentar kommt, als ich den Beitrag geschrieben habe? ;)

Fakt ist einfach, dass /bin/sh auf den meisten GNU/Linux-Distributionen ein Symlink auf die Bash unter /bin/bash ist. Ich weiß, dass das bspw. bei FreeBSD nicht so ist...
mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by mattiass »

Roger Wilco wrote:
Fakt ist einfach, dass /bin/sh auf den meisten GNU/Linux-Distributionen ein Symlink auf die Bash unter /bin/bash ist. Ich weiß, dass das bspw. bei FreeBSD nicht so ist...
Und bei Solaris nicht und bei SCO nicht und bei IRIX nicht und bei HP/UX nicht und bei AIX nicht und bei OS X nicht (oder seit 10.3 etwa doch?).

Ich wollte nur darauf hinweisen, dass man nicht davon ausgehen darf, dass in /bin/sh eine Bash liegt. Bei meinem Mini-Linux liegt da auch ein Softlink auf die Busybox. Deren Shell ("ash") ist Bourne-kompatibel aber nicht Bash-kompatibel. Mit Konstrukten wie:

Code: Select all

echo $((1024**3))
kommt Ihr da nicht weit. 8O
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Roger Wilco »

MattiasS wrote:Und bei Solaris nicht und bei SCO nicht und bei IRIX nicht und bei HP/UX nicht und bei AIX nicht und bei OS X nicht (oder seit 10.3 etwa doch?).
http://www.rootforum.org/terms.html wrote:Das RootForum ist ein privates Forum für Administratoren dedizierter Linux-Server
Ich denke, ich kann durchaus davon ausgehen, dass eine (mehr oder weniger verbreitete) Linux-Distribution eingesetzt wird, wenn der OP nichts Gegenteiliges behauptet.
mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by mattiass »

Roger Wilco wrote:
MattiasS wrote:Und bei Solaris nicht und bei SCO nicht und bei IRIX nicht und bei HP/UX nicht und bei AIX nicht und bei OS X nicht (oder seit 10.3 etwa doch?).
http://www.rootforum.org/terms.html wrote:Das RootForum ist ein privates Forum für Administratoren dedizierter Linux-Server
Oops. Dann trolle ich mich mal schnell wieder... :-"

Warum issn hier das Emoticon :whistle: kapott?
lufthansen
Posts: 390
Joined: 2002-09-24 17:31
Location: NRW

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by lufthansen »

das problem wird doch einfach den den mangelnden pfad angaben liegen.
Gib mal absolute befehle an.
flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by flo »

If bash is invoked with the name sh, it tries to mimic the startup
behavior of historical versions of sh as closely as possible, while
conforming to the POSIX standard as well.
Und nun ja, es ist Haarspalterei, und in der Regel ist zwar /bin/sh "Bash", aber wenn ich bash will, sollte ich das auch sagen können - es gibt durchaus auch Systeme, deren Admins sich csh oder ksh verlinken.

Ich hoffe, daß der OP jetzt mal wieder was zum Fortgang der Dinge kundtut.

flo.
Anonymous

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Anonymous »

Das Shellscript ist eigentlich ein ganz einfaches. Es soll Firefox in einem VNC Fenster Öffnen, eine Website machen, mit import einen Screenshot erzeugen und Firefox wieder schließen.

#!/bin/bash
MY_SCREEN_NO=$1
MY_SECONDS=$2
MY_LOCATION=$3
MY_PIC=$4
export DISPLAY=":$1"
/usr/bin/firefox --display :$1 "$MY_LOCATION" > /dev/null 2> /dev/null &
#/usr/bin/firefox --display :$MY_SCREEN_NO "$MY_LOCATION" 2>&1 > /dev/null
/bin/sleep $MY_SECONDS
/usr/bin/import -window root -display :$1 "$MY_PIC"
killall firefox-bin
Ich habe zum testen einfach mal Zeilennummern per Echo zwischen jede zeile gepackt. Diese Zeilennummern werden mir sogar eingezeigt, wenn ich das Script aus PHP heraus öffne.
<?php
system('./shooter.sh');
?>
/bin/sh ist bei mir auch nach /bin/bash gelinkt (Linux Debian). Ein Kollege, der mir leider auch nicht weiterhelfen konnte, sagte mir, dass es nichts zu bedeuten habe, wenn die richtige Shell längst verlinkt sei, da sie, wenn sie explizit dem user als sh verkauft würde, dann auch nur mit den Eigenschaften von sh und nicht mehr bash starten würde. Die gesetzten Umgebungsvariablen des Rootusers und des PHP Scriptes habe ich ja oben schon gepostet.
Um auszuschließen, dass in dem Script irgendwelche Fehler stecken habe ich es arg vereinfacht.
#!/bin/bash
echo 1
# firefox --display=:1 "bla"
#/usr/bin/mozilla-firefox ...
#mozilla-firefox ...
/usr/bin/firefox --display=:1 "http://www.kindergarten.de"
echo 2
All diese Varianten funzen in der Shell (aufruf durch www-data) jedoch nicht aus dem PHPScript.

Die Diskussion, wo bash liegt und ob alles richtig verlinkt ist, ist daher überflüssig. Einzig die richtigen Umgebungsvariablen müssen gesetzt werden, wenn PHP ausgeführt wird, aber wo und wie mache ich das?
flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by flo »

Code: Select all

#!/bin/bash -i
IMHO ist das Problem, daß Du keine Login-Umgebung hast - probiere das mal aus.

flo.
Anonymous

Re: Shellscritp aus PHP / Problem mit Umgebungsvariable BASH

Post by Anonymous »

#!/bin/bash -i
funzt leider auch nicht. Was bedeutet die Sache, dass ich keine Loginumgebung habe und wie kann ich dieses Problem beheben?