Kategorien
Security Verschlüsselung

Zertifikate, SSL, TLS und HTTPS – ein Crashkurs

Wir sind an dem Thema SSL, TLS, https, Zertifikate und Verschlüsselungsprotokolle nun so oft „vorbeigeschrammt“, dass ich mal näher darauf eingehen muss. Leider ist das wie so oft „nicht so einfach“ und falls Sie sich noch nie wirklich mit dem Thema beschäftigt haben, sollten Sie einen Moment innehalten und versuchen die Zusammenhänge zu verstehen. Hier ein kurzer Crashkurs mit wichtigen Begriffen und kurzen Erklärungen.

SSL/TLS

SSL ist die Abkürzung für Secure Sockets Layer und ist ein Verschlüsselungsprotokoll für die Datenübertragung im Internet. Bis zur Version 3.0 heisst es SSL, alle Versionen danach heissen TLS (Transport Layer Security). Diese Umbenennung fand schon im Jahr 1999 statt. Die Version TLS 1.0 entspricht der Version SSL 3.1. Die aktuelle Version von TLS ist 1.2.

In Zukunft und im weiteren Verlauf dieses Blogeintrags werde ich die Bezeichnung TLS verwenden.

Verschlüsselungsprotokoll und Schlüsselverteilungsproblem

Ein Verschlüsselungsprotokoll ist eine besondere Art des Netzwerkprotokolls. Eine grosse Herausforderung bei allen Verschlüsselungsverfahren ist das Schlüsselverteilungsproblem. Beide Teilnehmer müssen einen Schlüssel besitzen, um die Nachrichten zu ver- bzw. zu entschlüsseln.

Die einzige Möglichkeit verschlüsselt zu kommunizieren war lange Zeit die Übersendung des Schlüssels per Boten oder eben ihn persönlich zu überbringen!

Um diesen Aufwand zu vermeiden wurden in den siebziger Jahren des letzten Jahrhunderts symetrische und asymetrische Verschlüsselungsverfahren entwickelt.

Symmetrisches Verfahren

Beim symmetrisches Verfahren kommunizieren beide Partner mit demselben Schlüssel. Die Schlüssel müssen also sicher übertragen werden.

Asymmetrisches Verfahren

Beim asymetrischen Verfahren, auch Public-Key Verfahren genannt, erzeugt ein Benutzer ein Schlüsselpaar, das aus einem geheimen (private) und einem öffentlichen (public) Schlüssel besteht. Der öffentliche Schlüssel kann „öffentlich“ ausgetauscht werden. Er ermöglicht es jedem, Daten für den Inhaber des privaten Schlüssels zu verschlüsseln. Nur der Besitzer des geheimen Schlüssels kann diese Daten wieder entschlüsseln.

Damit entfällt die „komplizierte, geheime“ Übertragung des Schlüssels. Der öffentliche Schlüssel kann bedenkenlos geteilt werden werden und das Schlüsselverteilungsproblem ist gelöst.

Aber:

Um das Schlüsselpaar zu erzeugen, benötigt man eine zufällige Zahl. Und Zufall ist nicht ganz einfach zu erzeugen auf einem Computer. Normalerweise benutzt man dafür einen Zufallszahlengenerator (ein Stück Software). Diese Zufallszahlengenratoren können manipuliert werden (Beispiel 1, Beispiel 2). Im Artikel Ein Backup mit Duply hatten wir bereits das Problem mit der Entropie (dem Zufall).

Zweites aber:

Da der öffentliche Schlüssel jedem zur Verfügung steht, ist nicht sicher gestellt, dass genau dieser öffentliche Schlüssel auch dem gewünschten Empfänger zugeordnet werden kann. An dieser Stelle kommen digitale Zertifikate ins Spiel, die den öffentlichen Schlüssel einem privaten Schlüsselinhaber zuordnen, also gewissermassen zertifizieren, dass der öffentliche Schlüssel zu der entsprechenden Person oder Firma gehört.

Drittes aber:

Die asymetrische Verschlüsselung ist langsamer im Vergleich zur symmetrischen Verschlüsselung.

TLS kombiniert beide Verfahren

TLS ist ein hybrides Protokoll, es kombiniert symmetrische und asymmetrische Verfahren.

TLS funktioniert folgendermassen:

  1. Ein Client baut eine Verbindung zum Server auf (Aufruf von https://… im Browser)
  2. Der Server schickt dem Client sein Zertifikat
  3. Der Client überprüft ob Zertifikat und Servername zusammenpassen und schickt dem Server entweder eine mit dem öffentlichen Schlüssel des Servers verschlüsselte Zufallszahl oder beide Parteien berechnen ein gemeinsames Geheimnis (Diffie Hellman Schlüsseltausch)
  4. Aus der Zufallszahl oder dem Geheimnis wird ein Schlüssel berechnet, der dann beiden Parteien zur Verfügung steht und die dann folgende Kommunikation schützt (symmetrisches Verfahren).

Implementierungen des Protokolls finden sich in den Bibliotheken OpenSSL und GnuTLS.

Wichtige Anwendungsfälle für TLS, die auch hier im Blog immer wieder vorkommen, sind die Protokolle HTTP, POP3, SMTP, NNTP, SIP, IMAP, XMPP, IRC, LDAP, FTP und OpenVPN.

Hinweis: In diesem Zusammenhang haben Sie bestimmt schon vom Heartbleed-Bug gehört. Bei diesem „Fehler“ konnte ein „Angreifer“ über Jahre den Arbeitspeicher der beteiligten Partner auslesen und dort private Schlüssel, Benutzernamen und Passworte abgreifen. Der Web Comic xkcd erklärt Heartbleed sehr anschaulich:

HTTP und HTTPS

TLS-Verschlüsselung wird zum grössten Teil zur Absicherung des HTTP Protokolls verwendet. HTTP steht für Hypertext Transfer Protocol und ist das unverschlüselte Kommunikationsprotokoll im WWW. Wenn die Kommunikation über HTTP und TLS abgewickelt wird, spricht man vom HTTPS Protokoll (Hypertext Transfer Protocol Secure).

Wenn Sie beispielsweise Websites über das unverschlüsselte HTTP Protokoll

  • in einem ungesicherten WLAN ansehen, kann der Klartext Ihrer Kommunikation von jedem „Angreifer“ in Reichweite des WLANs mitgelesen werden.
  • in einem kabelgebundenen Netz oder verschlüsseltem WLAN ansehen, kann der Klartext von allen Teilnehmern des Netzes mitgelesen werden.

Wenn Sie Ihre Kommunikation über HTTP/TLS, also HTTPS abwickeln, so ist ein Mitlesen zwar möglich, aber der Netzwerkverkehr ist verschlüsselt und kann nicht „einfach so“ entschlüsselt werden.

Digitale Zertifikate

Ein digitales Zertifikat bestätigt bestimmte Eigenschaften von Personen und Objekten. Sie können Zertifikate selbst erzeugen oder bei einer Zertifizierungsstelle kaufen. Die technischen Vorgänge sind bei selbst zertifizierten und bei gekauften Zertifikaten die gleichen. Sie sind also „gleich sicher“. Der Unterschied besteht im Vertrauen in den Austeller des Zertifikats. Wenn Sie mit eine HTTPS Verbindung mit unserem Testserver herstellen (https://serverblogger.ch), erhalten Sie die Meldung Invalid Certificate.

Invalid Certificate
Invalid Certificate
Je nach Browsertyp erhalten Sie eine ähnliche Meldung. Der Text ist etwas irreführend. Das Zertifikat ist nicht ungültig, sondern einfach selbst zertifiziert. Die Situation ist ein vergleichbar mit einem Zertifikat über Ihren Bildungsstand. Sie könnten sich selbst zertifizieren, dass Sie einen bestimmten Kenntnisstand oder Bildungsabschluss haben. Die meisten Menschen würden dieser Bestätigung vermutlich wenig Glauben schenken (auch wenn sie wahr ist). Wenn dagegen eine dritte Instanz, wie die entsprechende Schule oder Ausbildungsstätte Ihren Kenntnisstand bestätigt, sieht die Sache schon ganz anders aus.

Wenn Sie auf die Website https://www.nsa.gov gehen, so vertraut Ihr Browser dem Zertifikat.

SSL Zertifikat
SSL Zertifikat
Es wurde von der Zertifizierungsstelle Geo Trust ausgegeben und ist gültig bis zum 02.12.2015. Ihr Browser ordnet das Zertifikat als gültig ein und stuft damit die Site als vertrauenswürdig ein. Damit ein Browser unterscheiden kann, welcher Zertifizierungsstelle er vertraut, und welcher nicht, schaut er einfach in eine Liste der Zertifizierungsstellen. Im Firefox Browser finden Sie die Liste der Authorities in den Sicherheitseinstellungen oder online hier.
BuiltInCAs Firefox
BuiltInCAs Firefox
Ihr Browser vertraut allen dort gelisteten Unternehmen! Sie können die Liste allerdings bearbeiten und einzelne Zertifizierungsstellen löschen. Das machen allerdings die wenigsten Menschen. Wenn Sie einen Root-Server betreiben und ganz normale Menschen mit ganz normalen Browsern Ihre Services nutzen, haben Sie keine echte Wahl.

Sie müssen ein Zertifikat kaufen, ansonsten gibt es den Fehlerhinweis im Browser Ihres Kunden und vermutlich wird er Ihre Site daraufhin nicht benutzen!

Die Zertifizierungsstellen sind wieder ähnlich wie beim Schulbeispiel – es gibt gute und schlechte Schulen und man kann sich natürlich auch Doktortitel kaufen. Bei den Zertifikaten ist es manchmal ebenso (Beispiele hier, hier und hier). Wegen der mangelnden Vertrauenswürdigkeit einiger Zertifizierungsstellen wird seit Anfang 2010 die Sicherheit von TLS grundsätzlich angezweifelt (Heise: EFF zweifelt an Abhörsicherheit von SSL). Durch die Deaktivierung fragwürdiger Zertifizierungsstellen im eigenen Browser lässt sich das Risiko jedoch weitgehend beseitigen.

Auch wenn das Zertifikatssystem weder perfekt, noch wirklich sicher ist, ist es der einzige Mechanismus, der momentan in der Masse zur Verfügung steht. Man kann es vielleicht mit dem Geschäftsmodell vieler Kreditkartenfirmen vergleichen. Es ist einfacher für diese Firmen einen finanziellen Schaden, den der Kunde im Einzelfall hatte, auszugleichen, als von Anfang an für bessere Sicherheit zu sorgen.

Damit Sie nun nicht völlig den Glauben an die Sicherheit verlieren, ein kleiner Hoffnungsschimmer.

Jede noch so nachlässig implementierte verschlüsselte Verbindung ist ein Quentchen besser als eine unverschlüsselte Verbindung.

Je nach dem Grad Ihres persönlichen Vertrauens und dem Inhalt Ihres Geldbeutels, können Sie sich bei der israelischen Firma StartCOM ein kostenloses Zertifikat ausstellen lassen oder ein Zertifikat bei einer Tochter der Schweizer Post kaufen (SwissSign).

Wir bei NOVATREND verkaufen Ihnen ebenfalls Zertifikate. Die kommen von GeoTrust (die kennen Sie ja schon 😉 ) und von VeriSign/Symantec. Und wir installieren Sie auch für Sie auf Ihrem Root-Server. Ich stelle das hier im Blog mal deutlich hervor, weil es für den professionellen Einsatz einfach eine praktische Dienstleistung ist.

Unterschiedliche Arten von Zertifikaten (blau und grün)

Um die Sache noch etwas spannender zu gestalten, gibt es unterschiedliche Arten von Zertifikaten. Ausser der Stärke der Verschlüsselung ist das in erste Linie die Domain- oder die Identitätsprüfung.

Bei der Domainprüfung gibt es Single, Wildcard und Multidomain Zertifikate. Single Zertifikate umfassen genau eine Domain, Wildcard Zertifikate die Hauptdomain und alle Subdomains, Multidomain-Zertifikate umfassen mehrere Domains. Überprüft wird von der Zertifizierungsstelle, ob der Auftraggeber der Inhaber der Domain ist. Dazu wird automatisiert eine E-Mail an den administrative Adresse im Whois Eintrag geschickt. Diese E-Mail muss auf unterschiedliche Art bestätigt werden. Der Vorgang geht innerhalb kurzer Zeit (Minuten) und man erkennt es auch im Browser (Domain Validation).

Facebook
Facebook
Hier ein Beispiel für ein wohl vergessenes Multidomain Zertifikat, dass zum Einsatz kommt, wenn ich die BMW Site über HTTPS aufrufe (https://www.bmw.com/). Das Zertifikat ist nicht für diese Domain zertifiziert.
BMW
BMW
Bei der Identitätsprüfung einer Organisation wird ausser der Domainprüfung auch ein Handelsregisterauszug verlangt und teilweise telefonisch Kontakt aufgenommen. Bei einer erweiterter Prüfung (Extended Validation Certificate) wird ausserdem eine grüne Addresszeile im Browser angezeigt .
Postbank
Postbank
Schauen Sie sich mal die Zertifikate der Websites an, mit denen Sie regelmässig Kontakt haben.


tl;dr: Jeglicher Netzwerkverkehr sollte, wenn möglich, über TLS abgewickelt werden um ein Mindestmass an Abhörsicherheit zu gewährleisten. Als Betreiber eines Root-Servers sollten Sie sich ein Zertifikat von einer Zertifizierungsstelle installieren oder installieren lassen, der die gängigen Browser und damit auch Ihre Kunden vertrauen.

Kategorien
Soziale Netze

Friendica – ein soziales Netzwerk

Ausser „dem“ sozialen Netzwerk Facebook und „dem“ Mikrobloggingdienst Twitter gibt es auch Open-Source Projekte, die sich mit dem Thema soziale Netzwerke befassen. Bei den Alternativen zu Facebook und Twitter geht es immer dezentral zu. Die Grundidee ist einfach.

Jeder kann einen eigenen Server betreiben, auf dem eine Gruppe von Benutzern ein Profil erstellen kann. Normalerweise ist das der Serverbetreiber und seine Bekannten. Alle existierenden Server sind miteinander verbunden und tauschen verschlüsselt Daten aus.

Auf diese Weise wird sichergestellt, dass hochgeladene Bilder und Benutzerinformationen auf einem Server „des Vertrauens“ liegen.

Soweit, so einfach und logisch. In der harten Realität gibt es ein paar Herausforderungen.

  • Das Henne, Ei Problem (keine Server, keine User – keine User, kein Netzwerk)
  • Komplexität der Installation (je schwieriger, desto weniger Server)
  • Viele Projekte haben unterschiedliche Protokolle und das verkompliziert den Datenaustausch.

Grössere Projekte mit Ähnlichkeit zu Facebook sind Diaspora und Friendica, Ähnlichkeit zu Twitter haben Gnu Social (StatusNet, Laconia), Libertree und identi.ca.

Hinweis: Ursprünglich hatte ich einen Blogeintrag für dieses Thema geplant, musste aber schnell feststellen, das die Thematik komplexer war, als ich vermutete. Weil es ein wichtiges Thema ist, wird nun eine kleine Reihe daraus und ich werde zunächst mal alle Projekte auf dem serverblogger.ch Server installieren und versuchen miteinander zu verbinden. Da es um „soziale Software“ geht, sind Sie herzlich eingeladen, Benutzerprofile anzulegen oder ebenfalls Server aufzusetzen, die sich dann mit den anderen verbinden.

Der Serverblogger.ch Server ist ein Testserver und wird „hin und wieder“ mal neu aufgesetzt. Sehen Sie den Server als „Erfahrungsspielplatz“ und speichern Sie dort nichts wirklich persönliches ab 🙂

Heute soll es um Friendica gehen. Es basiert auf PHP/MySQL und ist einfach zu installieren. Von Friendica aus kann man Verbindungen zu den anderen alternativen Netzwerken herstellen, genauer gesagt zu Diaspora, Gnu-Social, Libertree, Facebook, Twitter, WordPress und anderen.

Installation

Die Installation erfolgt über einen browserbasierten Installer. Sie können Friendica einen eigenen vhost spendieren (siehe auch Viele virtuelle Hosts auf einem Root-Server), oder es in einem bereits existierenden vhost in einem Unterverzeichnis installieren. Meine Freindica Installation landet in einem Unterverzeichnis auf serverblogger.ch/friendica.

Den Quellcode von Friendica finden Sie auf der Website des Projekts (friendica.com). Laden Sie ihn herunter und entpacken Sie ihn im gewünschten Verzeichnis.

wget https://github.com/friendica/friendica/archive/master.zip
unzip master-zip

Datenbank anlegen

Legen Sie sich eine Datenbank und einen Benutzeraccount an (siehe auch Installation der 5 verbreitetsten CMS).

mysqladmin -u root -p create friendica
mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON friendica.* TO friendica@localhost IDENTIFIED BY '*******';
mysql> flush privileges;
mysql> exit

Webinstaller

Wenn Sie nun im Browser Ihre URL aufrufen, meldet sich der Installer mit einem System Check

Installation - Systemcheck
Installation – Systemcheck

Als nächstes werden die Datenbank Parameter abgefragt.

Installation - Datenbank
Installation – Datenbank

Bei den Site Settings wird die E-Mail das Administrators und die Zeitzone abgefragt. Der eigentliche Administrationsaccount wird später erstellt.

Installation - Setup
Installation – Setup
Das Setup ist nach diesem Schritte beendet, die Datenbank erstellt und Sie werden auf eine Registrierungsseite für den ersten Account verwiesen. Ausserdem müssen wir noch einen „scheduled task“ einrichten.
Erfolgreich installiert
Erfolgreich installiert
Als erstes lege ich den Administrationsaccount an
Erstmalige Registrierung
Erstmalige Registrierung

dann erhalte ich eine E-Mail mit einem Klartextpasswort und kann mich einloggen. Zusätzlich zum normalen Benutzerkonto wird ein Admin Link angezeigt, unter dem Sie das System konfigurieren können.

Friendica - Adminbereich
Friendica – Adminbereich

Das war es auch schon, Ihr soziales Netzwerk steht zur Benutzung bereit!

Erste Schritte

Füllen Sie zunächst ihr Profil aus

Friendica - Profil
Friendica – Profil
Innerhalb des Profils können Sie entscheiden, ob Sie im Verzeichnis auftauchen wollen. Es gibt ein lokales Verzeichnis in Ihrer Friendica Instanz (http://serverblogger.ch/friendica/directory) und ein globales Friendica Verzeichnis, in dem ich nun ebenfalls auftauche, wenn ich nach Teilen meiner Daten (Name, Wohnort, …) suche. Momentan bin ich der einzige aus Fitou (http://dir.friendica.com/directory?search=Fitou).
Friendica - Globales Verzeichnis
Friendica – Globales Verzeichnis
Da ich derzeit allein auf meinem Server bin, habe ich natürlich keine Kontakte. Es dauert etwa 24 Stunden, bis ich Kontakte von anderen Servern hinzufügen kann. Heute ist der 1. Februar 2015 und bis der Blogeintrag einscheint, poste ich einfach einen Statuseintrag (http://serverblogger.ch/friendica/display/741586976110631209954ce55a3baddf).
Friendica - Statuseintrag
Friendica – Statuseintrag
Starten Sie doch auch einfach ein dezentrales soziales Netzwerk mit Open Source Software!

Einen guten Einstieg in die Welt von Friendica bietet das deutschsprachige Wiki.


tl;dr: Friendica ist eine dezentrale Open Source Software Alternative zu Facebook.

Kategorien
Content Management Systeme Shared Hosting Webdesign

GRAV, ein schnelles, dateibasiertes, einfaches CMS

Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

Im Jahr 2004 installierte ich zum ersten Mal Drupal. Die Version 4.x war aktuell und all die hippen Module wie Views und Panels gab es noch nicht. Was mich damals faszinierte, waren die einfachen, klaren Strukturen, die Inhaltstypen, Felder, Berechtigungen, Templates, Ordnerstrukturen. Ich fing sofort an, damit zu „spielen“. Einen ähnlichen Effekt löste Mambo bei mir im Jahr 2002 und PHPNuke im Jahr 1999 aus (und davor Perl, und davor Lego 🙂 ). In den letzten 10 Jahren ist mir im Bereich PHP basierte Open Source CMS nichts über den Weg gelaufen, was einen ähnlichen Aha- und Bastel-Effekt bei mir auslöste und mich dazu brachte sofort eine Website damit zu bauen.

Ende 2014 stolperte ich über GRAV CMS. Es ist dateibasiert und benötigt daher keinen Installationsvorgang im klassischen Sinne. Das Dateipaket wird ausgepackt und die Website ist da! Es gibt Standard-, Listing– und Modulare Seiten, die mit Text und Bildern gefüllt werden können. Es gibt zusätzliche Plugins und Themes. Die Inhalte werden in der Auszeichnungssprache Markdown geschrieben und dann mittels vordefinierten Twig Templates formatiert. Für die Geschwindigkeit wird auf Doctrine Cache zurückgegriffen, für die Wartbarkeit und Erweiterbarkeit auf Pimple (Was ist Pimple?). Der Symfony Event Dispatcher sorgt wie bei Drupal 8 für das Plugin handling und die Symfony Console für ein Kommandozeilen Interface. Bilder werden mit der Gregwar Image Library in einem Aufruf bearbeitet.

Um schnell zu brauchbaren Ergebnissen zu kommen, gibt es ein gute Dokumentation, ein Forum und einen Chat. GRAV ist als persönliches Projekt von Andy Miller, dem Gründer von Rocket Theme, Mitte 2014 gestartet worden. Es steht unter der MIT Lizenz und das Business Modell ist einfach zu verstehen: Jeder kann Erweiterungen schreiben und diese kostenlos anbieten oder verkaufen. Das Team um Andy Miller erstellt und verkauft über Rocket Theme seit 10 Jahren Themes für Joomla, Drupal, WordPress, Magento und PHPbb und hat dabei praktische Erfahrungen aus allen CMS sammeln können sowie Nervenstärke bei den Architektur-Entscheidungen der jeweiligen Projekte erwerben müssen. Beide Faktoren wirken sich positiv pragmatisch auf das GRAV Projekt aus.

In Joomla, Drupal und WordPress gibt es jeweils Einzeldarstellungen (eine Seite) und Listdarstellungen von Inhalten (mehrere angerissene Einzelinhalte auf einer Seite mit weiterlesen Link, o.ä.). Die Einzeldarstellungen sind meist auf eine Komponente (Joomla), ein Modul (Drupal) oder ein Plugin (WordPress) beschränkt. In TYPO3 können die Einzelseitendarstellungen mit zusätzlichen Elementen angereichert werden. Dieses Grundprinzip lässt sich über Erweiterungen verändern, aber das führt nicht unbedingt zu einer übersichtlicheren Struktur. Das Design einer Seite mit Inhalt zu verändern ist dabei kein trivialer Vorgang. Um eine wirklich „runde“ Website mit einem dieser „klassischen“ CMS zu erstellen, benötigt man einiges an Know How und Budget, heute also eher klassisches Agenturgeschäft.

GRAV vereinfacht den Bau von Websites erheblich, verzichtet im Core auf den ganzen Overkill aus Datenbank, Benutzerkonten, und -Berechtigungen und ist dabei natürlich ungemein schnell bei der Seitenausgabe. Es vereint die Vorteile bei der Inhaltsdarstellung aller oben genannten CMS und bricht sie auf das Wesentliche herunter (Einzel-, List- und Modulardarstellung). Das Schreiben von Inhalten in Markdown macht Spass und ist einfach zu erlernen, die Pflege der Texte kann über FTP, GitHub, Dropbox und theorethisch alle Services, auf denen Dateien gehostet werden können, erfolgen.

Ein browserbasierter Administrationsbereich war ursprünglich von Rocket Theme geplant, wurde aber von niemandem implementiert und bisher auch nicht wirklich vermisst. Bei höheren Anforderungen (eCommerce) kann das System abhängig vom eigenen Wissensstand über vordefinierte oder selbst geschriebene Plugins erweitert werden.

Achja, und hier ist meine erste GRAV Website (fimidi.com).

Lassen Sie uns eine kleine Website mit dem GRAV CMS erstellen. Sie können das lokal auf Ihrem PC machen oder direkt auf Ihrem Root-Server. Ich nehme mal gleich den Server.

Installation

Wir arbeiten immer noch mit Ubuntu 14.04 und dem Apache Webserver. Erstellen Sie also zunächst einen vhost (Viele virtuelle Server auf einem Root-Server), entpacken dann GRAV in ihr Dokumentenverzeichnis und rufen Sie es in Ihrem Browser auf. Die aktuellste Version finden Sie auf getgrav.org/downloads.

wget https://github.com/getgrav/grav/releases/download/0.9.15/grav-v0.9.15.zip
unzip grav-v0.9.15.zip

Rufen Sie nun im Browser die entsprechende URL auf und GRAV ist fertig installiert.

GRAV Installation
GRAV Installation
Die Dateien, die sich im Ordner /user befinden, enthalten die Inhalte, Metadaten und Formatierungen Ihrer Website. Wenn Sie Ihre Site lokal mit Inhalt befüllen, so müssen Sie einfach diesen Ordner mit Ihrem Server synchronisieren.

  • user/config/ – Konfiguration Ihrer Website sowie des GRAV Systems
  • user/data/ – Hier können von Plugins bei Bedarf Daten gespeichert werden
  • user/pages/ – die einzelnen Seiten
  • user/plugins/ – die installierten Plugins (Die Plugins error und problem sind Standard)
  • user/themes/ – das Theme Antimatter ist Standard

In der 1.0 Version wird noch der Ordner user/accounts/ hinzukommen.

  • user/accounts/ – Benutzerkonten und Berechtigungen

Konfiguration und Erstellung von Inhalt

Editieren Sie zunächst die Datei user/config/site.yaml

title: serverblogger.ch
author:
  name: Hagen Graf
  email: 'hagen@novatrend.ch'
metadata:
    description: 'Wir zeigen, wozu man Root-Server benutzen kann!'

Die einzige Seite, die vordefiniert ist, ist die Home Seite (user/pages/01.home/default.md). Der Dateiname default.md heisst default, weil es ein Twig-Template mit dem gleichen Namen im Antimatter Theme gibt, über das der Inhalt der Home Seite interpretiert wird (user/themes/antimatter/default.html.twig). Die Endung .md steht für Markdown. So sieht eine einfache Seite aus. Der Titel ist gleichzeitig der Name des Menülinks.

---
title: Startseite
---

# Eine Website mit GRAV
## Die Installation war wirklich einfach

Das hier ist der Text meiner **ersten** Seite
Grav simple page
Grav simple page
Wenn Sie ein Bild auf Ihrer Seite haben wollen, so kopieren Sie es einfach in Ihr Seitenverzeichnis /user/pages/01.home. Hier ein Beispiel:

cd /user/pages/01.home
wget https://farm8.staticflickr.com/7508/15154508894_3338ae7a2b_k.jpg

Editieren Sie die default.md entsprechend, um das Bild anzeigen zu können.

---
title: Startseite
---

# Eine Website mit GRAV
## Die Installation war wirklich einfach

Das hier ist der Text meiner **ersten** Seite
![Maserati](15154508894_3338ae7a2b_k.jpg?resize=400,200)
default.md mit Bild
default.md mit Bild
Probieren Sie ein anderes Twig-Template aus, um ein Gefühl für das Prinzip zu bekommen. Benennen Sie dazu die Datei default.md um in blog.md. Das Ergebnis sieht so aus:
blog.md
blog.md
Das Blog Template macht aus Ihrem Bild automatisch ein Headerbild und verändert die Farbe. Ausserdem taucht noch ein Text Widget auf. Wenn Sie eine zweite Seite haben wollen, erstellen Sie einfach einen Ordner /user/pages/02.seitenname und darunter eine Datei mit dem Namen eines existierenden Templates.

Es gibt für alle Beispielsites (Skeleton) für gängige Anwendungen (z.B. Blog, Shop, One-Page-Site), viele nützliche Plugins und natürlich Themes.

Als ich an diesem Punkt das erste Mal ankam, beschloss ich unsere fimidi Site damit zu bauen 🙂

Wenn es Ihnen genauso geht, hier sind nochmal die momentan wichtigsten Ressourcen (getgrav.org).

Dokumentation, Forum und Chat.

Und nun wünsche ich Ihnen viel Spass und viel Zeit!


tl;dr: Das dateibasierte CMS GRAV macht einfach Spass und Lust auf mehr.

Kategorien
Editoren Server

Etherpad Lite – ein kollaborativer Editor

Haben Sie schon mal gemeinsam an einem Dokument gearbeitet?

Der „klassische“ Workflow ist dabei oft folgender: Jemand erstellt eine Datei, beispielsweise ein Microsoft Word oder OpenOffice/LibreOffice Dokument. Diese Datei wird dann per E-Mail verschickt oder in einem gemeinsamen Ordner (auf den alle Mitarbeiter zugreifen können) gespeichert. Innerhalb der lokalen Textverarbeitungen (MS Word) gibt es einen Überarbeitungsmodus der die Änderungen in der Datei dokumentiert. Das funktioniert prinzipiell, wird aber komplizierter, wenn die Kollegen nicht alle in einem Gebäude sitzen, bzw. am Abteilungsnetz angeschlossen sind. Auswärtige Kollegen könnten per VPN von einem anderen Standort angebunden werden aber die Zugriffsregelung kann schnell komplex werden.

Benutzerfreundlicher ist eine browserbasierte Dokumentenverwaltung, die die Zugriffsrechte über Benutzerkonten steuert und/oder eine Speicherung der MS Word/OpenOffice/LibreOffice Dateien in einer Cloud oder eine Kombination aus beidem (siehe auch OwnCloud – Installation und Clients).

Für browserbasierte Echtzeit Dokumentenbearbeitung ist Google Docs wohl der bekannteste Service. Die Textverarbeitungskomponente basiert auf Writely.com, das 2006 von Google gekauft wurde. Ausserdem kaufte Google im Jahr 2009 die Firma AppJet, den Betreiber des Dienstes EtherPad.com. Beide Dienste wurden kurz nach dem Kauf eingestellt. Der Quellcode von Etherpad wurde jedoch nach Protesten aus der OpenSource Gemeinde nach dem Kauf von Google unter die Apache Lizenz gestellt und veröffentlicht. Ebenfalls im Jahr 2009 startete Microsoft Online-Office, 2011 gefolgt von Microsoft Office 365. In den letzten Jahren sind dutzende Anbieter solcher Services hinzugekommen. Im Falle EtherPad arbeiteten die Entwickler nach der Übernahme an Googles neuem Kommunikationsdienst Wave. Das Wave Projekt wurde allerdings im Jahr 2012 wieder eingestellt.

Bei Services dieser Art werden die Dokumente auf den Servern von Google, Microsoft und anderen Anbietern zentral auf deren Servern gespeichert. Die Unternehmen sind daher im Besitz aller Inhalte, aller Dokumente, aller Änderungen, aller Mitarbeiterinformationen und jeder Zugriffszeit, bis zum einzelnen Tastendruck.

Im Normalfall haben die Betreiber sicher kein Interesse an diesen Informationen, aber sie sollten sich den letzten Satz nochmal langsam durchlesen und überlegen, was das für ein privatwirtschaftliches Unternehmen bedeuten kann.

Wollen Sie wirklich Schriftverkehr unter diesen Umständen auf Festplatten Dritter speichern? Auf den ersten Blick sicherlich nicht, weil Sie nicht kontrollieren können, wer die Dokumente liest. Auf den zweiten Blick sind dieses Services allerdings verführerisch komfortabel und so kommt es, wie so oft, auf den Einzelfall an.

Wenn Ihr Bedarf beim gemeinsamen Schreiben in Echtzeit liegt und Sie einen selbstgehosteten Dienst wie Google Docs suchen, dann sind Sie mit Etherpad gut bedient.

Auf einem Etherpadserver kann ohne Zugangsbeschränkung von jedem Nutzer ein neues Textdokument erstellt werden. Das Dokument erhält einen Kryptolink (URL und eine zufällige Zeichenfolge). Jeder, den den Link hat, kann das Dokument einsehen, editieren und über den dazu gehörigen Chat kommunizieren. Der Text wird in kurzen Zeitabständen serverseitig abgespeichert, darüber hinaus kann jeder Autor jederzeit einen bestimmten Bearbeitungsstand speichern. Über eine Zeitleiste kann jeder Bearbeitungsstand für jeden Zeitpunkt verzögerungsfrei angesehen werden!

Das Dokument kann jederzeit in vielen Formaten Formaten exportiert und auf dem eigenen Rechner gespeichert werden.

EtherPad Lite ist in JavaScript implementiert.

Es auch gibt öffentliche Etherpadserver, auf denen man das Prinzip ausprobieren kann, beispielsweise den Etherpadserver der Wikimedia Foundation https://etherpad.wikimedia.org oder den, den ich hier gerade einrichte (http://pad.serverblogger.ch)

Installation von Etherpad Lite unter Ubuntu 14.04.

Etherpad Lite benötigt als Basis node.js, dessen Installation ich bereits in den Artikeln Ein Blog mit Ghost und Node.js und Konzentrieren Sie sich auf das Wesentliche – Hoodie beschrieben haben. Ausser node.js werden die folgenden Pakete benötigt.

sudo -i
apt-get install gzip git-core curl python libssl-dev pkg-config build-essential

Der Etherpadserver sollte unter einem eigenen User eingerichtet werden. Legen Sie den User etherpad an und unterbinden Sie ein Login von aussen.

adduser etherpad --disabled-login --disabled-password

Loggen Sie sich als etherpad user ein und laden das Etherpad Paket in ihr home Verzeichnis (/home/etherpad)

sudo -u etherpad -i
git clone git://github.com/ether/etherpad-lite.git

Konfiguration

Wechseln Sie in das Verzeichnis etherpad-lite und erstellen sich eine Konfigurationsdatei (settings.json).

cd etherpad-lite
cp settings.json.template settings.json

Rufen Sie settings.json in einem Editor auf.

Die Konfigurationsdatei ist sehr gut dokumentiert. Probieren Sie die entsprechenden Einstellungen einfach aus. Die zunächst einzigen wichtigen Einstellungen sind die IP-Adresse Ihres Servers und ein geheimer Sessionstring. Dieser Sessionstring ermöglicht es Ihren Benutzern nach einem Neustart des Servers an der gleichen Stelle weiter zu arbeiten.

//IP and port which etherpad should bind at
  "ip": "46.232.178.78",
  "port" : 9001,

// Session Key, used for reconnecting user sessions
  // Set this to a secure string at least 10 characters long.  Do not share this value.
  "sessionKey" : "geheimerstring",

Für einen ersten Test können Sie nun den Etherpad Server mit dem Befehl bin/run.sh im etherpad-lite Verzeichnis starten.

etherpad@server1:~/etherpad-lite$ bin/run.sh

mit CTRL-C können Sie die Ausführung beenden.

In Ihrem Browser können Sie jetzt gemeinsam mit anderen Autoren Texte editieren. Rufen Sie den Server zunächst mit Ihrer IP-Adresse mit Portnummer auf. In meinem Fall http://46.232.178.78:9002.
Ein Pad ist ein Dokument. Geben Sie den Namen für Ihr Dokument ein und klicken auf OK.

Startseite
Startseite
Der Etherpadserver erstellt ein neues Dokument/Pad und schreibt den von Ihnen in der settings.json Datei konfigurierten Text als Standard hinein. Sie können nun den Text bearbeiten.
Standardtext im Editorfenster
Standardtext im Editorfenster
Durch einen Klick auf das Sternchen können Sie eine Version explizit speichern. Die Versions-Zeitliste erhalten Sie durch einen Klick auf das Uhrensymbol. Sie erhalten eine neue Sicht und können die Versionen Ihres Dokuments durchblättern oder automatisiert abspielen lassen.
Versionen
Versionen
Durch einen Klick auf das Zahnrad erhalten Sie die individuellen Pad Einstellungen. Hier können Sie beispielsweise festlegen, dass die Chatleiste immer angezeigt wird und dass die Sprache Deutsch ist.
Einstellungen
Einstellungen
Durch einen Klick auf das </> Symbol sehen sie den Dialog zum Teilen des Pads
Pad teilen
Pad teilen
Hier sehen Sie das in einem iframe eingebettete „Orignaldokument“.

Datenbank

Standardmässig benutzt Etherpad die Datenbank dirty.db. Wie der Name schon vermuten lässt, ist diese Datenbank nicht wirklich für einen produktiven Betrieb geeignet 🙂 Für einen produktiven Betrieb sollten Sie sich eine MySQL Datenbank und einen User Account erstellen und hier in der Konfigurationsdatei eintragen.

mysqladmin -u root -p create etherpad
mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON etherpad.* TO etherpad@localhost IDENTIFIED BY '******';
mysql> flush privileges;
mysql> exit

Vergessen Sie nicht, die dirty.db auszukommentieren.

//The Type of the database. You can choose between dirty, postgres, sqlite and mys$
//You shouldn't use "dirty" for for anything else than testing or development
//"dbType" : "dirty",
//the database specific settings
/*"dbSettings" : {
  "filename" : "var/dirty.db"
                 },*/

//An Example of MySQL Configuration
   "dbType" : "mysql",
   "dbSettings" : {
                    "user"    : "etherpad",
                    "host"    : "localhost",
                    "password": "******",
                    "database": "etherpad"
                  },

Service

Um das Starten zu vereinfachen wäre es schön einen Service zu haben mit dem der Ethernetserver gestartet und gestoppt werden kann. Erstellen Sie sich einen!

sudo mkdir /var/log/etherpad-lite
sudo chown etherpad /var/log/etherpad-lite
sudo chown -R etherpad /var/log/etherpad-lite
sudo nano /etc/init.d/etherpad-lite

Das ist der Inhalt der Datei

#!/bin/sh
### BEGIN INIT INFO
# Provides:          etherpad-lite
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts etherpad lite
# Description:       starts etherpad lite using start-stop-daemon
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
LOGFILE="/var/log/etherpad-lite/etherpad-lite.log"
EPLITE_DIR="/home/etherpad/etherpad-lite"
EPLITE_BIN="bin/run.sh"
USER="etherpad"
GROUP="etherpad"
DESC="Etherpad Lite"
NAME="etherpad-lite"

set -e

. /lib/lsb/init-functions

start() {
  echo "Starting $DESC... "

    start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR/$EPLITE_BIN -- $LOGFILE || true
  echo "done"
}

#We need this function to ensure the whole process tree will be killed
killtree() {
    local _pid=$1
    local _sig=${2-TERM}
    for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
        killtree ${_child} ${_sig}
    done
    kill -${_sig} ${_pid}
}

stop() {
  echo "Stopping $DESC... "
  if test -f /var/run/$NAME.pid; then
    while test -d /proc/$(cat /var/run/$NAME.pid); do
      killtree $(cat /var/run/$NAME.pid) 15
      sleep 0.5
    done
    rm /var/run/$NAME.pid
  fi
  echo "done"
}

status() {
  status_of_proc -p /var/run/$NAME.pid "" "etherpad-lite" && exit 0 || exit $?
}

case "$1" in
  start)
      start
      ;;
  stop)
    stop
      ;;
  restart)
      stop
      start
      ;;
  status)
      status
      ;;
  *)
      echo "Usage: $NAME {start|stop|restart|status}" >&2
      exit 1
      ;;
esac

exit 0

Die Datei muss nun noch ausführbar sein.

chmod +x /etc/init.d/etherpad-lite

Und nun kann der Server gestartet und gestoppt werden.

Eine URL für den Etherpadserver

Jetzt ist alles schon recht rund, aber schön wäre natürlich noch eine eigene URL (http://pad.serverblogger.ch beispielsweise).

Ich benutzer hier die Apache2 Standard Virtualhost Konfigurationsdatei

sudo nano /etc/apache2/sites-available/000-default.conf

Fügen Sie diese Zeilen hinzu und kommentieren Sie das DocumentRoot aus

#DocumentRoot /var/www/html
ServerName pad.serverblogger.ch
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass / http://46.232.178.78:9002/
ProxyPassReverse / http://46.232.178.78:9002/

Hinweis: Da ich auf einem Testserver arbeite, nutze ich den default Virtual Host für dieses Beispiel. Ich habe das schon einmal im Artikel Ein Blog mit Ghost und Node.js gemacht. Wenn Sie Etherpad und Ghost auf Ihrem Server haben wollen, müssen Sie einfach einen neuen vhost anlegen (Viele virtuelle Server auf einem Root-Server)

Laden Sie das Apache Proxy Modul

sudo a2enmod proxy_http
sudo a2enmod proxy

und starten den Apache2 Server neu

sudo service apache2 restart

Nun können Sie auf Ihrem (oder meinem) Server arbeiten -> http://pad.serverblogger.ch

Updates

Schauen Sie hin und wieder nach, ob es Updates gibt.

sudo -u etherpad -i
cd etherpad-lite
git pull origin
exit
service etherpad restart

tl;dr: Es muss nicht immer Google Docs sein. Mit Etherpad kann man wunderbar gemeinsame Dokumente entwickeln.