Benutzer-Werkzeuge

Webseiten-Werkzeuge


freifunk:rootshell

Root-Zugang

Um auf eurem Router spezielle Anpassungen vornehmen zu können, ist ein Root-Zugang notwendig. Durch Setzen eines Root-Passworts bzw. einpflegen eines public-key, bekommt ihr dauerhaften Root-Zugang auf euren Freifunk-Router.

Sobald ein Passwort gesetzt wurde ist der SSH-Zugriff auch von der WAN-Seite aus möglich.

Solltet ihr den Root Zugang nicht dauerhaft brauchen benutzt nur den Config Mode. (also WPS Taste mehrere Sekunden gedrückt halten und dann nach dem Neustart mit link-local an der einem gelben Port mit telnet 192.168.1.1 verbinden, eure Änderungen vornehmen und nach dem reboot ist wieder alles sicher)

WARNING!!!

Da die Router per IPv4/IPv6 erreichbar sind, muss ein sicheres Passwort vergeben werden, da über den Zugriff per SSH der Router beliebig konfiguriert werden kann und im theoretischen Fall ein Zugriff auf das lokale Netz, an dem der Freifunk-Router angeschlossen ist, ermöglicht werden kann!!!

WARNING!!!

Config Mode - frisch geflasht

als erstes müsst ihr in den Config Mode, dann könnt ihr euch den Root Zugang auf die ein oder andere Weise anlegen.

Root-Passwort Zugang setzen

SSH Key

Dringend zu bevorzugen zu Passwörtern. Erstellt auf dem Gerät im Ordner /etc/dropbear eine Datei authorized_keys

vi /etc/dropbear/authorized_keys 

und fügt dort den Inhalt eures Keys ein (aus der Datei ~/.ssh/id_rsa.pub ). Wenn ihr noch nie die Key Authentifizierung benutzt habt, weil ihr sonst auch nie ssh benutzt, müsstet ihr den Key noch generieren. Unter Linux geht das meist mit

ssh-keygen -t rsa

. Wenn der Public Key auf dem Router hinterlegt ist, kann euer Computer/Nutzer ohne Passwort auf dem Router einloggen. Das ist in der Regel sicherer (aber auch nur so sicher wie euer Computer/User)

Passwort

Manchmal will von überall ohne hinterlegte Keys auf den Router zugreifen. Das Root-Passwort wird für gewöhnlich über das Web-Interface im Konfigurations-Modus gesetzt. Alternativ kann auf der Kommando-Zeile per passwd ein Passort gesetzt werden. Dazu muss Mensch sich mit dem Router per Telnet verbinden, sobald sich dieser im Konfigurations-Modus befindet:

root@freifunk-c46e1f930820:~# passwd
Changing password for root
New password:                               <- Enter Password
Retype password:                            <- Enter Password twice
Password for root changed by root
root@freifunk-c46e1f930820:~# 

Als Root einloggen

Da der Router nicht direkt per IPv4 aus dem Freifunk-Netz erreichbar ist, stehen folgende alternative Möglichkeiten zur Einwahl als Root auf dem Gerät zur auswahl:

Telnet

Telnet ist ein altes unsicheres Protokoll. Selbst enthält es keine Benutzer-Authentifizierung. Deswegen stellt die Freifunk-Firmware im Konfigurations-Modus immer einen Telnet-Zugang bereit, sodass der Root-Login darüber immer möglich ist.

[16:49:44][n3ph@c3po:~]$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.


BusyBox v1.19.4 (2014-11-09 12:59:28 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 ATTITUDE ADJUSTMENT (Attitude Adjustment, r36121)
 -----------------------------------------------------
  * 1/4 oz Vodka      Pour all ingredients into mixing
  * 1/4 oz Gin        tin with ice, strain into glass.
  * 1/4 oz Amaretto
  * 1/4 oz Triple sec
  * 1/4 oz Peach schnapps
  * 1/4 oz Sour mix
  * 1 splash Cranberry juice
 -----------------------------------------------------
root@freifunk-c46e1f930820:~#

Da die Freifunk Firmware IPv6 unterstützt gibt es die Möglichkeit per Link Local auf die Geräte zuzugreifen. Dazu muss die Linux-Distribution IPv6-Unterstützung beherrschen. Das Vorgehen lässt sich folgendermaßen zusammenfassen:

  • IPv6 Broadcast-Ping auf dem Interface welches mit dem Router verbunden ist, also Kabel oder Wireless
  • IPv6-Adresse aus der Bildschirm-Rückgabe heraussuchen
  • SSH per IPv6 Link Local auf das Gerät öffnen

Um die IPv6 Link Local Adresse zu finden muss Mensch einen IPv6 Broadcast Ping ausführen. Das wird auf dem jeweiligen mit dem Router verbundenen Interface getan. In diesem Beispiel mit dem Ethernet Interface wlan2:

 ifconfig 

dann ggf. wlan2 zu beginn des folgenden Befehls mit dem korrekten interface tauschen

ping6 -c 2 -I wlan2 ff02::1 > /tmp/tmpping6 && head -n 7 /tmp/tmpping6 && rm /tmp/tmpping6 

Hier ist mit ein wenig trickserei der Output schön zusammen gekürzt da sonst sehr viele Netzwerk-Geräte auf diesen IPv6 Broadcast Ping antworten. Da in der Ausgabe von ifconfig die IPv6 Link Local Adresse des Interfaces zu sehen ist, muss die darauf folgende IPv6 Link Local Adresse jene des Routers sein. Meist die 2. oder dritte, das geht auch aus der Response-Zeit, wie in der Ausgabe zu sehen, hervor.

SSH-Session aufbauen

Anschließend kann mit folgendem Befehl eine SSH-Session zum Gerät aufgebaut werden: Achtet darauf das ssh manchmal das -6 als Argument benötigt, in jedem Fall aber das Interface spezifiert haben will. In dem Beispiel mit einem %wlan2 an die IPv6 angehängt

[17:05:10][n3ph@c3po:~]$ ssh root@fe80::c66e:1fff:fe93:820%wlan2
...
root@freifunk-c46e1f930820:~# 

SCP-Datei transfer

Um per SSH Dateien über IPv6 Link Local zu transportieren ist folgender Befehl notwendig:

[17:07:44][n3ph@c3po:~]$ scp ~/path/to/file root@[fe80::c66e:1fff:fe93:820%enp0s25]:/tmp/
file                                                 100% 5120     5.0KB/s   5.0KB/s   00:00    
[17:08:09][n3ph@c3po:~]$ 

schöner leben mit Root Shell

/etc/banner openWRT Logo ändern

damit ihr mehr Infos beim Shell login bekommt könnt ihr in /etc/banner das OpenWRT Banner etwas stutzen, ganz canceln, oder neu gestalten. Der Banner wird Zeile für Zeile einfach ausgegeben

/etc/profile mehr infos beim login

in die /etc/profile zum Beispiel dies hier hinzufügen

# get ipv4 if not already there, checked simply by wget call
wget -O /dev/null --quiet http://nirgendwo.de;
if [ $? != 0 ]; then
                udhcpc -i br-client -q -S -n;
fi
                echo " "
                echo "##########################################"
                echo -n "### IP :  "
                ifconfig |head|tail -n1
                echo    "### from ssh : "$SSH_CONNECTION
                echo -n "### uptime :  "
                uptime
                echo -n "### connected to this node  :    "
                batctl tl |grep W |wc -l
                echo -n "### all Wifi Users in fffr  :    "           
                batctl tg |grep W |wc -l
# some more stuff ...
# and more .. 
# and more
                echo    "########################################"
                                          
# just some handy aliases 
alias ll="ls -la"
alias cd..="cd .."       
alias myip="echo -n 'ifconfig' && ifconfig |head|tail -n1 && echo 'from ssh : ' $SSH_CONNECTION"

sieht dann erfrischend als Bild so aus (Bspw.)

Serieller Zugang

Viele APs wie der 841N(D) haben ein 3.3V TTL serial-Pinout auf der Platine, mit der ihr per passendem Adapter (TTL2USB - UART) auf die Serielle Konsole kommt. Hierbei ist auch ein Zugriff auf den Bootloader möglich - besonders hilfreich bei de-bricking nach fehlgeschlagenen Experimenten mit eigener Firmware. Üblicherweise bekommt man per serieller Konsole auch passwortlos eine Rootshell auf das Freifunk-Gerät. Direktzugang per seriell ist für Netzwerkexperimente generell sehr praktisch. Achtung: teilweise Einlöten von Pullup-Widerstand notwendig!

freifunk/rootshell.txt · Zuletzt geändert: 2015/09/28 22:32 von viisauksena