PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : thttpd-Server, cgi-ShellSkript wird angezeigt, jedoch nicht ausgeführt?



cano
06.11.14, 13:57
Hallo,
ich verwenden einen thttpd Server auf einem RT-Linux.
Der Server arbeitet und zeigt mir wunderschöne HTML-Seiten auf meinem Explorer an.
Wenn ich jedoch cgi-Shell-Skripte starte, dann werden mir diese rein textlich angezeigt.
Die darin enthaltenen Kommandos an die Shell werden nicht ausgeführ, nur angezeigt?


Das ist mein Beispielprogramm root@aaaa# cat myenv.cgi
Ich möchte über myenv.cgi Umgebungsvariablen anzeigen.


#!/bin/sh
# myenv.cgi
# Umgebungsvariablen anzeigen
echo "Content-type: text/html"
echo
echo "<html><body><h2>Umgebungsvariablen von"\
" `uname -n` (`date`)</h2>"
echo "<pre>"
env
echo env
echo "env"
echo "</pre></body></html>"





Der Aufruf: http://172.29.103.1:4546/cgi-bin/myenv.cgi
Erzeugt folgende Ausgabe:





#!/bin/sh ls -l # myenv.cgi # Umgebungsvariablen anzeigen echo "Content-type: text/html" echo echo "
Umgebungsvariablen von"\ " `uname -n` (`date`)
" echo "
"
env
echo env
echo "env"
echo "
"


Die Shell ignoriert irgendwie den Inhalt (env-Kommando) meiner Datei?



So ist mein thttpd Konfiguriert:
THTTPD_ARGS="-nor -nos -p 4546 -u root -d /data/web -c **.cgi"



Weiss hier jemand weiter?

nopes
06.11.14, 14:51
Ist der Skript an sich ausführbar?

marce
06.11.14, 14:53
und um ggf. mal die Browser-Cache-Problematik zu umgehen mal auf der Konsole mit curl oder wget testen.

cano
06.11.14, 15:38
Hallo,

danke für die schnelle Antwort :-)

Auf dem Server ist das script ausführbar:
==========================
root@st02# ./myenv.cgi
Content-type: text/html

<html><body><h2>Umgebungsvariablen von aaaa (Tue Jan 9 07:48:25 UTC 2001)</h2>
<pre>
TERM=screen
SHELL=/bin/sh
USER=root
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
PWD=/data/web
HOME=/root
SHLVL=2
LOGNAME=root
_=/usr/bin/env
env
env
</pre></body></html>


Nur Über http geht es nicht:

user@ubuntu-vmware:/mnt/hgfs/LS3/aaaa$ curl http://172.29.103.1:4546/myenv.cgi
#!/bin/sh
# myenv.cgi
# Umgebungsvariablen anzeigen
echo "Content-type: text/html"
echo
echo "<html><body><h2>Umgebungsvariablen von"\
" `uname -n` (`date`)</h2>"
echo "<pre>"
# Wenn env nicht vorhanden, dann printenv ausf�hren ...
env
echo env
echo "env"
echo "</pre></body></html>"

nopes
06.11.14, 16:25
Für alle Nutzer ausführbar? Für alle lesebar?

cano
06.11.14, 16:27
Wie kann ich das ermitteln?

cano
06.11.14, 16:30
root@aaaa# ls -l /usr/sbin/thttpd
-rwxr-xr-x 1 root root 99116 Sep 19 2013 /usr/sbin/thttpd
root@aaaa# ps ax | grep thttpd
970 ? Ss 0:00 /usr/sbin/thttpd -nor -nos -p 4546 -u root -d /data/web -c **.cgi

nopes
06.11.14, 16:40
Genau so, nur das ich den Skript meine, wobei der Server ja ohne also root rennt, von daher dürfte das passen und damit bin ich dann auch erstmal mit meinen Ideen am Ende

[EDIT]
You can use * to match any string not including a slash, or ** to match any string including slashesAlso würde ich mal -c *.cgi versuchen, denn bei dir ist ja kein slash drin.

marce
06.11.14, 19:08
naja, die allg. verfügbare Doku, alle sonstigen Beispiele und die Bedeutung des Wortes "any" (So wie in "any key", you know...) legen nahe, daß das eigentlich kein Unterschied machen sollte...

cano
07.11.14, 08:11
Hallo Leute,

meine Anfrage ist gelöst. Vielen Dank für Eure Unterstützung :-)

An der Initialisierungszeile lag es nicht
THTTPD_ARGS="-nor -nos -p 4546 -u root -d /data/web -c **.cgi"
THTTPD_ARGS="-nor -nos -p 4546 -u root -d /data/web -c *.cgi"
Geht beides!

Der Microsoft Explorer hat mir eine Falle gestellt!
Die Rechte meines Skriptes stehen nach jedem Steuerungshochlauf auf:
-rw-r--r-- 1 root root 307 Jan 9 02:56 myenv.cgi
Warum das so ist, muss ich noch herausfinden.

Ändere ich die Zugriffsrechte auf …
-rwxr-xr-x 1 root root 307 Jan 9 02:56 myenv.cgi
So reagierte der Server bei Aufruf des Skriptes über den Explorer mit fogender Meldung:

403 Forbidden: The requested URL '/cgi-bin/myenvx.cgi' resolves to a file which is marked executable but is not a CGI file; retrieving it is forbidden.

Ratlos herumstochernd startete ich von meinem Ubuntu-Rechner noch einmal das Kommando, das ich erst gestern von marce kennengelernt habe.
curl http://172.29.103.1:4546/myenv.cgi
Und siehe da, plötzlich arbeitet mein Skript korrekt.

Dann hab ich den Microsoft-Explorer geschlossen und neu geöffnet und jetzt funktioniert es auch hier.
@marce: Du hast mich zwar weiter oben auf die Browser-Cache-Problematik hingewiesen. Aber durch die Servermeldung 403 Forbidden bin ich gedanklich in eine ganz falsche Richtung gelenkt worden.
Vielen Dank noch einmal an alle Beteiligten :-)