# Shellkommando durch Button auslösen



## Jimini (23. Mai 2011)

*Shellkommando durch Button auslösen*

Aloha,
ich suche einen Weg, in eine vom Webserver ausgelieferte PHP- oder HTML-Datei eine Möglichkeit einzubetten, ein Shellkommando auszuführen, konkret soll der vom Apache-Autoindex aktuell angezeigte Ordnerinhalt mit tar gepackt werden. Ich stelle mir das so vor:
Apache zeigt den Inhalt eines Ordners an, darüber habe ich mittels HeaderName eine PHP- oder HTML-Datei eingebettet. Diese enthält einen Link, der beim Anklicken den aktuellen Ordnerinhalt packt und das Archiv dann vom Webserver öffnen lässt (dass also ein Download-"Popup" aufgeht). Ideal wäre es, wenn das Archiv in einem anderen Ordner erstellt wird, da der Webserver kein Schreibrecht in den ausgelieferten Ordnern haben soll. Das sollte aber wohl das kleinere Problem sein.

Any ideas? Für Hinweise und Lösungsvorschläge wäre ich sehr dankbar.

MfG Jimini


----------



## Falk (23. Mai 2011)

*AW: Link zum Shellkommando*

Spontan denke ich bei sowas an Exec: PHP: exec - Manual


----------



## Jimini (23. Mai 2011)

*AW: Link zum Shellkommando*

Werde ich mir mal zu Gemüte führen. Merci!

MfG Jimini


----------



## Jimini (23. Mai 2011)

*AW: Link zum Shellkommando*

Mein Problem ist jetzt, dass ich nicht weiß, wie ich die Adresse, die vom Browser aufgerufen wurde, an das Script weiterreichen kann. Momentan wird per HeaderName eine shtml-Datei eingebunden, in welcher ich beispielsweise mit CGI- oder PHP-Kommandos Shellbefehle ausführen kann. Allerdings beziehen sich diese Befehle (ich habe mal mit "ls" und "pwd" gespielt) nicht auf das Verzeichnis, welches ich aufgerufen habe, sondern auf das, in welchem das CGI-Script liegt. Und mit SSI bin ich diesbezüglich leider bislang auch noch nicht wirklich weiter gekommen, da DOCUMENT_URI auch nur den Speicherort des Skripts auswertet.

MfG Jimini


----------



## Jimini (24. Mai 2011)

*AW: Shellkommando durch Button auslösen*

Und wieder bin ich ein Stück weiter:

```
<html>
  <body>
  <input type="button" value="test" onclick="location.href='../'" onclick="<!--#exec cmd="echo 1 >> /tmp/test" -->">
  </body>
</html>
```
Beim Betätigen soll der Browser als eine Ebene höher springen und zudem "1" in die Datei /tmp/test schreiben. Allerdings wird bei jedem Neuladen eine 1 in die Datei geschrieben. Woran kann das liegen?

MfG Jimini


----------



## Jimini (25. Mai 2011)

*AW: Shellkommando durch Button auslösen*

Es ist vollbracht!

```
#!/usr/bin/perl
use utf8;
use warnings;
use strict;
use Encode qw(encode decode);
use open ':encoding(utf8)';
use URI::Escape;
binmode(STDOUT, ":utf8");
my ($archname, $path, $url, $url_raw, $url_unescaped, $rar);
print "Content-type:text/html\n\n";

# erstmal die anfragende URL holen und dekodieren
$url_raw = "$ENV{'HTTP_REFERER'}";
$url_unescaped = uri_unescape($url_raw);
$url = `echo $url_unescaped | cut -d '/' -f 4-`;

# danach aus der URL den Pfad auf dem Dateisystem auslesen
$path = `echo /home/www/$url`;
$path =~ s/\ /\\ /g;

# danach aus dem Pfad einen Namen für das zu erstellende Archiv erstellen (und ja, ich wusste nicht, wie man anders die letzten Zeichen entfernen könnte)
$archname = `echo $url_unescaped | cut -d '/' -f 7-`;
$archname =~ s/\//\_-_/g;
$archname =~ s/ /_/g;
$archname =~ chop($archname);
$archname =~ chop($archname);
$archname =~ chop($archname);
$archname =~ chop($archname);

# Packen des Archivs ankündigen und durchführen
print "Das Verzeichnis ''$path'' wird in ''$archname.rar'' gepackt, bitte warte einen Moment.\n\n";
$rar = ( "rar a -m0 $archname.rar $path" );
system($rar);
print "<body>Das Archiv kann jetzt <a href=\"www.link-zum-archiv.de\">hier</a> heruntergeladen werden\n";
```
Ja, der Brei aus Perl und Bash ist hässlich, aber funktioniert. Und dafür, dass ich bisher mit Perl, CGI und Konsorten noch nichts am Hut hatte, bin ich auch ein bisschen stolz 

MfG Jimini


----------

