Sharepoint Online – Dokumentenbibliotheken richtig strukturieren mit Metadaten

Bevor man angefangen hat, Dokumente digital abzulegen, wurden sie mittels Aktenordnern strukturiert verwaltet. Das Prinzip ist erprobt und funktioniert (weitgehend). Mit der Einführung digitaler Ablagen, hat man sich keine Umstände gemacht, neue Wege der Strukturierung zu suchen. Man hat einfach das bewährte Verfahren übernommen. Dateisysteme kennen das Konzept der Ordner und in ihnen werden Dateien abgelegt.

Als Beispiel kann ein Unternehmen dienen, das für jeden seiner Kunden einen Aktenorder je Geschäftsjahr führt und darin alle entsprechenden Dokumente sammelt. Im Aktenschrank findet sich daher für jedes Jahr ein Regalbrett und darauf stehen Ordner mit den Aufschriften „Kunde A“, „Kunde B“, usw.

Für eine digitale Ablage in einem Dateisystem wurde eine gleichartige Ordnerstuktur angelegt:

  • 2019
    • Kunde A
    • Kunde B
  • 2020
    • Kunde A
    • Kunde B

Eine naheliegende Wahl, da das neue System sich analog zum alten nutzen lässt. Es erbt allerdings ebenfalls dessen Schwächen. Sollen alle Dokumente von Kunde A zusammengenommen werden, so müssen alle Order des Kunden gesucht werden. Im gegebenen Beispiel ist dies noch vergleichsweise einfach. Weist das System aber mehr Ebenen auf, so wird die Suche deutlich komplizierter.

Was sind Metadaten

In einem Satz: Metadaten sind Daten, die Daten beschreiben.

Aus der alltäglichen Arbeit mit PCs kennt man sie zum Beispiel in Form der Informationen zu Dateien: “Letzte Änderung“, “Angelegt am“, usw. Diese Metadaten werden automatisch vom Betriebssystem des Rechners verwaltet.

In SharePoint existieren diese automatischen Metadaten ebenfalls. Es ist aber möglich einen Schritt weiter zu gehen, und beliebige zusätzliche Metadaten an Dokumente anzufügen. Diese zusätzlichen Informationen können zur Strukturierung und Kategorisierung der Dokumente verwendet werden und erleichtern somit das spätere Wiederfinden.

Dokumentenbibliothek mit Metadaten

Arten von Metadaten

Manuell angelegte Metadaten werden in SharePoint in zwei Gruppen aufgeteilt. Sie sind strukturiert oder unstrukturiert.

Bei strukturierten Metadaten sind Ordnung und mögliche Inhalte im Vorfeld festgelegt worden. Der Benutzer wählt daraus eine passende Ausprägung für ein Dokument aus. Zum Beispiel könnten in einer Dokumentenbibliothek Rechnungen und Mahnungen abgelegt sein. Ein Dokument ist immer eines von beidem. Somit lässt sich festlegen, dass ein Dokument einer „Rubrik“ angehört, die “Rechnung“ oder “Mahnung“ ist.

Unstrukturierte Metadaten weisen keine vorgegebenen Formen auf. Es können Freitextfelder oder Unternehmensstichwörter (Enterprise Keywords in der US Version) sein. Sie finden Verwendung, wenn es nicht möglich ist im Vorfeld mögliche Werte vorzugeben. Sie bieten maximale Freiheit, fördern allerdings damit auch Chaos in den Daten.

Unternehmensstichwörter bieten einen guten Mittelweg. Man kann sie mit den von Twitter bekannten Hash-Tags vergleichen. Sie sind frei definierbar, bieten aber automatische Vervollständigung für bekannte Werte. Außerdem können sie an zentraler Stelle umbenannt oder gelöscht werden. Somit wird trotz aller Freiheit die Konsistenz und Wartbarkeit der Daten sichergestellt.

Beststehende Ordnerstruktur in Metadaten übertragen

Eine bestehende Ordnerstruktur weist üblicherweise mehrere Ebenen auf. Im oben gegebenen Beispiel sind es zwei. Jede Ebene repräsentiert einen Aspekt des Dokuments. In diesem Fall sind es Jahr und Kunde. Jeder dieser Aspekte soll in eine eigene Metadaten-Spalte überführt werden.

Beide Aspekte haben feste Ausprägungen. Die möglichen Werte sind also vorgegeben. Es gibt eine definierte Menge an Jahren und auch Kunden. Diese Mengen können sich natürlich verändern, aber dies wird nicht willkürlich stattfinden, sondern gezielt. Somit bietet es sich an, die Aspekte als strukturierte Metadaten zu modellieren.

Jahr:

  • 2019
  • 2020

Kunde:

  • Kunde A
  • Kunde B

Es wird angenommen, dass Dokumente immer in der tiefsten Ebene der Struktur abgelegt sind und somit immer einem Jahr und einem Kunden zugeordnet sind.

Sollten auch Dokumente in höheren Ebenen abgelegt sein, – Im Beispiel wäre dies direkt in einem Jahr Ordner – so müsste man für alle folgenden Aspekte eine zusätzliche Ausprägung Sonstige einfügen. Alternativ könnte man sie als optionale Angaben konfigurieren.

Dokumentenbibliothek konfigurieren

Zunächst müssen die Metadaten-Spalten definiert werden. Man könnte sie direkt in der Dokumentenbibliothek anlegen. Dies wäre auch der intuitive Weg. Möchte man aber die volle Bandbreite an Möglichkeiten von SharePoint nutzen, sollten die Spalten auf der Ebene der Site erstellt werden. Somit können diese später für ein individuelles „Neues Dokument“ Menü der Bibliothek verwendet werden.

Nur wenn Metadaten-Spalten auf Ebene der Site erstellt wurden, können diese für die Definition von Inhaltstypen verwendet werden. Inhaltstypen an dieser Stelle genauer zu betrachten, würde den Rahmen des Artikel sprengen. Der interessierte Leser sollte aber ohne Probleme weiterführende Informationen im Netz finden können.

Auswahl-Listen anlegen

Die im Beispiel gegebenen Aspekte Kunde und Jahr sollen jeweils eine vorgegebene Menge an Werten zur Auswahl bekommen, sodass der Benutzer diese mittels Dropdown Menü auswählen kann. Ebenso sollen die Mengen der möglichen Werte einfach zu erweitern und pflegen sein.

Um in den Metadaten auf vordefinierte Werte zugreifen zu können, müssen diese zunächst erfasst werden. Grundsätzlich können Auswahllisten direkt bei der Definition einer Website Spalte erstellt werden. Zwecks besserer Möglichkeit zur Pflege, sind Sharepoint Listen aber die bessere Wahl.

Um eine neue Liste anzulegen, wechselt man über das Zahnrad-Symbol in die Ansicht Websiteinhalte.

Dort wählt man Neu und anschließend den Punkt Liste.

Im folgenden Dialog gibt man der neuen Liste einen Namen und bestätigt die Erstellung. Im gegebenen Beispiel, soll die Liste Kunde heißen.

Nach der Bestätigung wird direkt in die Ansicht der Liste gewechselt und es können Einträge über Neu erfasst werden. Passend zum gegebenen Beispiel sollen es Kunde A und Kunde B sein.

Bei Bedarf kann später zu dieser Liste zurückgekehrt werden. Somit lassen sich leicht neue Kunden hinzufügen und bestehende ändern oder löschen.

Für die Jahre Spalte lassen sich die Vorgaben analog in einer weiteren Liste erfassen.

Websitespalten anlegen

Nachdem zunächst die Inhalte der Spalten festgelegt wurden, müssen diese nun erstellt werden.

Die Websitespalten lassen sich bearbeiten, indem man über das Zahnrad-Symbol in die Ansicht Websiteinhalte wechselt. Dort angekommen klickt man auf Websiteeinstellungen.

Aus den Websiteeinstellungen wechselt man zu den Websitespalten.

In dieser Ansicht sind alle bereits bestehenden Metadaten-Spalten der Website aufgeführt. Eine neue Spalte erstellt man über den etwas unscheinbaren Link Erstellen.

Im folgenden Dialog gibt man der neuen Spalte einen Namen. Dieser soll passend zur zugehörigen Liste Kunde sein. Als Informationstyp wählt man Nachschlagen. Dies bedeutet, dass die Inhalte der Spalte aus einer Liste geladen werden sollen.

Weiter unten im Dialog ordnet man die Spalte der vorhandenen Gruppe Benutzerdefinierte Spalten zu. Es kann auch eine neue Gruppe erstellt werden, um mehr Übersicht zu erhalten. Die Liste der bestehenden Websitespalten ist sehr lang und man kann darin leicht den Überblick verlieren. Eine passende Gruppenzuordnung erleichtert das Wiederfinden.

Abschließend wird festgelegt, dass die Informationen aus der Liste Kunde kommen und dort der Inhalt der Spalte Titel verwendet werden soll.

Nach einem Klick auf Ok ist die neue Spalte erstellt. Für die Spalte Jahr wird analog verfahren.

Websitespalten in Dokumentenbibliothek einbinden

Die Metadaten-Spalten wurden auf Ebene der Site erstellt und sollen nun in der Dokumentenbibliothek verwendet werden. Dazu wechselt man erneut in die Ansicht Websiteinhalte. Dort klickt man bei Dokumente auf die drei Punkte und wählt Eigenschaften.

Auf der Eigenschaften Seite scrollt man zum Bereich Spalten. Dort sind alle aktuell genutzten Spalten der Bibliothek aufgeführt. Bei einer frischen Dokumentenbibliothek sind dies die vom System automatisch befüllten Metadaten.

Um die zuvor erstellten Website-Spalten hinzuzufügen, klickt man auf Aus vorhandenen Websitespalten hinzufügen.

Im folgenden Dialog wählte man zunächst die Gruppe der hinzuzufügenden Spalten. In diesem Bespiel ist es Benutzerdefinierte Spalten. Dann wählt man die Spalten Jahr und Kunde aus und klickt hinzufügen. Mit Ok wird der Dialog bestätigt.

Die zwei Spalten sind nun zur Dokumentenbibliothek hinzugefügt und in der Ansicht der Bibliothek sichtbar.

Unternehmensstichwörter aktivieren

Um neben den strukturierten Metadaten auch die eingangs beschriebenen Tags nutzen zu können, muss für die Dokumentenbibliothek die Unterstützung für Unternehmensstichwörter aktiviert werden.

Zunächst ruft man erneut die Einstellungen Ansicht der Dokunentenbibliothek auf (siehe oben). Dort wählt man den Punkt Einstellungen für die Unternehmensmetadaten und -stichwörter.

Dort setzt man den Haken und bestätigt mit Ok.

Die Unternehmensstichwörter sind nun aktiviert. Sie werden aber noch nicht in der Bibliothek angezeigt. Um dies zu ändern, wechselt man in die Bibliothek und klickt auf Spalte hinzufügen -> Spalten ein-/ausblenden.

Im Folgenden Dialog setzt man den Haken bei Unternehmensstichwörter und Übernimmt die Änderung.

Nun sind alle gewünschten Metadaten eingerichtet und können verwendet werden.

Metadaten nutzen

Nachdem die Dokumentenbibliothek mit strukturierten sowie unstrukurierten Metadaten-Spalten versehen wurde, kann mit der Nutzung begonnen werden. Im folgenden sollen zwei Anwendungsfälle betrachtet werden: Anlegen und Suchen von Dokumenten.

Dokumente mit Metadaten anlegen

Wurde ein neues Dokument hochgeladen oder erstellt, hat es zunächst keine der selbst definierten Metadaten.

Um die Metadaten zu bearbeiten, markiert man zunächst das Dokument, indem man links neben dem Dokumenten-Typ Icon ein Häkchen setzt. Dann klickt man rechts oben auf das Info Icon.

Es öffnet sich eine Übersicht der Dokumenteneigenschaften. Scrollt man in dieser etwas nach unten, werden auch die selbst definierten Metadaten-Spalten angezeigt.

Ein Klick auf den Text unterhalb von Jahr und Kunde, öffnet jeweils ein Dropdown-Menü mit den zuvor festgelegten möglichen Werten. Wählt man einen Wert aus, wird dieser direkt gespeichert.

Ein Klick auf den Text unterhalb von Unternehmensstichwörter öffnet ein Freitext-Feld. Man kann darin einfach die gewünschten Tags eingeben und jedes mit Enter bestätigen. Sollten schon zuvor Tags an anderen Dokumenten vergeben worden sein, wird man bei der Eingabe mit automatischer Vervollständigung unterstützt.

Dokumente suchen

Der direkte Weg, um über die Metadaten Dokumente zu suchen, ist die Verwendung der Filterfunktion. In der Kopfzeile der Dokumentenbibliothek können für jede Spalte Filer erstellt werden. Man klickt dafür auf das Pfeil nach unten Icon neben der Spaltenüberschrift und folgt dem Dialog.

Üblicherweise möchte man regelmäßig Zugriff auf den selben Satz gefilterter Dokumente haben. Im gegebenen Beispiel könnten es alle Dokumente bezüglich Kunde A sein.

Hat man die Ansicht passend gefiltert, kann man eine Sicht abspeichern. Dazu klickt man neben Alle Dokumente auf den Pfeil nach unten und wählt Ansicht speichern unter. Im folgenden Dialog gibt man der Sicht einen Namen und bestätigt.

Nun kann man zwischen Alle Dokumente und der neuen Sicht umschalten. Da die Sicht eine eigene Adresse hat, können auch Links im SharePoint angelegt werden, die direkt auf diese Sicht verweisen.

Wie geht es weiter?

Im Lauf der Benutzung der Dokumentenbibliothek wird sich ein Bestand an Metadaten aufbauen. In regelmäßigen Abständen kann geprüft werden, ob sich in den vergebenen Tags Muster für strukturierte Metadaten finden.

Ein Beispiel:
Es wird festgestellt, dass jedes Dokument entweder mit dem Tag eingehend oder ausgehend versehen wurde. Diese beiden Werte lassen sich in einen Aspekt abstrahieren: Richtung. Es ist also naheliegend, die Dokumentenbibliothek mit einer entsprechenden, neuen Metadaten-Spalte zu versehen. Diese lässt nur einen der beiden Werte zu.

Nach Erstellung der neuen Spalte, müssen die Tags eingehend und ausgehend entfernt werden und der jeweilige Wert als Richtung eingetragen werden. Bei der Bewältigung dieser Aufgabe kann Power Automate (vormals Flow) helfen.

Zusammenfassung

In diesem Artikel wurde die Überlegenheit der Strukturierung von Dokumenten mittels Metadaten gegenüber Ordnerstrukturen dargelegt. Darüber hinaus wurde ein mögliches Verfahren zur Überführung bestehender Strukturen und der anschließenden Nutzung und Pflege der neuen Struktur gezeigt.

Struktur vor der Umstellung
Struktur nach der Umstellung

Vielen Dank für Anregungen zum Inhalt geht an: @TKarafilov

SSH unter MacOS leicht gemacht

Um von einem Mac aus einen Linux Server zu verwalten, wird üblicherweise SSH eingesetzt. Die Anmeldung via Passwort kann bei häufiger Benutzung durchaus als nervig und unhandlich empfunden werden. Um dem zu begegnen, kann eine Anmeldung mittels public key authentication eingesetzt werden.

In diesem Artikel soll gezeigt werden, wie diese Form der Anmeldung auf Seiten des Mac eingerichtet und über MacOS Updates hinweg unkompliziert gehalten werden kann.

Voraussetzung ist dabei, dass der SSH Daemon des Servers für public key authentication konfiguriert wurde. Zumindest bei Debian und Ubuntu ist dies direkt ab Installation vorkonfiguriert.

Schlüsselpaar erstellen

Sollte für den MacOS Benutzer noch kein RSA Schlüsselpaar existieren, muss dieses zunächst erstellt werden. Dies ist der Fall, wenn im Verzeichnis ~/.ssh/ nicht die Dateien id_rsa und id_rsa.pub vorhanden sind.

Die Erzeugung eines Schlüsselpaares wird mit folgendem Befehl gestartet:

ssh-keygen

Im folgenden Dialog können Informationen zum Besitzer des Schlüsselpaares angegeben werden. Die Schlüssel können auch mit einem Passwort gesichert werden. Ob man dabei Komfort oder Sicherheit bevorzugt, muss jeder selbst entscheiden.

Schlüssel auf Server übertragen

Um eine Anmeldung beim Server durchführen zu können, muss der öffentliche Schlüssel des Paars auf den Server übertragen werden. Dies kann mit folgendem Befehl durchgeführt werden. Dabei sind user und host durch den Benutzernamen und die URL des Servers zu ersetzen.

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

Nach erfolgreicher Übertragung des Schlüssels kann eine Einwahl via SSH ohne Angabe des Benutzerkennworts erfolgen. MacOS wird dabei allerdings nach dem Kennwort des lokalen Benutzers fragen.

Schlüssel in die MacOS keychain eintragen

Um die Kennwortabfrage beim Verbinden zu “verhindern”, kann das RSA Schlüsselpaar zur MacOS keychain hinzugefügt werden. Darin eingetragene Schlüssel stehen dem Benutzer nach Anmeldung am Mac automatisch zur Verfügung und werden bei Bedarf direkt verwendet.

Folgender Befehl fügt das Schlüsselpaar der keychain hinzu:

ssh-add -K ~/.ssh/id_rsa

Neustarts des Geräts führen dazu, dass die RSA Schlüssel aus der keychain entfernt werden. Daher muss der Befehl nach jedem Start erneut ausgeführt werden.

Es wurde gezeigt, wie der SSH Zugriff von einem Mac zu einem Linux Server deutlich komfortabler gestaltet werden kann. Aus Gründen der Sicherheit sollte dieses Verfahren aber nur für zugriffsbeschränkte Benutzer auf dem Server eingesetzt werden. Eine direkte Anmeldung als root sollte nicht ermöglicht werden. Insbesondere, wenn mittels MacOS keychain sämtliche Passwortabfragen ersetzt wurden.

Exchange Online – Zusätzliche Domain mit Mail-Adresse zur Weiterleitung einrichten

In diesem Artikel soll gezeigt werden, wie man in einem Office 365 Tenant mit Exchange Online eine zusätzliche Domain mit einer Mail-Adresse und eine Weiterleitung in ein bestehendes Postfach einrichtet.

Vorausgesetzt ist, dass die neue Domain bei einem Registrar der Wahl gekauft wurde und dass ihre DNS Einträge frei konfiguriert werden können.

Neue Domain mit O365 verknüpfen

Die Konfiguration von Domains wird im Office 365 AdminCenter durchgeführt. Es kann über das Waffel Menü aufgerufen werden. Dort angekommen wechselt man in die Rubrik Setup -> Domänen. Es sollte eine Liste der bereits eingerichteten Domänen angezeigt werden.

Die Schaltfläche „Domain hinzufügen“ startet den Dialog zur Einrichtung. Als erstes muss die neue Domain ohne führendes „www.“ eingegeben und bestätigt werden.

Um zu verhindern, dass beliebige Domains mit einem Office 365 verknüpft werden, wird als nächstes geprüft, ob man tatsächlich der Besitzer der Domain ist. Dafür müssen die DNS Einträge der Domain in der vorgegebenen Form angepasst werden. Es sollen ein TXT und ein MX Eintrag gesetzt werden. Um dies zu tun, muss üblicherweise die Webseite des Domain-Registrars verwendet werden. Eine genaue Beschreibung dafür, sollte der Registrar zur Verfügung stellen. Sind die Einträge gesetzt, kann im Office 365 AdminCenter die „Überprüfen“ Schaltfläche betätigt werden.

Unter Umständen wird eine Fehlermeldung angezeigt. Die DNS Einträge könnten nicht überprüft werden. In diesem Fall, wurden die neu gesetzten Einträge noch nicht verbreitet. Die Lösung ist, nach kurzer Pause (1 Minute) erneut auf „Überprüfen“ zu klicken.

In der Maske „Ihre Onlinedienste einrichten“ muss ausgewählt werden, ob die DNS Einstellungen automatisch oder manuell vorgenommen werden sollen. Mit der automatischen Methode habe ich mich noch nicht befasst und ich vermute, dass diese nicht bei jedem Domain Registrar funktioniert. Daher ist in diesem Fall die manuelle Variante zu wählen.

Da im Rahmen dieses Artikels nur das Einrichten von Mail Adressen im Fokus steht, ist in „Auswählen Ihrer Onlinedienste“ nur die Option „Exchange“ auszuwählen. Sollte zu einem späteren Zeitpunkt die neue Domäne auch für Skype verwendet werden sollen, kann die Konfiguration nachgeholt werden. Es handelt sich dabei um zusätzliche DNS Einträge.

Analog zur früheren Maske „Domäne überprüfen“ müssen erneut DNS Einträge angepasst werden. In diesem Fall sind es jeweils ein MX, CNAME und TXT Eintrag. Die zuvor angelegten zwei MX und TXT Einträge können gelöscht werden. Ebenfalls kann es wieder beim Bestätigen zu Fehlern durch noch nicht erfolgte Verbreitung der neuen Einträge kommen. Die Lösung ist auch dieses Mal ein wenig zu warten und es erneut zu versuchen.

Die Domain ist nun für die Nutzung im Exchange Online eingerichtet.

Empfänger erstellen

Um Mails an eine bestimmte Adresse empfangen zu können, muss diese zunächst bekannt gemacht werden. Andernfalls wird der Exchange eingehende Mails direkt abweisen.

Die Einrichtung erfolgt im Exchange Admin Center. Man öffnet es über den letzten Punkt der Navigation im AdminCenter. Dort angekommen, wechselt man in die Rubrik Empfänger -> Freigabe.

Das Plus Icon öffnet den Dialog zum Anlegen des neuen Empfängers. Genau genommen handelt es sich dabei um ein freigegebenes Postfach.

Es muss ein Anzeigename angegeben und die Mail-Adresse gewählt werden. Der Anzeigename dient der Identifikation in der Liste bestehender Postfächer. Unter „Benutzer“ muss nichts eingetragen werden, da niemand direkt auf das Postfach zugreifen soll. Das Feld „Alias“ muss ausgefüllt werden, falls der Teil der Mail Adresse vor dem @ mehrfach im Tenant existiert. Beim Verlassen des Dialogs über „Speichern“ kann der Hinweis auf das Fehlen von Benutzern ignoriert werden.

Der Empfänger ist nun eingerichtet und es können Mails empfangen werden.

Weiterleitung einrichten

Da niemand Zugriff auf das neue Postfach hat, soll dafür gesorgt werden, dass alle eingehenden Mails an einen anderen Empfänger weitergeleitet werden. Dazu muss im Exchange Admin Center in die Rubrik Nachrichtenfluss gewechselt werden

Ein Klick auf das Plus Icon -> „Neue Regel erstellen…“ startet den Dialog zur Einrichtung einer neuen Regel.

Das Feld Name kann übersprungen werden. Es füllt sich selbst passen aus, wenn man das folgende Dropdown ausfüllt.

Unter „Diese Regel anwenden, wenn…“ wählt man die Option „Der Empfänger ist…“. Im daraufhin erscheinenden Dialog trägt man im Textfeld neben „Namen überprüfen“ die zuvor neu angelegte Mailadresse ein und bestätigt mit Enter.

Anschließend wählt man unter „Folgendermaßen vorgehen…“ die Option „Die Nachricht umleiten an…“ und wählt im erscheinenden Dialog den Empfänger aus

Ein Klick auf „Speichern“ schließt die Einrichtung der Regel ab.

Zusammenfassung

In diesem Artikel wurde gezeigt, wie eine zusätzliche Domain in Office 365 eingerichtet werden kann, so dass diese zum Empfang von Mails bereit steht. Darüber hinaus wurde die Anlage neuer Empfänger und die Erstellung von Regeln zur Weiterleitung eingehender Mails beschrieben. Somit steht der Nutzung vollständig individualisierter Mail-Adressen nichts mehr im Weg.

Vom blanken Server zum Docker Host

In diesem Artikel soll gezeigt werden, wie man ausgehend von einem Server mit frisch installiertem Debian Stretch einen Docker Host aufsetzt. Es besteht kein Anspruch auf Vollständigkeit in Bezug auf Sicherheit und Wartbarkeit. Ich lasse mich aber gerne eines Besseren belehren und werde den Text bei neuen Erkenntnissen anpassen.

Den Server aufsetzen

Der Ausgangspunkt

Den Anfang macht ein frisch installiertes Debian Stretch. Wahlweise kann auch Ubuntu Server zum Einsatz kommen. Die nötigen Schritte sollten weitestgehend gleich sein.

Es wurde ein Passwort für den root Benutzer vergeben und SSH ist über den Port 22 erreichbar.

Es besteht eine SSH Verbindung zum Server als root.

Locale

Auf einem frischen Debian Stretch ist die locale nicht gesetzt. Dies führt zu Warnungen beim Installieren von Paketen.

$ dpkg-reconfigure locales

de-DE.UTF-8 sollte im folgenden Dialog schon vorausgewählt sein. Nach der Bestätigung mit Enter ist de-DE.UTF-8 erneut als Standard zu wählen. Eine weitere Bestätigung mit Enter startet die Generierung der locale. Anschließend muss das System neu gestartet werden.

$ reboot

Editor

Zu Anfang ist auf dem System kein Editor installiert. Folgende Befehle installieren vim. Es kann aber auch ein beliebiger anderer Editor verwendet werden.

$ apt-get update
$ apt-get install vim

Informationen zur Benutzung von vim sind unter https://www.selflinux.org/selflinux/html/vim.html zu finden.

SSH Zugang

Über das Internet erreichbare SSH Dienste mit Standard Konfiguration werden massiv mit automatisierten Brute Force Angriffen bedacht. Dabei wird üblicherweise versucht, eine Anmeldung mit dem root Benutzer durchzuführen. Eine Konfiguration abseits des Standards ist eine einfache Methode dieses Problem zu lösen.

  • Die Anmeldung als root soll deaktiviert werden.
  • Der SSH Dienst soll nicht über Port 22 erreichbar sein.

Zunächst muss ein neuer Benutzer angelegt werden. Über diesen sollen zukünftige Zugriffe via SSH erfolgen.

$ adduser maxmustermann

maxmustermann ist dabei durch den Namen des neuen Benutzers zu ersetzen.

Es wird ein Dialog geführt, der alle benötigten Daten für den neuen Benutzer erfasst. Dabei ist ein Passwort zu vergeben. Dieses sollte dem üblichen Muster für sichere Passwörter entsprechen (lang und großer Zeichenraum). Ein Passwort-Manager (z.B. KeePass oder 1Password) hilft beim Erstellen und Verwalten.

Sollte das Passwort für root nicht dem beschriebenen Muster entsprechen, kann es folgendermaßen geändert werden:

$ passwd

Nachdem der Benutzer angelegt wurde, kann der SSH Dienst in der zugehörigen Konfigurationsdatei /etc/ssh/sshd_config konfiguriert werden.

$ vim /etc/ssh/sshd_config

Dies öffnet die Datei im vim Editor. Nun müssen zwei Zeilen angepasst werden.

Port 22

Der Port sollte auf einen Wert im Bereich oberhalb von 1024 gesetzt werden.

PermitRootLogin yes

Der Wert muss auf no gesetzt werden.

Abschließend startet man den SSH Dienst neu, um die geänderte Konfiguration zu laden.

$ /etc/init.d/ssh restart

Der SSH Dienst wurde gegen automatisierte Angriffe abgesichert. Neue Anmeldungen erfolgen auf dem neuen Port und dem neuen Benutzer. Nach erfolgter Anmeldung kann mittels su auf den root Benutzer gewechselt werden.

Firewall

Es soll ein einfaches Firewall Script mittels iptables erstellt werden. Dieses soll beim Systemstart geladen werden und erlaubt eingehende Verbindungen ausschließlich für den SSH Dienst.

$ mkdir /opt/firewall
$ cd /opt/firewall
$ touch iptables.sh
$ chmod -x iptables.sh

Dies legt eine leere Datei unter /opt/firewall/iptables.sh an. Folgenden Inhalt soll die Datei bekommen:

#!/bin/bash

IPT="/sbin/iptables"
PUB_IF="eth0"
 
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
modprobe ip_conntrack
 
#unlimited
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
 
# DROP all incomming traffic
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
 
# Block sync
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Drop Sync"
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP
 
# Block Fragments
$IPT -A INPUT -i ${PUB_IF} -f  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i ${PUB_IF} -f -j DROP
 
# Block bad stuff
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP
 
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP # NULL packets
 
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
 
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS
 
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -j DROP # FIN packet scans
 
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
 
# Allow full outgoing connection but no incomming stuff
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Allow ssh
$IPT -A INPUT -p tcp --destination-port 22 -j ACCEPT

# Allow ICMP
$IPT -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Do not log smb/windows sharing packets - too much logging
$IPT -A INPUT -p tcp -i ${PUB_IF} --dport 137:139 -j REJECT
$IPT -A INPUT -p udp -i ${PUB_IF} --dport 137:139 -j REJECT
 
# log everything else and drop
$IPT -A INPUT -j LOG
$IPT -A FORWARD -j LOG
$IPT -A INPUT -j DROP

exit 0

Sollte das primäre Netzwerkinterface nicht eth0 sein, muss die Zeile PUB_IF="eth0" entsprechend angepasst werden.
Im Bereich #Allow ssh ist der Port 22 entsprechend des vorherigen Kapitels anzupassen.

Um das Script beim Systemstart automatisch auszuführen, muss die Datei /etc/rc.local angelegt und ausführbar gemacht werden.

$ touch /etc/rc.local
$ chmod +x /etc/rc.local

Der Inhalt soll folgendermaßen aussehen:

#!/bin/sh -e

sh /opt/firewall/iptables.sh

exit 0

Ab dem nächsten Neustart des Servers werden ausschließlich SSH Verbindungen zugelassen. Für den Betrieb von Docker sind keine weiteren Anpassungen notwendig. Der Docker Dienst erstellt automatisch iptables Regeln beim Start eines Containers. Wird der Container gelöscht, werden die zugehörigen iptables Regeln ebenfalls entfernt.

Automatische Updates

Um den Server gegen mögliche Angriffe abzusichern, ist es wichtig, die installierte Software auf aktuellem Stand zu halten. Es ist daher ratsam, in regelmäßigen Abständen Aktualisierungen durchzuführen.

Um die Administration des Servers zu vereinfachen, kann die Installation von Updates automatisiert werden. Folgender Befehl installiert die notwendigen Pakete:

$ apt-get install unattended-upgrades apt-listchanges

Anschließend sollte die Datei /etc/apt/apt.conf.d/50unattended-upgrades bearbeitet werden. Bei zwei Zeilen müssen die Kommentar-Zeichen // entfernt werden.

// Unattended-Upgrade::Mail "root";
// Unattended-Upgrade::Automatic-Reboot-Time "02:00";

Die erste bewirkt, dass Informationen zu erfolgten Installationen an das interne Postfach von root gesendet werden. Die zweite legt den Zeitpunkt für ggf. nötige Neustarts fest.

Es wird nun täglich geprüft, ob Sicherheitsupdates verfügbar sind und diese ggf. automatisch installiert. Weitere Details zur Konfiguration sind unter https://wiki.debian.org/UnattendedUpgrades zu finden.

Docker

Docker kann mittels des Debian Paket Managers apt installiert werden. Das dafür benötigte Repository ist von Haus aus nicht in apt registriert und muss daher zunächst bekanntgegeben werden.

$ apt-get update
$ apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

Das Repository ist nun in apt registriert und Docker kann installiert werden.

$ apt-get update
$ apt-get install docker-ce

Um den Zugriff auf die Docker Shell Befehle auf root zu beschränken, müssen noch die Ausführungs-Rechte für sonstige Benutzer entfernt werden.

$ chmod o-x /usr/bin/docker*

Abschließend muss noch das automatische Starten von Docker beim Systemstart eingerichtet werden.

$ systemctl enable docker

Docker wurde installiert und startet automatisch beim Serverstart. Weitere Informationen zur Docker Installation sind unter https://docs.docker.com/install/linux/docker-ce/debian/ zu finden.

git (optional)

Eine Installation von git ist für den Betrieb des Docker Host nicht notwendig. Da aber mit steigender Anzahl genutzter Container auch die Menge von Scripts zur Wartung steigt, ist es durchaus sinnvoll diese in einem git Repository zu speichern. Neben der Versionierung bietet sich der Vorteil die Scripts auf einem Desktop System mit „schöneren“ Editoren bearbeiten zu können.

$ apt-get install git-core

Anschließend ist der git Benutzer zu konfigurieren. Name und Email Adresse müssen natürlich entsprechend angepasst werden.

$ git config --global user.name "Max Mustermann"
$ git config --global user.email max@mustermann.com

Zum Schluss kann das git Repository mit den Scripts geklont werden.

$ cd /opt
$ git clone https://url-to-repo/scripts-repo.git docker-scripts

Dies lädt das Repository in das Verzeichnis /opt/docker-scripts. Die URL ist dabei entsprechend anzupassen.

$ cd /opt/docker-scripts
$ git pull

Hierdurch werden die Scripts auf den aktuellen Stand gebracht.

Betrieb und Wartung

Backups der Container Volumes

Angenommen es existiert ein Container mit dem Namen my-app und es ist für ihn ein Volume my-app-config angelegt worden. In dem Volume sind Daten abgelegt, die regelmäßig gesichert und ggf. zurückgesetzt werden sollen. Des weiteren existiert das Volume backup-data, das als Ziel für Backups dient.

Alternativ kann anstatt von backup-data ein Verzeichnis auf dem Host eingebunden werden. Der Parameter im Befehl würde dann dem Muster -v /data/backups:/target folgen.

Folgendes Script packt alle Daten im Volume my-app-config in ein .tar.gz Archiv und verschiebt dieses in das eingebundene /target Verzeichnis:

#!/usr/bin/env bash
docker stop my-app
docker run --rm --name my-app-backupdata -v my-app-config:/source -v backup-data:/target debian:latest /bin/sh -c "cd /source && tar -zcvf my-app-config.backup.tar.gz ./* && mv ./my-app-config.backup.tar.gz /target"
docker start my-app

Das Wiederherstellen der Daten mit vorherigem Löschen des Inhalts von my-app-config wird folgendermaßen durchgeführt:

#!/usr/bin/env bash
docker stop my-app
docker run --rm --name my-app-backupdata -v my-app-config:/target -v backup-data:/source debian:latest /bin/sh -c "rm -r -f /target/* && cp /source/my-app-config.backup.tar.gz /target && cd /target && tar -zxvf ./my-app-config.backup.tar.gz && rm ./my-app-config.backup.tar.gz"
docker start my-app

Das Backup Script kann mittels cron regelmäßig ausgeführt werden.

Container aktualisieren

Zusätzlich zu den Annahmen des vorherigen Abschnitts soll gelten, dass ein Docker Image my-app existiert und das Script createcontainer.sh im selben Verzeichnis liegt. Dieses Script beinhaltet die nötigen Befehle, um den Container aus dem Image mit dem Tag latest zu erstellen.

Das folgende Script bringt den Container auf den neusten Stand. Dabei wird das alte Image unter dem Tag rollback gesichert. Ebenfalls wird der Inhalt des Volume my-app-config gesichert.

#!/usr/bin/env bash
docker rmi my-app:rollback
docker tag my-app:latest my-app:rollback
docker pull my-app:latest
docker stop my-app
docker rm my-app
docker run --rm --name my-app-backupdata -v my-app-config:/source -v backup-data:/target debian:latest /bin/sh -c "cd /source && tar -zcvf my-app-config.rollback.tar.gz ./* && mv ./my-app-config.rollback.tar.gz /target"
sh ./createcontainer.sh
docker start my-app

Sollte die neue Version des Image Probleme bereiten, kann mit folgendem Script ein rollback zum vorherigen Zustand durchgeführt werden. Dabei wird die zuvor gesicherte Version des Image wiederhergestellt und der Inhalt von my-app-config zurückgespielt.

#!/usr/bin/env bash
docker stop my-app
docker rm my-app
docker rmi my-app:latest
docker tag my-app:rollback my-app:latest
docker rmi my-app:rollback
docker run --rm --name my-app-backupdata -v my-app-config:/target -v backup-data:/source debian:latest /bin/sh -c "rm -r -f /target/* && cp /source/my-app-config.rollback.tar.gz /target && cd /target && tar -zxvf ./my-app-config.rollback.tar.gz && rm ./my-app-config.rollback.tar.gz"
sh ./createcontainer.sh
docker start my-app

Zusammenfassung

Es wurde gezeigt, wie ausgehend von einem frisch installierten Debian Stretch ein Docker Host aufgesetzt werden kann. Dieser wurde gegen gängige automatisierte Angriffe abgesichert. Außerdem wurden Scripts zur Sicherung von Daten und zum Updaten von Containern erstellt.