Inhaltsverzeichnis

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.

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_