Sinepp
Registered User
Inhalt
Vorwort
Entstanden ist dieses HowTo aus Threads in denen User bzw. Serverbesitzer die Frage gestellt haben: „Was ist eigentlich SSH / die Shell?“ An der Stelle der Appell: Wenn diese grundlegende Frage auftaucht fehlt Grundwissen! Es leuchten bei Serveradministratoren die Alarmlampen mit dem Label „Newbie-Alarm“ auf. Die Frage als solche ist natürlich berechtigt, aber sie sollte nicht von jemanden gestellt werden der sich bereits einen Server gekauft / gemietet hat und nun Probleme im Betrieb feststellt. Nun für Einsteiger, Nachschlager etc. soll das HowTo dienen und wird bei Bedarf erweitert / verändert etc. Das ist hier sozusagen die Version 0.1 und ich hoffe auf zahlreiche Kritik und Verbesserungvorschläge.
Die Quick and Dirty Methode ist genau wie der Name sagt Quick und Dirty, sollte aber ausreichend sein um einen Befehl an seinen Server zu übermitteln.
Quick and Dirty Einstieg für Ungeduldige
Es wurde gesagt „gib den Befehl XYZ in die Shell ein“ und Du hast keine Ahnung bei welchem Pizzaservice Du nun Deine Shell bestellen sollst? Gut. Es gibt unter Linux und Windows zwei Möglichkeiten der Bedienung
a) die grafische Oberfläche
b) die DOS Box bei Windows oder die Shell unter Linux
Um auf die Shell unter Linux zuzugreifen benötigst Du einen SSH Client – ein Programm was eine Verbindung zu Deinem Server herstellt und die Befehle überträgt, die Du an Deinem PC eingibst. Hier gibt es:
- Putty (für Windows)
- SSH (für Linux)
Nach der Installation gibt es nun die Möglichkeit Putty zu starten. Meistens irgendwie über Start Programme irgendwas Putty. Um Dich mit Deinem Server zu verbinden musst Du nun folgende Daten eingeben:
- Hostname (IP Adresse oder deinedomain.de)
- Connection Type = SSH
Anschließend einfach mal auf Open klicken und es sollte ein Fenster aufpoppen, weiße Schrift auf schwarzem Grund mit dem Wort „login:“. Dort gibst Du in der Regel root ein. Das Passwort sollte Dir Dein Provider mitgeteilt haben. Bei erfolgreichem Login solltest Du nun die Möglichkeit haben Kommandos einzugeben.
Jetzt nur noch den Befehl XYZ eingeben und den Anweisungen des Forums folgen. Wenn Du Dich mit dem User root eingeloggt hast, kannst Du alles auf der Maschine anstellen was Du möchtest, also sei vorsichtig und wenn Du Dir nicht sicher bist – lies erstmal nach, was der Befehl macht, den Du da ausführen sollst. Hier ein paar wichtige SSH, besser gesagt Shell-Befehle:
<b>Befehl
man BEFEHL
ls > /root/test.txt
Kurzferenz zu vi
Befehl
Erklärung
i
Alternative Editoren: vim, nano oder pico.
SSH
SSH steht für Secure Shell und bietet mittels Verschlüsselung eine Möglichkeit eine abhörsichere Leitung zwischen sich und seinem Server aufzubauen um dort Befehle abzusetzen. Es handelt sich hierbei um eine Client / Server Lösung, d.h. auf dem Host im Internet / bei dem Provider wird ein SSHD(aemon) installiert, der auf eingehende Verbindung auf einem in der sshd.config angegebenem Port lauscht. Standardmäßig ist das 22, daher kommt auch die in Putty voreingestellte Porteingabe 22, wenn man als Connection Type ssh auswählt.
Das heißt nicht, dass SSH per se sicher ist, jedoch ist zumindest der Übertragungsweg mittels Verschlüsselung abgesichert. Von SSH gibt es zwei Versionen ssh-1 und ssh-2. Welche davon vom sshd unterstützt wird, wird in der sshd.conf geregelt. v1 sollte ausgeschaltet sein, da es als nicht sicher angesehen wird.
Es gibt auf der Seite von Simon Tatham einige Informationen zum Thema Putty und SSH, die sich jeder Wissbegierige ruhig mal anschauen sollte – spätestens jedoch wenn Fragen auftauchen.
Die Shell
Es gibt eigentlich nicht die Shell – sondern eher mehrere Shells. Eine Shell (Hülle, Schale) ist im Prinzip ein Programm, welches einem User die Möglichkeit gibt mit seinem Computer zu sprechen. Es geht dabei natürlich nicht um Liebeserklärungen, aber beispielsweise um eine Arbeitsanforderung. Ein „Bitte lieber Rödelheimer, lösche mal die Datei X“ würde mit einem „rm x“ übersetzt werden – und das ist erst der Anfang (naja eigentlich ist der Befehl „login“ der Anfang...).
Also, wie gesagt, die Shell ist ein Programm für die Schnittstelle Mensch – Computer und wie es immer so ist, es gibt davon mehrere. Die Bourne Shell hat laut wikipedia.de den Anfang gemacht, es folgten viele weitere. Die Art der Shell definiert, welche Befehle der User eingeben kann, wie die Ausgabe der Befehle aussieht und auch wie die Skriptsprache funktioniert. Denn man kann in der Shell auch programmieren (siehe dazu den wikipedia Link).
In heutigen Linux-Betriebssystemen wird oft die Bourne-Again-Shell verwendet, eine aufgebohrte Variante der Bourne-Shell mit einigen Erweiterungen aus der C-Shell (csh) und Korn-Shell (ksh).
SSH Sicherheit
Quick and Dirty:
- diesen Thread durchlesen (eine Art Checkliste)
- Beispiel einer sshd.conf
Die zwei wichtigsten Dinge:
Update 060807: (unter anderen Betriebssystemen wie bspw. Debian kann es auch „/etc/init.d/ssh restart“ sein)
Tipp: Ein „#“ vor der Zeile Port oder PermitRootLogin muss herausgenommen werden, da das „#“ die Zeile als Kommentar deklariert (bitte nicht vergessen vorher einen User anzulegen, danke für die Tipps DanielD).
Hintergründe:
Der sshd bietet die Möglichkeit von einem beliebigen Computer im Internet über das Internet auf seinen (v)Host (=virtual Host) zuzugreifen. Da der sshd nicht weiß, wer die Erlaubnis hat auf ihn zuzugreifen wird grundsätzlich jeder Client erstmal an den Login gelassen, der IP und Port des sshd kennt.
Vereinfacht gesprochen: Solange ich die Telefonnummer von jemanden kenne, kann mich nichts davon abhalten, denjenigen anzurufen.
D.h. es gibt Programme im Internet, die wild alle IP Adresse (Telefonnummern) durchprobieren, allerdings mit dem Zusatz „Port 22“. Antwortet eine IP Adresse (ein Server), weiß das Programm, dass auf diesem Server wohl ein sshd unter Port 22 läuft. Im Anschluß daran versucht das Programm nun sich auf diesem Computer einzuloggen. Als Loginname wird vermutlich root versucht und sollte es den nicht geben, bzw. sollte der nicht erlaubt sein sich einzuloggen wird mit einem Brute-Force- oder einem Wörterbuchangriff versucht einen gültigen Benutzernamen herauszubekommen. Sollte es damit Erfolg haben probiert das Programm mit Brute-Force- und Wörterbuchangriff das Passwort zu erraten.
Damit diese Angriffe nicht erfolgreich sind genügt ein ausreichend starkes Passwort aus. Damit die Versuche aber von vornherein ins Leere laufen, ohne dass ein normales Angriffsprogramm herausfindet, dass ein sshd läuft ist es sinnvoll einen Nicht-Standard-Port zu wählen, also wie im obigen Quick and Dirty Beispiel 1234 oder 32322. Die Portangabe sollte höher als 1024 und muss niedriger als 65536 sein. Das entlastet die Logfiles ganz ungemein.
Desweiteren sollte der User root nicht die Erlaubnis haben sich einzuloggen. Besser wäre es bspw. eine user auf dem Linux zu erstellen, der keinerlei Rechte besitzt, außer sich per SSH einzuloggen und sich dann mit einem Befehl „su“ als root anzumelden. Dadurch entsteht eine doppelte Hürde für den Angreifer. Selbst wenn er den ersten Zugang knackt kann er immer noch nicht viel bewirken, ihm fehlen dann für weitere Aktionen die Berechtigungen und er müsste den root auch noch knacken. Das Passwort sollte aber in beiden Fällen ein starkes sein.
Das Beispiel mit der Telefonnummer ist übrigens ganz passend, da man bei der Telekom manche Telefonnummern auf eine schwarze Liste setzen kann. Damit wird dem Anrufer mit der Nummer X verboten, den Anschluss Y anzurufen. So ähnlich geht das auch mit einem Serverdienst wie SSH.
Nützliche Tools
Editoren:
Datei Manager
- Vorwort
- Quick and Dirty Einstieg für Ungeduldige
- Kurzreferenz Shell-Befehle
- Übersicht Operatoren / Pipe
- Kurzreferenz vi-Befehle
- SSH
- Die Shell
- SSH Sicherheit
- Nützliche Tools
Vorwort
Entstanden ist dieses HowTo aus Threads in denen User bzw. Serverbesitzer die Frage gestellt haben: „Was ist eigentlich SSH / die Shell?“ An der Stelle der Appell: Wenn diese grundlegende Frage auftaucht fehlt Grundwissen! Es leuchten bei Serveradministratoren die Alarmlampen mit dem Label „Newbie-Alarm“ auf. Die Frage als solche ist natürlich berechtigt, aber sie sollte nicht von jemanden gestellt werden der sich bereits einen Server gekauft / gemietet hat und nun Probleme im Betrieb feststellt. Nun für Einsteiger, Nachschlager etc. soll das HowTo dienen und wird bei Bedarf erweitert / verändert etc. Das ist hier sozusagen die Version 0.1 und ich hoffe auf zahlreiche Kritik und Verbesserungvorschläge.
Die Quick and Dirty Methode ist genau wie der Name sagt Quick und Dirty, sollte aber ausreichend sein um einen Befehl an seinen Server zu übermitteln.
Quick and Dirty Einstieg für Ungeduldige
Es wurde gesagt „gib den Befehl XYZ in die Shell ein“ und Du hast keine Ahnung bei welchem Pizzaservice Du nun Deine Shell bestellen sollst? Gut. Es gibt unter Linux und Windows zwei Möglichkeiten der Bedienung
a) die grafische Oberfläche
b) die DOS Box bei Windows oder die Shell unter Linux
Um auf die Shell unter Linux zuzugreifen benötigst Du einen SSH Client – ein Programm was eine Verbindung zu Deinem Server herstellt und die Befehle überträgt, die Du an Deinem PC eingibst. Hier gibt es:
- Putty (für Windows)
- SSH (für Linux)
Nach der Installation gibt es nun die Möglichkeit Putty zu starten. Meistens irgendwie über Start Programme irgendwas Putty. Um Dich mit Deinem Server zu verbinden musst Du nun folgende Daten eingeben:
- Hostname (IP Adresse oder deinedomain.de)
- Connection Type = SSH
Anschließend einfach mal auf Open klicken und es sollte ein Fenster aufpoppen, weiße Schrift auf schwarzem Grund mit dem Wort „login:“. Dort gibst Du in der Regel root ein. Das Passwort sollte Dir Dein Provider mitgeteilt haben. Bei erfolgreichem Login solltest Du nun die Möglichkeit haben Kommandos einzugeben.
Jetzt nur noch den Befehl XYZ eingeben und den Anweisungen des Forums folgen. Wenn Du Dich mit dem User root eingeloggt hast, kannst Du alles auf der Maschine anstellen was Du möchtest, also sei vorsichtig und wenn Du Dir nicht sicher bist – lies erstmal nach, was der Befehl macht, den Du da ausführen sollst. Hier ein paar wichtige SSH, besser gesagt Shell-Befehle:
<b>Befehl
Erklärung
</b>man BEFEHL
Gibt die Dokumentation zu dem BEFEHL aus, bspw.: „man grep“
ls Listet den Inhalt des Verzeichnisses auf, in dem Du Dich gerade befindest. Weiterführende Infos: Gebe den Befehl „man ls“ ein
rm DATEILöscht die DATEI
pwd Zeigt Dir das Verzeichnis an, in dem Du Dich gerade befindest
vi DATEI vi ist ein Editor. Mit vi DATEI wird die DATEI im Editor zum lesen geöffnet.
„man vi“ wird dringend empfohlen, eine Kurzreferenz zu den wichtigsten Befehlen gibt es im Anschluss an diese Tabelle.
find / -name BEGRIFF Durchsucht die Platte ab dem Verzeichnis „/“ nach einer Datei mit dem Namen BEGRIFF. Es kann auch mit 'BEGRI*' gesucht werden.
ps aux ps ist ein Befehl, der alle laufenden Prozesse ausgibt, die Argumente „aux“ geben wirklich alle Prozesse aus (siehe „man ps“).
Operatorenls > /root/test.txt
Gibt das was der Befehl ls ausgeben würde in die Datei test.txt im Verzeichnis root aus, überschreibt dabei den Inhalt von test.txt
ls >> /root/test.txt Gibt das was der Befehl ls ausgeben würde in die Datei test.txt im Verzeichnis root aus, hängt die Daten an das Dateiende an
ls | grep test Das Pipesymbol „|“ wird mit „Alt Gr“ und der „größer/kleiner Taste“ geschrieben. Es verkettet in diesem Beispiel zwei Befehle. In diesem Fall würde der Befehl ls nur die Verzeichnisnamen ausgeben, die das Wort test beinhalten (grep sucht in dem Ergebnis von ls nach Begriffen, die den String „test“ beinhalten). Auf diese Art können beliebig viele Befehle miteinander verkettet werden, der nachfolgende verarbeitet jeweils das Ergebnis des vorherigen...einfach gesagt.
Kurzferenz zu vi
Befehl
Erklärung
i
Steht für Insert, setzt Dich in den Änderungsmodus. Sorgt dafür, dass Du nach einem „vi DATEI“ die Datei auch ändern kannst
ESCUm aus dem Änderungsmodus wieder herauszukommen
/BEGRIFFDurchsucht die geöffnete Datei nach dem BEGRIFF.
:q!Beendet vi ohne Änderungen abzuspeichern
:wq!Beendet vi und speichert die Änderungen
Es gibt sicherlich noch einige Befehle die interessant sind, allerdings würde das den Rahmen sprengen. Du kannst jetzt nach einer Datei suchen, eine Datei öffnen, diese bearbeiten und speichern sowie schließen usw.Alternative Editoren: vim, nano oder pico.
SSH
SSH steht für Secure Shell und bietet mittels Verschlüsselung eine Möglichkeit eine abhörsichere Leitung zwischen sich und seinem Server aufzubauen um dort Befehle abzusetzen. Es handelt sich hierbei um eine Client / Server Lösung, d.h. auf dem Host im Internet / bei dem Provider wird ein SSHD(aemon) installiert, der auf eingehende Verbindung auf einem in der sshd.config angegebenem Port lauscht. Standardmäßig ist das 22, daher kommt auch die in Putty voreingestellte Porteingabe 22, wenn man als Connection Type ssh auswählt.
Das heißt nicht, dass SSH per se sicher ist, jedoch ist zumindest der Übertragungsweg mittels Verschlüsselung abgesichert. Von SSH gibt es zwei Versionen ssh-1 und ssh-2. Welche davon vom sshd unterstützt wird, wird in der sshd.conf geregelt. v1 sollte ausgeschaltet sein, da es als nicht sicher angesehen wird.
Es gibt auf der Seite von Simon Tatham einige Informationen zum Thema Putty und SSH, die sich jeder Wissbegierige ruhig mal anschauen sollte – spätestens jedoch wenn Fragen auftauchen.
Die Shell
Es gibt eigentlich nicht die Shell – sondern eher mehrere Shells. Eine Shell (Hülle, Schale) ist im Prinzip ein Programm, welches einem User die Möglichkeit gibt mit seinem Computer zu sprechen. Es geht dabei natürlich nicht um Liebeserklärungen, aber beispielsweise um eine Arbeitsanforderung. Ein „Bitte lieber Rödelheimer, lösche mal die Datei X“ würde mit einem „rm x“ übersetzt werden – und das ist erst der Anfang (naja eigentlich ist der Befehl „login“ der Anfang...).
Also, wie gesagt, die Shell ist ein Programm für die Schnittstelle Mensch – Computer und wie es immer so ist, es gibt davon mehrere. Die Bourne Shell hat laut wikipedia.de den Anfang gemacht, es folgten viele weitere. Die Art der Shell definiert, welche Befehle der User eingeben kann, wie die Ausgabe der Befehle aussieht und auch wie die Skriptsprache funktioniert. Denn man kann in der Shell auch programmieren (siehe dazu den wikipedia Link).
In heutigen Linux-Betriebssystemen wird oft die Bourne-Again-Shell verwendet, eine aufgebohrte Variante der Bourne-Shell mit einigen Erweiterungen aus der C-Shell (csh) und Korn-Shell (ksh).
SSH Sicherheit
Quick and Dirty:
- diesen Thread durchlesen (eine Art Checkliste)
- Beispiel einer sshd.conf
Die zwei wichtigsten Dinge:
- SSH Port verlegen
in der sshd.conf die Zeile „Port 22“ abändern auf „Port 1234“ bspw. - Root den Zugriff verbieten
Einen zusätzlichen SSH User ohne Rechte anlegen und dann PermitRootLogin No in der sshd.conf setzen
Update 060807: (unter anderen Betriebssystemen wie bspw. Debian kann es auch „/etc/init.d/ssh restart“ sein)
Tipp: Ein „#“ vor der Zeile Port oder PermitRootLogin muss herausgenommen werden, da das „#“ die Zeile als Kommentar deklariert (bitte nicht vergessen vorher einen User anzulegen, danke für die Tipps DanielD).
Hintergründe:
Der sshd bietet die Möglichkeit von einem beliebigen Computer im Internet über das Internet auf seinen (v)Host (=virtual Host) zuzugreifen. Da der sshd nicht weiß, wer die Erlaubnis hat auf ihn zuzugreifen wird grundsätzlich jeder Client erstmal an den Login gelassen, der IP und Port des sshd kennt.
Vereinfacht gesprochen: Solange ich die Telefonnummer von jemanden kenne, kann mich nichts davon abhalten, denjenigen anzurufen.
D.h. es gibt Programme im Internet, die wild alle IP Adresse (Telefonnummern) durchprobieren, allerdings mit dem Zusatz „Port 22“. Antwortet eine IP Adresse (ein Server), weiß das Programm, dass auf diesem Server wohl ein sshd unter Port 22 läuft. Im Anschluß daran versucht das Programm nun sich auf diesem Computer einzuloggen. Als Loginname wird vermutlich root versucht und sollte es den nicht geben, bzw. sollte der nicht erlaubt sein sich einzuloggen wird mit einem Brute-Force- oder einem Wörterbuchangriff versucht einen gültigen Benutzernamen herauszubekommen. Sollte es damit Erfolg haben probiert das Programm mit Brute-Force- und Wörterbuchangriff das Passwort zu erraten.
Damit diese Angriffe nicht erfolgreich sind genügt ein ausreichend starkes Passwort aus. Damit die Versuche aber von vornherein ins Leere laufen, ohne dass ein normales Angriffsprogramm herausfindet, dass ein sshd läuft ist es sinnvoll einen Nicht-Standard-Port zu wählen, also wie im obigen Quick and Dirty Beispiel 1234 oder 32322. Die Portangabe sollte höher als 1024 und muss niedriger als 65536 sein. Das entlastet die Logfiles ganz ungemein.
Desweiteren sollte der User root nicht die Erlaubnis haben sich einzuloggen. Besser wäre es bspw. eine user auf dem Linux zu erstellen, der keinerlei Rechte besitzt, außer sich per SSH einzuloggen und sich dann mit einem Befehl „su“ als root anzumelden. Dadurch entsteht eine doppelte Hürde für den Angreifer. Selbst wenn er den ersten Zugang knackt kann er immer noch nicht viel bewirken, ihm fehlen dann für weitere Aktionen die Berechtigungen und er müsste den root auch noch knacken. Das Passwort sollte aber in beiden Fällen ein starkes sein.
Das Beispiel mit der Telefonnummer ist übrigens ganz passend, da man bei der Telekom manche Telefonnummern auf eine schwarze Liste setzen kann. Damit wird dem Anrufer mit der Nummer X verboten, den Anschluss Y anzurufen. So ähnlich geht das auch mit einem Serverdienst wie SSH.
Nützliche Tools
Editoren:
- vi
- vim
- nano
- pico
Datei Manager
Last edited by a moderator: