Add-On: Shell-Ersatz für Web-Interface (Rudi-Shell)

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
3
Punkte
36
Ich habe ein Add-On Namens Rudi(mentär)-Shell - kurz: Rudi-Shell oder einfach Rudi - gebaut. Es liefert die gesamte Power einer interaktiven Root-Shell über eine simple Web-Oberfläche. Man kann beliebige Befehle und Skripten eingeben und ausführen, Dateien hoch- und herunterladen. Das alles funktioniert ohne Telnet, FTP, SSH, Samba, USB-Stick usw. und ist daher auch für Boxen mit wenig Speicherplatz geeignet.

Das Download-Archiv hänge ich hier an, Aktualisierungen gibt es bis auf weiteres auch hier, bis Oliver (olistudent) das Ganze in den DS-Mod eingebaut und verfügbar gemacht hat.

Eine umfangreiche Dokumentation gibt es im Wiki, über Navigation zu finden unter Firmware-Mods + HowTos -> danisahne-mod -> Pakete -> CGI-Erweiterungen.

Update: Es gibt ein Unterkapitel Tips & Tricks - Sicherer Zugriff via HTTPS. Darin wird im Detail beschrieben, wie man nicht nur Rudi, sondern die ganze Web-Konfiguration von außen sicher zugreifbar macht. Die komplette sichere Remote-Konfiguration der Box ist damit möglich ohne SSL-Client und durch jede Firewall. Das ist auch für Nicht-Rudi-Benutzer interessant.

Update 2: Das neue Unterkapitel Tips & Tricks - HTTPS-Zugriff reloaded & improved beschreibt eine >90% schlankere HTTPS-Verschlüsselung matrixssl + matrixtunnel anstelle von OpenSSL + stunnel. Die entsprechenden Binaries für Kernel 2.6 befinden sich hier im Anhang.

Update 3: Rudi-Paket vorsichtshalber erneuert (Zeichenkodierung könnte versehentlich UTF-8 gewesen sein, wir brauchen ISO-8859-1 bzw. -15).

Update 4:
  • Es gibt inzwischen einen Kombi-Patch aus Rudi-Shell und Backup/Restore für beide Hauptvarianten des Danisahne-Mod (ds-0.2.9 von danisahne und ds-0.2.9_26-x mit x<14 von olistudent). Er enthält kein Haserl-Binary mehr wie früher, sondern ein kombiniertes Paket mit kleiner Installations-Routine.
  • Auch das hier gepostete Paket enthält inzwischen für beide Kernels Haserl 0.9.16 (vorher nur 0.8.0 für Kernel 2.4, aber es fehlten die alten CGIs mit passender Syntax - komisch, daß sich keiner beschwert hat).
  • Das gesamte Bündel aus Rudi-Shell, Backup/Restore, Haserl, Matrixtunnel ist seit ds-0.2.9_26-14 direkt im 2.6er Danisahne-Mod enthalten, falls sich jemand dafür interessiert, alles gern unter einer Oberfläche hätte und den Mod mit den Binaries selbst bauen möchte.

Diskussionen und Fragen zur Rudi-Shell bitte in diesem Thread, nicht dort, wo ich die Ankündigung sonst noch eintrage.
 

Anhänge

  • matrixtunnel.tar.bz2
    46.5 KB · Aufrufe: 133
  • rudi-shell.tar.bz2
    15.7 KB · Aufrufe: 381
Zuletzt bearbeitet:
Das ließt sich ja richtig gut.
Werds bei Gelegenheit mal einbauen und testen.
Rudi sollte auf jedenfall fest im ds-mod erankert werden!

Danke kriegaex
 
BuchIT schrieb:
Rudi sollte auf jedenfall fest im ds-mod verankert werden!

Kommt wahrscheinlich, Haserl hat Oliver sowieso schon drin. Die restlichen 3 KB passen auch noch rein.
 
Ich hab die Files mal in eine addon-Struktur gepackt und die Kodierung berichtigt.

Fehlt nur noch das setzen der html-links (z.B. in libmodcgi.sh)
 

Anhänge

  • backup_restore.tar.bz2
    1.8 KB · Aufrufe: 39
  • rudi-shell-2.4.tar.bz2
    10.7 KB · Aufrufe: 29
  • rudi-shell-2.6.tar.bz2
    12 KB · Aufrufe: 84
Danke. Kannst du mal Genaueres sagen? Weolche Kodierung war es vorher, welche ist es jetzt? In meinem Ubuntu-VMware-Image ist UTF-8 die Voreinstellung, dann gibt es noch ISO-8859-15 (also quasi ISO-5595-1 mit Euro-Zeichen). Was braucht die Box? ISO-8859-1? Bei mir geht es jedenfalls, aber ich editiere die Dateien auch eher auf der Box und dann mal wieder in Ubuntu, so daß es schon mal vorkommen kann, daß nicht alles zusammen paßt. Weiß jemand, wie ich Ubuntu dazu kriege, die gleiche Kodierung wie die Box zu verwenden bzw. wie ich das vor dem Packen umwandeln kann?

Edit: Beim Vergleich mit Deinen Daten sieht es mir so aus, als sei ISO-8859-15 das, was ich verwenden sollte. Habe ich bisher auch immer, wenn ich aufgepaßt habe. Solange ich kein Euro-Zeichen verwende (das in 8859-1 eben nicht existiert und durch etwas anderes ersetzt würde), müßte alles identisch sein. Ich lade gleich mal sicherheitshalber neu gepackte Versionen hoch. Deine sollte niemand verwenden, denn sie enthalten noch kleine Abweichungen von meinen im HTML-Code, weil sie aus einer älteren Version stammen.
 
Zuletzt bearbeitet:
Bei mir ist auch UTF-8 default.
Aber es war weder UTF-8 noch ISO-8859-1. Genauer hab ich das nicht überprüft.
Nach ISO-8859-1 konvertiert (Datei neu erstellt) läuft's auf der Box.
Welche Kodierung der patch hatte hab ich nichtrausbekommen.
Als ISO-8859-1 interpretiert sieht ein Auszug davon so aus:
Code:
+Sichern s�tlicher Einstellungen aus dem Flash-Speicher <i>/var/flash</i>. Dies
+umfa� sowohl die Einstellungen der Original-Firmware als auch die des
+DS-Mod sowie s�tlicher sonstiger beim Start geladener Erweiterungen (z.B.
+LCR-Updater).<p>

kriegaex schrieb:
Deine sollte niemand verwenden, denn sie enthalten noch kleine Abweichungen von meinen im HTML-Code, weil sie aus einer älteren Version stammen.
??? Ich hab Deine Files doch erst vor ein paar Stündlein runtergeladen...
 
phoenix.tom schrieb:
Bei mir ist auch UTF-8 default.
Aber es war weder UTF-8 noch ISO-8859-1.

Kann eigentlich nicht sein, ich habe doch nur die zwei in Ubuntu. Außer ich habe zwischendurch in Windows editiert und danach das Zeug auf Ubuntu so gepackt. Dein zitierter Text hat allerdings zwei Bytes pro Umlaut, das sieht doch stark nach UTF-irgendwas aus.

phoenix.tom schrieb:
??? Ich hab Deine Files doch erst vor ein paar Stündlein runtergeladen...

Kann sein, daß ich ein paar Kleinigkeiten noch nicht gepostet hatte, obwohl ich mir das einbilde. Im Patch selbst habe ich z.B. noch was geändert. Dort, wo die Menüzeile eingebaut wird, steht unnötigerweise ein cat-Befehl zu viel, die Zeile gehört eigentlich in den vom "Extras"-Menüpunkt, das ist etwas sauberer, auch wenn es im Web-Interface keinen Unterschied macht. Dann sind in den HTML-Dateien noch Kleinigkeiten gewesen (eine Button-Beschriftung war nicht in Anführungszeichen, daher sah man nur das erste Wort).
 
Ja, und irgendwo hast Du aus Versehen einen Rechtschreibfehler eingebaut (Zeichen gelöscht). Es wäre wirklich gut, wenn Du mir Deine Sachen vorher schicken würdest, damit das nicht auseinander läuft. Sonst kursieren hier zu viele Versionen. Außerdem habe ich bewußt deutsch verwendet. Englische Wörter gibt es in der Informatik-Sprache immer noch genug. Übrigens kommen die Browser unter Windows mit der Darstellung gut zurecht, auch Firefox. Nur unter Linux sieht es seltsam im Firefox aus.
 
Daß ein "t" fehlt hatte ich übersehen. Die Sonderzeichen wurden halt incl. des folgenden Zeichens vermurkst.
Mit der Darstellung im Browser hat das ganze überhaupt nichts zu tun. Das war schon im Patch so, wie ich das ja schon gepostet hatte.

Kannste nicht evtl. die Struktur eines addons einhalten?

BTW: Eine Versionierung wäre nicht gerade unpraktisch ;-)
 
Zuletzt bearbeitet:
Was die Versionierung betrifft: ja - vgl. Privat-Nachricht.

Add-On-Struktur: kenne ich gar nicht, mache mir auch nicht die Mühe, weil Oliver es sowieso im Repository hat. Sehe aber schon ein, daß es praktisch wäre. Vielleicht tue ich mir das mal an, mich da einzuarbeiten.
 
Ich hab mal ne dumme Frage: Wie bekomme ich die Dateien auf meine Box? Es kommt immer
wget: rudi_shell.cgi: Read-only file system
.... :confused:
 
Du musst die Dateien in den dsmod packen. Natürlich bevor du ein Image baust. ;-)

MfG Oliver
 
@opd: Oliver hat Recht.

(Ab hier off-topic.) Ein eleganter Ausweg zum Ausprobieren wäre eine FW mit installiertem mini_fo. Aber das scheinst Du nicht zu haben und müßtest in dem Fall ebenfalls eine neue FW bauen. Ich erwähne das trotzdem, denn während der Entwicklung der Rudi-Shell hatte ich anfangs noch kein mini_fo und deshalb umständliche Zyklen aus umgebogenen Dateinamen während der Tests auf der Box, Neubau der FW, flashen, bemerken, daß ich vergessen hatte, einen Dateinamen auf die "richtigen" Pfade umzubiegen usw. Seit ich dieses nette Overlay-Filesystem hatte, konnte ich einfach zur Laufzeit die Dateien an die endgültigen Plätze kopieren und unter realen Bedingungen testen. Einfach Datei editieren und ausprobieren - sehr schön. In dieser Hinsicht wird der zukünftige DS-Mod auf ipkg-Basis vermutlich auch vieles erleichtern.
 
olistudent schrieb:
Du musst die Dateien in den dsmod packen. Natürlich bevor du ein Image baust. ;-)

MfG Oliver

Ich dachte ich komm irgentwie drumm rum. Aber da kann man wohl nichts machen. FriBoLi, ich komme.... :D
 
@kriegaex
Klasse Sache ;)
Ich versuche seit gestern deine Rudi-Shell in das originale WebIF einzubauen!
Eins vorweg: bin kein Linux-Crack! Gebe mein Bestes aber hier und da tun sich noch Lücken auf...

Also ich benutze keinen ds-mod.
- Um das filesystem beschreibbar zu machen, lade ich per Hand den nfs-Client von spblinux.de (cfg_nfsclient) und mounte ein Verzeichnis von meinem lokalen Server. Soweit klappt alles wunderbar.
- haserl eingebaut
- cgi's nach /usr/www/cgi-bin
- softlinks zu den cgi's nach /usr/www/all/cgi-bin
- Softlinks für head und exec nach /bin (busybox). Komisch ist hier, dass die eingebaute busybox den Befehl head mit drin hat aber kein link vorhanden ist...:confused:
- Aufruf direkt über http://fritz.box/cgi-bin/rudi_shell.cgi

Nun läuft deine Shell :D :cool:

Leider habe ich noch ein kleines Problem: Der Datei-Upload will nicht. Auf der Telnet-Konsole kommt immer:
Code:
Mar  4 12:44:30 websrv[635]: warning: cgi sent multiple statuslines for /cgi-bin/rudi_upload.cgi
Mar  4 12:44:30 websrv[635]: /cgi-bin/rudi_upload.cgi(1143): exit 255

Sagt das jemandem etwas? Komme erstmal an dieser Stelle nicht weiter...

CuBe

p.s.
Da ich mich mit haserl nicht auskenne (scheint ja sowas ähnliches zu machen wie webcm):
Wieso sind in der rudi_upload.cgi keine echo-Anweisungen wie in den anderen cgi's ?

EDIT:
Da wc nicht in der eingebauten busybox enthalten ist, habe ich eine neue kompiliert und eingebaut (nur cca 9kb grösser als die originale).
Das Problem besteht jedoch weiter...
 
Zuletzt bearbeitet:
@opd, CuBe_X: Haserl und Rudi-Shell sollten problemlos auch zusätzlich auf Boxen mit DS-Mod installierbar sein, ohne deswegen eine neue FW zu bauen. Meine Pakete sind eben nur nicht dafür gedacht, aber das kann man sich ja leicht basteln. Einfach den Pfad zu Haserl umbiegen vor der Installation (z.B. /var/tmp/haserl), so daß z.B. und einen separaten httpd starten mit Wurzelverzeichnis z.B. /var/tmp/rudi, darin ein cgi-bin-Verzeichnis mit den (ausführbaren!) Skripten anlegen.

Mögliche Startzeile für den httpd:
Code:
httpd -p 83 -h /var/tmp/rudi

Dann eben http://fritz.box:83/cgi-bin/rudi-shell.cgi aufrufen.

Auf Boxen ohne DS-Mod scheitert dieses Vorgehen zunächst daran, daß httpd nicht Bestandteil der Original-Busybox ist. Man müßte also zum Testen eine zusätzliche Busybox auf die Box (oder einen USB-Stick) kopieren oder es so wie CuBe_X versuchen und die Rudi-Shell dem AVM-Webserver unterschieben. Interessante Idee, habe ich nicht versucht, kann daher auch momentan nichts zur Fehlermeldung sagen. Vielleicht komme ich später mal dazu, das zu testen.

CuBe_X schrieb:
Da ich mich mit haserl nicht auskenne

Dem kann abgeholfen werden: http://haserl.sourceforge.net

CuBe_X schrieb:
Wieso sind in der rudi_upload.cgi keine echo-Anweisungen wie in den anderen cgi's ?

Echo-Anweisungen sind nur notwendig innerhalb der durch <? ... ?> abgegrenzten Sektionen, in welchen Shell-Code ausgeführt wird. Ein echo wird eben dann verwendet, wenn dieser Shell-Code auch eine Ausgabe auf der Webseite erzeugen soll. Falls nicht, taucht auch kein echo-Befehl auf, genau wie kein if, tail, ls oder was auch immer auftaucht, wenn man es nicht braucht.

Edit: CuBe_X, wegen wc hätte ich an Deiner Stelle keine Busybox gebaut, sondern entweder den Befehl für die Anzeige der Dateigröße auskommentiert oder z.B. durch eine sed-Verarbeitung von ls -l ersetzt.
 
Zuletzt bearbeitet:
wc -c durch sed ersetzen

Ich habe das mal schnell probiert mit den Rudi-CGIs im AVM-websrv. Geht einwandfrei, auch der Upload. Ich habe allerdings mit meiner modifizierten FW getestet, nicht mit einem AVM-Original. Seiteneffekte außer evtl. nicht vorhandenen Busybox-Kommandos sollten jedoch nicht auftreten, denke ich.

kriegaex schrieb:
CuBe_X, wegen wc hätte ich an Deiner Stelle keine Busybox gebaut, sondern entweder den Befehl für die Anzeige der Dateigröße auskommentiert oder z.B. durch eine sed-Verarbeitung von ls -l ersetzt.

Sag mal, ob es ohne wc bei Dir funktioniert.

Tip: Ersetze in rudi_upload.cgi die Zeile
Code:
echo "Dateigröße: $(cat ""$FORM_target"" | wc -c) Bytes"
mal durch
Code:
echo "Dateigröße: $(ls -l ""$FORM_target"" | sed -r 's/.{34} *([0-9]+).*/\1/') Bytes"
So kommst Du ohne wc oder stat aus, die es in der Original-FW nicht gibt.
 
Zuletzt bearbeitet:
kriegaex schrieb:
.
.
.
Auf Boxen ohne DS-Mod scheitert dieses Vorgehen zunächst daran, daß httpd nicht Bestandteil der Original-Busybox ist. Man müßte also zum Testen eine zusätzliche Busybox auf die Box (oder einen USB-Stick) kopieren oder es so wie CuBe_X versuchen und die Rudi-Shell dem AVM-Webserver unterschieben. Interessante Idee, habe ich nicht versucht, kann daher auch momentan nichts zur Fehlermeldung sagen. Vielleicht komme ich später mal dazu, das zu testen.

So, den o.g. Upload-Fehler bei der Rudi-shell habe ich nun nicht mehr! Scheinbar lag es an dem nfs-gemounte und/oder daran, dass die gemounteten Dateien auf eine andere id gemappt wurden (anonymous statt root)...:noidea:
Habe die zuvor gemounteten Verzeichnisse zu einem Image gebaut, geflasht und nun läufts mit dem AVM-websrv :D


kriegaex schrieb:
Dem kann abgeholfen werden: http://haserl.sourceforge.net

Echo-Anweisungen sind nur notwendig innerhalb der durch <? ... ?> abgegrenzten Sektionen, in welchen Shell-Code ausgeführt wird. Ein echo wird eben dann verwendet, wenn dieser Shell-Code auch eine Ausgabe auf der Webseite erzeugen soll. Falls nicht, taucht auch kein echo-Befehl auf, genau wie kein if, tail, ls oder was auch immer auftaucht, wenn man es nicht braucht.

Danke für die Erklärung.
Die homepage hatte ich mir schon vorher angeschaut. Allerdings nicht intensiv genug gelesen bzw verstanden. Ausserdem hat sich ja an der Syntax etwas geändert (if []; then) oder? Habe ich nach langem Suchen und vergeblichem Probieren dann hier im Forum gefunden die Info (glaube auch von dir :) )

kriegaex schrieb:
Edit: CuBe_X, wegen wc hätte ich an Deiner Stelle keine Busybox gebaut, sondern entweder den Befehl für die Anzeige der Dateigröße auskommentiert oder z.B. durch eine sed-Verarbeitung von ls -l ersetzt.
kriegaex schrieb:
Sag mal, ob es ohne wc bei Dir funktioniert.

Tip: Ersetze in rudi_upload.cgi die Zeile
Code:
echo "Dateigröße: $(cat ""$FORM_target"" | wc -c) Bytes"

mal durch
Code:
echo "Dateigröße: $(ls -l ""$FORM_target"" | sed -r 's/.{34} *([0-9]+).*/\1/') Bytes"

So kommst Du ohne wc oder stat aus, die es in der Original-FW nicht gibt.

Das ist nett von dir, danke. Allerdings hatte ich eh vor, eine eigene busybox zu bauen mit zusätzlichen Befehlen ;)
Nun habe ich auch gleich cut, hexdump, httpd, tail und wc mit drin. Und die Links zu head und strings fehlen nun auch nicht mehr.

Was mich wundert: es existieren unter /sbin folgende Links, die in meiner neuen busybox nicht enthalten sind:

e2fsck
e2label
findfs
fsck
hdparm
mdev
mke2fs
switch_root
tune2fs

Ist das bei der originalen auch so oder habe ich beim Bauen Mist gebaut??

CuBe
 
Zuletzt bearbeitet:
Update 4: Haserl 0.9.16 für Kernel 2.4/2.6, Info zu Aufnahme in DS-Mod

Update 4:
  • Es gibt inzwischen einen Kombi-Patch aus Rudi-Shell und Backup/Restore für beide Hauptvarianten des Danisahne-Mod (ds-0.2.9 von danisahne und ds-0.2.9_26-x mit x<14 von olistudent). Er enthält kein Haserl-Binary mehr wie früher, sondern ein kombiniertes Paket mit kleiner Installations-Routine.
  • Auch das hier gepostete Paket enthält inzwischen für beide Kernels Haserl 0.9.16 (vorher nur 0.8.0 für Kernel 2.4, aber es fehlten die alten CGIs mit passender Syntax - komisch, daß sich keiner beschwert hat).
    Das gesamte Bündel aus Rudi-Shell, Backup/Restore, Haserl, Matrixtunnel ist seit ds-0.2.9_26-14 direkt im 2.6er Danisahne-Mod enthalten, falls sich jemand dafür interessiert, alles gern unter einer Oberfläche hätte und den Mod mit den Binaries selbst bauen möchte.

Siehe erstes Posting im Thread.
 
Hallo,

gibt es eine Möglichkeit, dem Rudi-Shell Skript einen Dateinamen für den Download mitzugeben (als Parameter)?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.