Ubuntu Server 14.04 konfigurieren und absichern
Einleitung
Um einen 4 Jahre alten Server mit Dual-Core-Atom-Prozessor zu ersetzen musste ich mir was einfallen lassen weil das Budget von 250 Euro nicht überschritten werden sollte. Im Server waren 2x320GB Systemfestplatten und 2x2TB Datenfestplatten verbaut. Dieser diente hauptsächlich dazu Backups von unserem Fileserver bereitzuhalten und den Kalenderserver DaviCal zu hosten. Der alte Server sollte einem anderen Verwendungszweck zugeführt werden.
Ich habe mir also verschiedene gebrauchte Server bei verschiedenen Anbietern angeschaut um kostengünstig ein Schnäppchen zu schießen. Leider erwies sich das als wenig erfolgreich weil diese Server alle preislich über 250 Euro waren oder nur eine SAS Schnittstelle anstatt SATA boten. Für knapp 400 Euro bekommt man schon einen Einstiegsserver bei thomas-krenn.com.
Hardware
Also entschied ich mich mal nach preiswerten gebrauchten Business-PCs zu schauen. Bei One.de wurde ich fündig und ergatterte folgenden PC für knapp 60 Euro.
- Fujitsu Esprimo P5720
- 2 GB RAM
- Intel Dual Core E2160
- 80GB SATA Festplatte
Zusätzlich habe ich noch eine „2TB Western Digital Red“ für knapp 100 Euro eingekauft und die 80 GB Festplatte hiermit ersetzt. Demnächst werde ich noch eine zweite 2TB Festplatte aus der Blue Serie ordern und ein Software-Raid einrichten.
Installation
Nach einer Standardinstallation über die gesamte Festplatte habe ich noch den SSH-Server zum installieren ausgewählt und automatische Upgrades.
Nach erfolgtem Login habe ich erstmal den Root-Login durch ein „sudo passwd root“ aktiviert.
Ein Login über SSH habe ich erstmal deaktiviert gelassen.
Danach folgte erstmal ein Update des Systems mit:
apt-get update && apt-get upgrade
Netzwerkkonfiguration
Anstatt die IP über DHCP zu beziehen habe ich dem System eine statische IP in „/etc/network/interfaces“ zugewiesen und den Server neu gestartet. Ein einfaches „/etc/init.d/networking restart“ bzw. ein „ifup eth0“ hätte es wahrscheinlich auch getan.
auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 network 192.168.1.0 gateway 192.168.1.1 dsn-nameservers 8.8.8.8 8.8.4.4
Zusätzliche Pakete
Folgende Pakete gehören bei mir zu der Grundausstattung:
apt-get install mc p7zip-full htop
Mein Lieblingseditor auf der Konsole ist „mcedit“ welcher im Midnight-Commander-Paket enthalten ist.
Backupserver und SSH Zugriff
Der Server soll primär jede Nacht Backups eines Samba-Servers bis zu 50 Tage rückwirkend vorhalten.
Zu diesem Zweck habe ich ein Skript geschrieben welches „rsync“ nutzt.
Um auf dem Server ohne Passwort sonder mit Key über SSH Zugriff zu bekommen muss zuallererst erin RSA-Schlüssel für root generiert werden.
ssh-keygen -b 4096
Ein Passwort sollte hier nicht gesetzt werden damit bei den Backupskripten keins abgefragt wird.
Ob ich jetzt in einem Skript das Passwort des Schlüssels bzw. des Servers angebe und der Server dann geknackt wird ist letztendlich Wurst.
Sollte jemand Zugriff auf das System bekommen hat er auch Zugriff auf Schlüssel oder Passwörter.
Um den öffentlichen Schlüssel jetzt auf den Server zu übertragen hilft folgendes:
ssh-copy-id root@191.168.1.10
Nachdem das Passwort des Servers eingegeben wurde ist auch der Schlüssel übertragen.
Um das ganze zu checken kann man sich ja einfach mal auf dem Server einloggen:
ssh root@192.168.1.10
Und schon sollte man ohne Passworteingabe den Prompt zu sehen bekommen
Dash und Bash
Um den Login etwas komfortabler zu gestalten wechseln wir als allererstes von der Dash zu Bash.
sudo dpkg-reconfigure dash
Und bei der Auswahl von Dash zur Systemshell Nein auswählen. Danach wird Bash als Standardshell eingetragen.
Kalenderserver DAViCal
Um DAViCal zu installieren habe ich folgende Pakete eingespielt die eine ganze Latte an zusätzlichen Paketen als Abhängigkeit hatten wie z. B. Apache oder Postgres.
apt-get install davical davical-doc php5-curl
Als PHP-Version ist bei Ubuntu 14.04 die Version 5.5 dabei die ich durch die 5.6 austauschen werde. Ich hoffe das PHP 7 bald brauchbar wird und meinen alten Code unterstützt. Das gibt mit Sicherheit noch einen gewaltigen Performanceschub.
Normalerweise sollte eine Standardinstallation schon die nötigen Dateien für DAViCal zur Verfügung stellen. Bei mir war das natürlich nicht der Fall. Die Konfigurationsdatei für Apache davical.conf war nicht vorhanden.
Kurzum habe ich diese unter /etc/apache2/conf-available/ mit folgendem Inhalt angelegt:
<IfModule mod_ssl.c> Alias /davical /usr/share/davical/htdocs <Directory /usr/share/davical/htdocs> Require all granted Options Indexes DirectoryIndex index.php php_flag magic_quotes_gpc Off php_flag register_globals Off </Directory> </IfModule>
Danach noch ein Symlink in die conf-enabled und ein Neustart von Apache:
ln -s /etc/apache2/conf-available/davical.conf /etc/apache2/conf-enabled/davical.conf apachectl graceful
Somit ist DAViCal schonmal per Apache zugänglich. Für die Konfiguration muss jetzt die Datei config.php im Verzeichnis /etc/davical/ mit folgendem Inhalt angelegt werden:
<?php $c->default_locale = "de_DE"; $c->pg_connect[] = 'dbname=davical user=davical_app'; ?>
Jetzt die Datei noch ausführbar machen und fertig:
chmod 644 /etc/davical/config.php
PostgreSQL
DAViCal braucht als Datenbankbackend PostgreSQL. Hierfür legen wir die zwei Benutzer davical_app und davical_dba an.
sudo -u postgres createuser davical_app sudo -u postgres createuser davical_dba
In der Datei:
/etc/postgresql/VERSION/main/pg_hba.conf
müssen jetzt noch die Zugriffsrechte für die beiden Datenbankbenutzer eingerichtet werden indem am Anfang der Datei folgendes eingefügt wird:
# TYPE DATABASE USER CIDR-ADDRESS METHOD ## DAViCal darf sich lokal OHNE passwort anmelden. local davical davical_dba trust local davical davical_app trust
Jetzt noch den Datenbankserver neu starten und die Datenbank anlegen:
sudo /etc/init.d/postgresql restart sudo -u postgres -s /usr/share/davical/dba/create-database.sh
Hierdurch wird dann auch das Passwort des DAViCal-Admin-Users gesetzt. Dies auf jeden Fall aufschreiben und gut verwahren. Dies kann man später auch noch im DAViCal-Backend ändern.
Um jetzt von dem alten DAViCal-Server ein Datenbankbackup zu ziehen wird folgender Befehl benötigt:
sudo -u postgres pg_dump -Fc davical > davical.pgdump
Zum einspielen des Backups:
sudo -u postgres drobdb davical sudo -u postgres createdb --owner davical_dba --encoding UTF8 --template0 davical sudo -u postgres pg_restore -Fc -d davical davical.pgdump
Backups vom alten Server
Um Dateien vom alten Server zu sichern benutzen wir rsync
rsync -avbe ssh root@192.168.1.10:/backup/backupordner_auf_altem_server /backupordner_auf_neuem_server/
_to be continued_