- Mitglied seit
- 22. Mrz 2010
- Beiträge
- 423
- Punkte für Reaktionen
- 1
- Punkte
- 0
Tach,
Ich war's langsam leid, dass ich von meiner Firma aus keine SSH- oder Telnet-Verbindung zu meinem NAS aufbauen konnte ob der geballten Firewall- und Proxy-Power... ;-) Aber es gibt ja Mittel und Wege, wie man trotzdem die auf seiner NAS installierten Terminal-Skripte nutzen kann: Web-Shell heißt das Zauberwort!
Es gibt einige Web-Shells im Cyberspace - ich entschied mich für Shell in a Box (SiaB).
Vorweg: Alles, was ihr mit eurer DS anstellt und evtl. dabei "zu Bruch" geht, geht auf eure Kappe! Also: Backup, Backup, Backup!
Vorbeitungen:
Ladet euch das aktuelle Skript (als Source Code) von der Website herunter und auf das NAS rauf, beispielsweise nach /volume1/public/
Noob-kompatibles Entpacken:
Im Dateibrowser auf die gepackte Datei rechtsklicken und entpacken.
Sofern noch nicht geschehen, muss das Itsy Package Management System (iPKG) installiert werden. Wie das geht, steht hier. Danach via SSH (Telnet geht auch, ist aber eine unverschlüsselte Verbindung) auf der DS als root (nicht admin oder irgendein anderer User) einloggen. Die Synology-Boxen setzen auf ein Busybox-Linux. Daher müssen wir dem System erstmal auf die Sprünge helfen, indem wir ihm einige Tools verpassen, die uns das Leben erleichtern. Los geht's:
Als nächstes verschieben wir das entpackte SiaB-Verzeichnis und springen in eben jenes:
Nun folgen die drei bekannten Installationsroutinen:
Für die Geeks unter euch: Standardmäßig wird SiaB unter /usr/local/bin/ und die Includes unter /usr/local/include/ abgelegt. Ihr könnt das aber natürlich mit --prefix=PREFIX beeinflussen:
Bis hierin noch alle dran? Dann testen wir jetzt mal, ob alles glatt gelaufen ist...
Dies startet den Daemon auf dem Standardport 4200. Ruft nun im Browser http://MEINEIP-ODER-DOMAENE:4200/
Shell in a Box sollte euch nun begrüßen. Falls nicht, die Schritte von oben nach unten noch einmal durchgehen...
Falls ja, weiter im Text.
Soll euch die Shell jederzeit zur Verfügung stehen? Dann startet die Shell automatisch als Service. Folgende Zeile in die Datei /etc/rc.local (gehört zum iPKG) eintragen:
Es ist gar nicht so doll, wenn SiaB auf einem Standardport rennt. Angreifer können so bei Port-Scans leicht herausfinden, dass ihr SiaB am Start habt. Darum: Port-Forwarding einrichten! Das ist natürlich von Router zu Router unterschiedlich, darum nur das Wichtigste: Sagen wir, ihr habt euch für Port 12345 entschieden, so gebt ihr in eurem Router an, dass TCP:12345 auf TCP:12345 weitergeleitet wird - nicht vergessen, euer NAS als Zielgerät festzulegen!
Es gibt natürlich noch wesentlich mehr Optionen, zum Beispiel kann man den SiaB-Daemon auch als CGI-Skript bei Bedarf laufen lassen. Es lohnt sich in jedem Fall einen Blick ins Manual zu werfen!
Und wer immer noch nicht genug hat, für den/die habe ich noch etwas: Ein Desktopsymbol, um SiaB direkt vom DS-Desktop zu starten... Los geht's!
Voraussetzung ist, dass ihr mindestens Firmware ab Version 3.0 einsetzt. Mit einem Texteditor eurer Wahl (beispielsweise vi) erzeugt ihr die folgenden Ordner und Dateien (alle UTF-8):
WebShell
|
+-- images
|
+-- applications.cfg
|
+-- authenticate.cgi
|
+-- config <- Das ist eine Datei ohne Endung
|
Inhalt der applications.cfg:
Inhalt der authenticate.cgi:
Inhalt der config:
In den Ordner ./images packt ihr vier PNG-Dateien namens icon_16.png, icon_24.png, icon_32.png und icon_48.png - ihr könnt euch sicherlich denken, wie groß jede einzelne sein muss...
Dateien und Ordner mit Inhalten gefüllt? Dann ab damit ins Verzeichnis /usr/syno/synoman/webman/3rdparty/, wobei ./images und die drei Dateien in diesem Ordner liegen müssen: /usr/syno/synoman/webman/3rdparty/WebShell
Nach einem Refresh des DS-Desktops seht ihr im Bedienfeld das Icon eurer WebShell und könnt dieses einfach auf den Desktop ziehen.
Zu den Inhalten der Dateien lasse ich mich jetzt nicht aus, nur so viel: adminonly=true und "allUsers":false bedeuten, dass nur der Admin diese Icons zu Gesicht bekommt und "normale" User nicht. Wollt ihr das anders haben, müsst ihr jeweils die beiden Werte vertauschen. Die verwendeten Protokolle sind unverschlüsselte HTTP-Verbindungen. Warum? Weil die wenigsten von euch proper generierte Zertifikate mit OpenSSL oder einem anderen Tool erstellt haben, die zwingend von SiaB für HTTPS vorausgesetzt werden. Falls ihr dennoch https eintragt und keine Zertifikate habt, erhaltet ihr eine SSL-Fehlermeldung und die Shell verweigert den Start.
Ich empfehle aber dringend, dies schnellstmöglich nachzuholen, da jegliche Verbindung unverschlüsselt über den virtuellen Äther geht und gesnifft werden kann.
Das war's fürs Erste! Fragen, Meinungen, Kritik, Feedback jeglicher Art: Ich erwarte euch...
Gruß,
Steini
Ich war's langsam leid, dass ich von meiner Firma aus keine SSH- oder Telnet-Verbindung zu meinem NAS aufbauen konnte ob der geballten Firewall- und Proxy-Power... ;-) Aber es gibt ja Mittel und Wege, wie man trotzdem die auf seiner NAS installierten Terminal-Skripte nutzen kann: Web-Shell heißt das Zauberwort!
Es gibt einige Web-Shells im Cyberspace - ich entschied mich für Shell in a Box (SiaB).
Vorweg: Alles, was ihr mit eurer DS anstellt und evtl. dabei "zu Bruch" geht, geht auf eure Kappe! Also: Backup, Backup, Backup!
Vorbeitungen:
Ladet euch das aktuelle Skript (als Source Code) von der Website herunter und auf das NAS rauf, beispielsweise nach /volume1/public/
Noob-kompatibles Entpacken:
Im Dateibrowser auf die gepackte Datei rechtsklicken und entpacken.
Sofern noch nicht geschehen, muss das Itsy Package Management System (iPKG) installiert werden. Wie das geht, steht hier. Danach via SSH (Telnet geht auch, ist aber eine unverschlüsselte Verbindung) auf der DS als root (nicht admin oder irgendein anderer User) einloggen. Die Synology-Boxen setzen auf ein Busybox-Linux. Daher müssen wir dem System erstmal auf die Sprünge helfen, indem wir ihm einige Tools verpassen, die uns das Leben erleichtern. Los geht's:
Code:
ipkg install gawk
ipkg install gcc
ipkg install make
Code:
mv /volume1/public/shellinabox-2.10 /tmp/
cd /tmp/shellinabox-2.10
Code:
./configure
make
make install
Code:
./configure --prefix=/usr/local/nocheinlokal/unddasletztelokal
Bis hierin noch alle dran? Dann testen wir jetzt mal, ob alles glatt gelaufen ist...
Code:
shellinaboxd -b
Shell in a Box sollte euch nun begrüßen. Falls nicht, die Schritte von oben nach unten noch einmal durchgehen...
Falls ja, weiter im Text.
Soll euch die Shell jederzeit zur Verfügung stehen? Dann startet die Shell automatisch als Service. Folgende Zeile in die Datei /etc/rc.local (gehört zum iPKG) eintragen:
Code:
/usr/local/bin/shellinaboxd --background=/var/run/shellinaboxd.pid --port=12345 --service=/:LOGIN
Es gibt natürlich noch wesentlich mehr Optionen, zum Beispiel kann man den SiaB-Daemon auch als CGI-Skript bei Bedarf laufen lassen. Es lohnt sich in jedem Fall einen Blick ins Manual zu werfen!
Und wer immer noch nicht genug hat, für den/die habe ich noch etwas: Ein Desktopsymbol, um SiaB direkt vom DS-Desktop zu starten... Los geht's!
Voraussetzung ist, dass ihr mindestens Firmware ab Version 3.0 einsetzt. Mit einem Texteditor eurer Wahl (beispielsweise vi) erzeugt ihr die folgenden Ordner und Dateien (alle UTF-8):
WebShell
|
+-- images
|
+-- applications.cfg
|
+-- authenticate.cgi
|
+-- config <- Das ist eine Datei ohne Endung
|
Inhalt der applications.cfg:
Code:
text=WebShell
description=Shell in a Box starten
protocol=http
address=MEINE-IP-ODER-DDNS-OHNE-PROTOKOLL
port=12345
type=embedded
icon_16=images/icon_16.png
icon_32=images/icon_32.png
adminonly=true
Inhalt der authenticate.cgi:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
int IsUserLogin(char *user, int bufsize)
{
FILE *fp = NULL;
char buf[1024];
int login = 0;
bzero(user, bufsize);
fp = popen("/usr/syno/synoman/webman/modules/authenticate.cgi", "r");
if (!fp) {
return 0;
}
bzero(buf, sizeof(buf));
fread(buf, 1024, 1, fp);
if (strlen(buf) > 0) {
snprintf(user, bufsize, "%s", buf);
login = 1;
}
pclose(fp);
return login;
}
int main(int argc, char **argv)
{
char user[256];
printf("Content-type: text/html\r\n\r\n");
if (IsUserLogin(user, sizeof(user)) == 1) {
printf("User is authenticated. Name: %s\n", user);
} else {
printf("User is not authenticated.\n");
}
return 0;
}
Inhalt der config:
Code:
{
".url": {
"type":"legacy",
"allUsers":false,
"title":"WebShell",
"desc":"Shell in a Box starten",
"icon":"images/icon_{0}.png",
"url":"http://MEINE-IP-ODER-DDNS:12345/"
}
}
}
In den Ordner ./images packt ihr vier PNG-Dateien namens icon_16.png, icon_24.png, icon_32.png und icon_48.png - ihr könnt euch sicherlich denken, wie groß jede einzelne sein muss...
Dateien und Ordner mit Inhalten gefüllt? Dann ab damit ins Verzeichnis /usr/syno/synoman/webman/3rdparty/, wobei ./images und die drei Dateien in diesem Ordner liegen müssen: /usr/syno/synoman/webman/3rdparty/WebShell
Nach einem Refresh des DS-Desktops seht ihr im Bedienfeld das Icon eurer WebShell und könnt dieses einfach auf den Desktop ziehen.
Zu den Inhalten der Dateien lasse ich mich jetzt nicht aus, nur so viel: adminonly=true und "allUsers":false bedeuten, dass nur der Admin diese Icons zu Gesicht bekommt und "normale" User nicht. Wollt ihr das anders haben, müsst ihr jeweils die beiden Werte vertauschen. Die verwendeten Protokolle sind unverschlüsselte HTTP-Verbindungen. Warum? Weil die wenigsten von euch proper generierte Zertifikate mit OpenSSL oder einem anderen Tool erstellt haben, die zwingend von SiaB für HTTPS vorausgesetzt werden. Falls ihr dennoch https eintragt und keine Zertifikate habt, erhaltet ihr eine SSL-Fehlermeldung und die Shell verweigert den Start.
Ich empfehle aber dringend, dies schnellstmöglich nachzuholen, da jegliche Verbindung unverschlüsselt über den virtuellen Äther geht und gesnifft werden kann.
Das war's fürs Erste! Fragen, Meinungen, Kritik, Feedback jeglicher Art: Ich erwarte euch...
Gruß,
Steini
Zuletzt bearbeitet: