239 lines
9.9 KiB
Markdown
239 lines
9.9 KiB
Markdown
# Root-Server einrichten
|
|
|
|
## Ausgangspunkt
|
|
|
|
- Netcup Root-Server
|
|
- Ubuntu 18.04 minimal Image
|
|
- als IP Adresse des Servers wird in dieser Dokumentation beispielhaft `1.2.3.4` verwendet
|
|
- der Hostname des Servers ist `srv` (ebenfall beispielhaft)
|
|
|
|
## Grundlegende Einrichtung
|
|
|
|
### Erste Anmeldung mit ssh
|
|
|
|
Nach der Einrichtung des Servers bekommt man normalerweise das Passwort für den ssh-Zugang per Mail geschickt. Damit kann man sich z.B. von einem Linux-Computer mit dem Terminal-Programm am Server anmelden.
|
|
|
|
```bash
|
|
ssh -l root 1.2.3.4
|
|
```
|
|
|
|
Wenn dieser Befehl für den Server das erste mal ausgeführt wird, muss man mit `yes` bestätigen, dass der "Fingerprint" des Server-Schlüssels in die Liste der bekannten Server aufgenommen werden soll:
|
|
|
|
```bash
|
|
The authenticity of host '1.2.3.4 (1.2.3.4)' can't be established.
|
|
ECDSA key fingerprint is SHA256:<hier steht dann eine lange Zahlen und Buchstabenreihe>.
|
|
Are you sure you want to continue connecting (yes/no)? yes
|
|
```
|
|
|
|
Dann kommt noch ein entsprechender Hinweis und die Aufforderung, das Passwort einzugeben:
|
|
|
|
```bash
|
|
Warning: Permanently added '1.2.3.4' (ECDSA) to the list of known hosts.
|
|
root@1.2.3.4's password:
|
|
```
|
|
|
|
Hat alles geklappt, wird man mit einer entsprechenden Meldung an der Server Konsole begrüßt
|
|
|
|
```bash
|
|
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-111-generic x86_64)
|
|
|
|
* Documentation: https://help.ubuntu.com
|
|
* Management: https://landscape.canonical.com
|
|
* Support: https://ubuntu.com/advantage
|
|
|
|
System information as of Thu Jul 16 16:11:02 CEST 2020
|
|
|
|
System load: 0.0 Processes: 110
|
|
Usage of /: 0.7% of 313.93GB Users logged in: 0
|
|
Memory usage: 1% IP address for eth0: 1.2.3.4
|
|
Swap usage: 0%
|
|
|
|
0 packages can be updated.
|
|
0 updates are security updates.
|
|
|
|
|
|
|
|
The programs included with the Ubuntu system are free software;
|
|
the exact distribution terms for each program are described in the
|
|
individual files in /usr/share/doc/*/copyright.
|
|
|
|
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
|
|
applicable law.
|
|
|
|
root@srv#
|
|
```
|
|
|
|
### Updates installieren
|
|
|
|
Zunächst sollte überprüft werden, ob alle Software-Pakete aktuell sind. Bei der Anmeldung bekommt man zwar schon einen entsprechenden Hinweis, der muss aber nicht aktuell sein, je nachdem, wann das letzte mal nach Updates gesucht wurde. Mit den folgenden Befehlen kann die Überprüfung durchgeführt und eventuelle Updates eingespielt werden.
|
|
|
|
```bash
|
|
apt update
|
|
apt upgrade
|
|
```
|
|
|
|
### Hilfsmittel installieren
|
|
|
|
Viele Linux-Admins benötigen für die Verwaltung eines Servers kaum zusätzliche Programme und erledigen alles an der SSH-Konsole mit den standardmäßig installierten Tools (vi, nano,...). Wer nicht jeden Tag auf der Linux-Konsole unterwegs ist, kommt mit einem Datei-Explorer schneller zurecht. Dafür bietet sich das Programm "Midnight-Commander" an, welches sich folgendermaßen installieren lässt:
|
|
|
|
```bash
|
|
apt install mc
|
|
```
|
|
|
|
Gestartet wird der Commander einfach mit dem Befehl `mc`. In einer 2-Fenster Ansicht (Wechsel mit "Tab"-Taste) kann man sich nun mit den Pfeil-Tasten und "Enter" durch das Dateisystem bewegen und z.B. Dateien mit der Taste "F3" anschauen oder mit "F4" bearbeiten. Beim ersten Bearbeiten muss man sich noch für einen Editor entscheiden, der dann immer beim Drücken von "F4" verwendet werden soll.
|
|
|
|
### Root Passwort ändern
|
|
|
|
Der Benutzer "root" hat alle Rechte auf dem Server und muss gut gesichert werden. Bei der Installation des Servers wird zwar automatisch ein starkes, zufälliges root-Passwort generiert, aber das wird erstens unverschlüsselt per Mail verschickt und zweitens im Server-Control-Panel des Hosters gespeichert. Sollte ein Angreifer Zugang zu einem von beiden erlangen, ist der Server damit kompromittiert.
|
|
|
|
Es ist daher ratsam, das initiale root-Passwort durch ein eigenes, starkes Passwort zu ersetzen. Ein zufälliges Passwort kann man unter Linux mit verschiedenen Programmen erstellen. Hier werden nur 2 Beispiele vorgestellt.
|
|
|
|
Der folgende Befehl erzeugt ein zufälliges, 15-stelliges Passwort an der Linux-Konsole:
|
|
|
|
```bash
|
|
openssl rand -base64 15
|
|
```
|
|
|
|
Für das zweite Beispiel muss zunächst das Programm "pwgen" installiert werden.
|
|
|
|
```bash
|
|
apt install pwgen
|
|
```
|
|
|
|
Mit dem Befehl `pwgen --help` kann man sich die möglichen Parameter und deren Bedeutung anschauen. Ein besonders starkes, zufälliges Passwort mit Sonderzeichen erzeugt man mit dem Befehl:
|
|
|
|
```bash
|
|
pwgen -ys 15 1
|
|
```
|
|
|
|
Jetzt kann das erzeugte Passwort für den Benutzer "root" geändert werden. Sofern man als "root" angemeldet ist, gelingt das mit dem Befehl:
|
|
|
|
```bash
|
|
passwd
|
|
```
|
|
|
|
In dem darauf folgenden Dialog muss man erst das bestehende root-Passwort eingeben und dann zwei mal das neue Passwort.
|
|
|
|
### Tastatur- und Spracheinstellungen anpassen (optional)
|
|
|
|
Bei manchen Server-Images sind Sprache und Region bereits voreingestellt und es muss nichts weiter getan werden. Wenn man im SSH-Terminal z.B. deutsche Sonderzeichen eintippt (ä,ö,...) und diese werden nicht richtig dargestellt, dann muss die Spracheinstellung angepasst werden.
|
|
|
|
Zunächst wird das deutsche Sprachpaket installiert
|
|
|
|
```bash
|
|
apt install language-pack-de
|
|
```
|
|
|
|
Die eigentliche Einstellung der Sprache erfolgt mit dem Befehl:
|
|
|
|
```bash
|
|
dpkg-reconfigure locales
|
|
```
|
|
|
|
Dabei erscheinen folgende Eingabefenster:
|
|
|
|
![Sprache einstellen, Fenster 1](bilder/sprache_einstellen_1.jpg)
|
|
|
|
![Sprache einstellen, Fenster 2](bilder/sprache_einstellen_2.jpg)
|
|
|
|
Mit dem Befehl `date` kann man überprüfen, ob die Zeitzone richtig eingestellt ist. Wenn ja, erscheint das aktuelle Datum mit der korrekten Zeit.
|
|
|
|
```bash
|
|
root@srv:~# date
|
|
Fri Jul 17 20:59:31 CEST 2020
|
|
```
|
|
|
|
Sollte die Zeit nicht stimmen (um exakt 1 oder mehrere Stunden abweichen), muss noch die Zeitzone eingestellt werden. Das erledigt man mit dem folgenden Befehl:
|
|
|
|
```bash
|
|
dpkg-reconfigure tzdata
|
|
```
|
|
|
|
In den daraufhin erscheinenden Eingabefenstern wird erst "Europe" und dann "Berlin" ausgewählt.
|
|
|
|
![Zeitzone einstellen, Fenster 1](bilder/zeitzone_einstellen_1.jpg)
|
|
|
|
![Zeitzone einstellen, Fenster 2](bilder/zeitzone_einstellen_2.jpg)
|
|
|
|
!!! note Anmerkung
|
|
Die Änderung der Zeitzone wird sofort übernommen. Um die geänderten Sprach-/Tastatureinstellungen zu aktivieren, muss man sich von der Konsole ab- und wieder anmelden.
|
|
|
|
## SSH-Zugang sichern
|
|
|
|
Der SSH-Zugang ist das wichtigste Instrument, um den Server zu verwalten. Dementsprechend ist er auch ein beliebtes Angriffsziel und sollte unbedingt sorgfältig gesichert werden. Das erfolgt in mehreren Schritten.
|
|
|
|
### Port-Nummer ändern
|
|
|
|
Normalerweise ist der SSH-Server so eingestellt, dass er an Port 22 auf eingehende Verbindungen wartet. Das wissen natürlich auch alle Hacker und Spammer. Wenn ein neuer Server mit einer öffentlichen IP-Adresse eingerichtet wird, dauert es meist nicht lange, bis man in den Log-Dateien erste gescheiterte Verbindungsversuche findet, weil irgendwer versucht, sich Zugang zu verschaffen. Mit einem starken Passwort sollte das eigentlich nicht gelingen, aber es erzeugt immerhin unnötigen Datenverkehr und Log-Einträge.
|
|
|
|
Es ist daher empfehlenswert, den Port des SSH-Servers zu ändern, um damit einen großen Teil der Angriffsversuche auszuschließen. Auf Wikipedia findet man eine [Liste der standardisierten Ports](https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports), aus der man entnehmen kann, dass die Ports 49152-65535 für diesen Zweck genutz werden können.
|
|
|
|
Um den Port zu ändern, wird die Datei `/etc/ssh/sshd_config` bearbeitet. Im Ausgangszustand ist die entsprechende Zeile meistens auskommentiert, da Port 22 als Standard gesetzt ist. In dem Fall muss "#" am Anfang der Zeile entfernt, und der neue Port eingetragen werden (in diesem Beispiel 54683).
|
|
|
|
```sh hl_lines="7"
|
|
...
|
|
# The strategy used for options in the default sshd_config shipped with
|
|
# OpenSSH is to specify options with their default value where
|
|
# possible, but leave them commented. Uncommented options override the
|
|
# default value.
|
|
|
|
Port 54683
|
|
#AddressFamily any
|
|
#ListenAddress 0.0.0.0
|
|
#ListenAddress ::
|
|
...
|
|
```
|
|
|
|
Die Änderung wird mit dem Neustart des SSH-Dienstes übernommen.
|
|
|
|
```bash
|
|
service ssh restart
|
|
```
|
|
|
|
Bei der Anmeldung per ssh muss jetzt der Port als Parameter mit angegeben werden.
|
|
|
|
```bash
|
|
ssh -l root 1.2.3.4 -p 54683
|
|
```
|
|
|
|
### Zugang für Benutzer "root" verbieten
|
|
|
|
Eine weitere Sicherheitsebene wird eingebaut, indem man dem Benutzer "root" den direkten Zugang per SSH verbietet. Sollte sich ein Angreifer Zugang zum System über SSH verschaffen, hat er dann nur eingeschränkte Möglichkeiten, bzw. müsste zusätzlich noch das Passwort von "root" herausfinden, um alle Rechte zu erlangen.
|
|
|
|
Es wird daher empfohlen, einen neuen Benutzer anzulegen, der dann Zugang über SSH bekommt.
|
|
|
|
!!! note Anmerkung
|
|
Normalerweise müssen Angreifer nach dieser Änderung nicht nur das Passwort, sondern auch den Benutzernamen "erraten". Daher sollten hier übliche Administrator-Namen wie "Admin", "Administrator",... vermieden werden.
|
|
|
|
``` sh
|
|
adduser sshuser
|
|
```
|
|
|
|
```
|
|
Benutzer »sshuser« wird hinzugefügt …
|
|
Neue Gruppe »sshuser« (1000) wird hinzugefügt …
|
|
Neuer Benutzer »sshuser« (1000) mit Gruppe »sshusr« wird hinzugefügt …
|
|
Persönliche Ordner »/home/sshuser« wird erstellt …
|
|
Dateien werden von »/etc/skel« kopiert …
|
|
Geben Sie ein neues UNIX-Passwort ein:
|
|
Geben Sie das neue UNIX-Passwort erneut ein:
|
|
passwd: password updated successfully
|
|
Changing the user information for sshuser
|
|
Enter the new value, or press ENTER for the default
|
|
Full Name []:
|
|
Room Number []:
|
|
Work Phone []:
|
|
Home Phone []:
|
|
Other []:
|
|
Ist diese Information richtig? [J/N] J
|
|
|
|
```
|
|
|
|
### 3. SSH-Zugang für "Public-Key-Verfahren" konfigurieren
|
|
|
|
## Quellen
|
|
|
|
- [https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/](https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/)
|
|
- [https://developer-blog.net/ssh-port-aendern/](https://developer-blog.net/ssh-port-aendern/)
|
|
- [https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports](https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports)
|