Radicale 2

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Starten von Programmen

  3. Ein Terminal öffnen

  4. Root-Rechte

  5. einen Editor öffnen

Inhaltsverzeichnis
  1. Installation
  2. Konfiguration des Servers
    1. Grundkonfiguration
      1. Anpassen von Netzwerkschnittstelle und...
      2. Ändern der Authentifizierungsmethode
      3. Anlegen von Benutzern
      4. Löschen von Benutzern
    2. Manuell starten/stoppen
    3. Automatisch starten
    4. Status prüfen
    5. Einrichtung von Kalendern und Adressbüch...
    6. Erweiterte Konfiguration (optional)
      1. Absicherung der Verbindung mittels TLS...
      2. Versionierung des Kalender- und Adress...
      3. Benutzerrechte
        1. Zuteilen von Benutzerrechten
        2. Praktische Konfigurationsbeispiele
        3. Kalender und Adressbücher teilen (pr...
      4. Weitere Konfigurationsoptionen
  3. Konfiguration des Clients
  4. Problembehandlung
    1. Detailierte Protokollierung
    2. Problem mit TLS-Zertifikat in Thunderbir...
  5. Alternativen
  6. Links

Radicale/Radicale_Logo.png Radicale 🇬🇧 ist ein kleiner Kalender- (CalDAV) und Adressbuch-Server (CardDAV). Er verwaltet Kalender- und Adressbucheinträge einfach in .ics- (Kalender) bzw. .vcf-Dateien (Adressbuch), wodurch z.B. die Versionierung mittels Git oder aber auch einfacher Austausch mit anderen Programmen möglich ist.

Radicale ist komplett in Python geschrieben.

Dieser Artikel beschreibt die Version 2.x des Programms. Für Ubuntu 18.04 ist die Version 1.x von Radicale in den Paketquellen enthalten.

Installation

Radicale 2.x ist in den offiziellen Paketquellen enthalten.

Befehl zum Installieren der Pakete:

sudo apt-get install radicale python3-bcrypt python3-passlib apache2-utils 

Oder mit apturl installieren, Link: apt://radicale,python3-bcrypt,python3-passlib,apache2-utils

Konfiguration des Servers

Grundkonfiguration

Die Konfiguration von Radicale erfolgt standardmäßig mittels der Datei /etc/radicale/config[5]:

Anpassen von Netzwerkschnittstelle und Port

Die Angabe der IP und des Ports auf denen Radicale erreichbar ist legt man über die Einstellung hosts im Abschnitt [server] fest:

hosts = IPv4-des-Radicale-Rechners:5232

oder für alle IPv4-Adressen:

hosts = 0.0.0.0:5232

oder für alle IPv4- und IPv6-Adressen auf Port 9999:

 hosts = 0.0.0.0:9999, [::]:9999

Es können dabei mehrere IP-Adressen getrennt durch Komata angegeben werden. IPv6-Adressen sind dabei stets in [ ] einzufassen.

Ändern der Authentifizierungsmethode

Die Authentifizierungsmethode legt man im Abschnitt [auth] fest, den man wie folgt anpasst, um die Nuzter in einer mit bcrypt gesicherten Datei /etc/radicale/users mittels htpasswd anlegen und verwalten zu können:

type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = bcrypt

Experten-Info:

Mittels Python-Plugins ist es möglich, Radicale um weitere Methoden zur Benutzer-Authentifizierung zu erweitern. Details kann man bei Bedarf der Dokumentation 🇬🇧 entnehmen.

Anlegen von Benutzern

Nach dem Anpassen der Authentifizierungsmethode können Benutzer wie folgt angelegt werden:

# 1. Benutzer
sudo htpasswd -c -B /etc/radicale/users BENUTZER01

# Datei /etc/radicale/users nur für den System-Nutzer radicale zugreifbar machen:
sudo chown radicale:radicale /etc/radicale/users
sudo chmod o-r /etc/radicale/users

# weitere Benutzer anlegen
sudo htpasswd -B /etc/radicale/users BENUTZER02

# Passwort eines Benutzers ändern:
sudo htpasswd -B /etc/radicale/users BENUTZER01 

Löschen von Benutzern

Benutzer lassen sich einfach durch das folgende Kommando aus der /etc/radicale/users löschen - also z.B. für BENTUZER02:

sudo htpasswd -D /etc/radicale/users BENUTZER02 

Damit wird der Benutzer aber nur aus der Passwortdatei /etc/radicale/users gelöscht, die Kalender- und Adressbuchdateien des betreffenden Nutzers bleiben davon unberührt.

Möchte man auch diese Daten löschen, so muss man das Verzeichnis des betreffenden Nutzers aus /var/lib/radicale/collections/collection-root löschen, um alle Daten zu entfernen oder man löscht selektiv einzelne Kalender oder Adressbücher, indem man sie aus /var/lib/radicale/collections/collection-root/<Benutzername> entfernt - also z.B. für BENUTZER02:

# Alle Daten von BENUTZER02 löschen:
sudo rm -Rf /var/lib/radicale/collections/collection-root/BENUTZER02

# Einzelne Daten von BENUTZER02 löschen, z.B. das Adressbuch mit der UID "0b41234d-a9b2-317d-9a7d-58259212c39c"
sudo rm -Rf /var/lib/radicale/collections/collection-root/BENUTZER02/0b41234d-a9b2-317d-9a7d-58259212c39c 

Achtung!

Beim Löschen von Benutzer-Daten stets mit großer Sorgfalt arbeiten, da man hier durch Tippfehler auch schnell ein mal die falschen Daten löschen kann!

Manuell starten/stoppen

Nach Abschluss der Grundkonfiguration lässt sich Radicale wie jeder andere systemd-Service starten, stoppen bzw. neustarten:

# Start:
sudo systemctl start radicale.service

# Stop:
sudo systemctl stop radicale.service

# Neustart:
sudo systemctl restart radicale.service 

Automatisch starten

Damit der Radicale-Server automatisch gestartet werden kann, gibt man

sudo systemctl enable radicale.service 

ein. Beim nächsten Neustart des Systems wird dann Radicale via systemd automatisch gestartet.

Hinweis:

Da das Ubuntu-Radicale-Paket keine systemd-service-Datei sondern nur ein init.d-Service-Skript mitbringt, gerneriert Ubuntu beim Ausführen des Befehls automatisch eine einfache systemd-Service-Datei und man enthält diesbezüglich einen entsprechenden Hinweis. Dies beeinträchtigt die ordnungsgemäße Funktion von Radicale jedoch nicht.

Status prüfen

Der Status von Radicale lässt sich unter anderem mit folgenden Befehlen abfragen:

# Status Radicale Service:
sudo systemctl status radicale.service

# Netwerkstatus von Radicale:
sudo lsof -i | grep radicale

# Protokoll anzeigen:
sudo cat /var/log/radicale/radicale.log 

Einrichtung von Kalendern und Adressbüchern

Nach dem Start ist der Server über die Adresse http://Server-IP_ADRESSE:5232 erreichbar. Mittels einfachem Webinterface lassen sich dort für die zuvor erstellten Benutzer mittels Webbrowser Kalender und Adressbücher erstellen.

Der Radicale Server ist damit grundlegend eingerichtet. Mittesl CalDAV- bzw. CardDAV-fähigem Clientprogramm kann nun auf Kalender und Adressbücher zugegriffen und diese bearbeitet werden.

Erweiterte Konfiguration (optional)

Absicherung der Verbindung mittels TLS

Die Verbindung zum Radicale-Server kann recht einfach mit einer Transportverschlüsselung (TLS) versehen werden. Dazu in der /etc/radicale/config im Abschnitt [server] die folgenden Änderung einpflegen:

ssl = True
certificate = /etc/ssl/certs/ssl-cert-snakeoil.pem
key = /etc/ssl/private/ssl-cert-snakeoil.key
protocol = PROTOCOL_TLSv1_3

Damit wird Radicale angewiesen für die Verschlüsselung das während der Ubuntuinstallation durch das Paket ssl-cert angelegte selbsignierte Zertifikat und den zugehörigen Schlüssel zu verwenden. Damit Radicale auch auf den Key zugreifen kann, muss der Systembenutzer radicale der Gruppe ssl-cert hinzugefügt werden. Außerdem empfiehlt es sich zwecks Nutzung des Rechnernamens im Zertifikat das Sankeoilzertifikat und den zugehörigen Key nochmals neu zu generieren:

# radicale der Gruppe ssl-cert hinzufügen:
sudo usermod -aG ssl-cert radicale

# Snakeoilzertifikat und Key neu erstellen:
sudo make-ssl-cert generate-default-snakeoil --force-overwrite 

Anschließend Radicale neustarten. Mittels

openssl s_client --connect IP-Adresse-des-Radicale-Rechners:5232 -tls1_2
openssl s_client --connect IP-Adresse-des-Radicale-Rechners:5232 -tls1_3 

kann man die ordnungsgemäße Bereitstellung von TLS am Server überprüfen. In beiden Fällen sollte ein sog. Handshake zustande kommen.

Hinweis:

Die Verwendung des Snakeoilzertifikates ist die einfachste Möglichkeit unter Verwendung der bereits von Ubuntu bereitgestellten Mittel, um ein Zertifikat für Radicale bereitzustellen. Selbstverständlich kann man auch ein anderes TLS-Zertifikat verwenden - z.B. das einer eigenen CA.

Versionierung des Kalender- und Adressbuchspeichers mittels git

Radicale erlaubt es sehr einfach den Kalender- und Adressbuchspeicher mittels Git zu versionieren:

  1. Sofern noch nicht geschehen, installiert man git.

  2. Anschließend stoppt man den Radicale Server.

  3. Dann legt man in der /etc/radicale/config im Abschnitt [storage] den Eintrag hook wiefolgt an:

        hook = ([ -d .git ] || git init) && git add -A && (git diff --cached --quiet || git commit -m "Changes by "%(user)s) 
  4. Nun wechselt man in eine Shell des Systembenutzers radicale und initialisiert im Verzeichnis /var/lib/radicale/collections ein leeres Git-Repository. Dazu führt man der Reihe nach die folgenden Befehle aus:

        sudo -s
        cd /var/lib/radicale/collections
        exec su -s "$SHELL" radicale
        git init
        git config user.name radicale
        git config user.email radicale@radicale.lan
        nano .gitignore 

    Hinweis:

    Da es sich in diesem Fall nicht um ein öffentliches Git-Repository handelt, spielt es keine Rolle, welche Angaben man bei den Befehlen "git config user.name" und "git config user.email" macht. Die beiden Konfigurationsmerkmale sind aber zwingende Voraussetzung, damit git funktioniert.

  5. In die Datei .gitignore fügt man folgendes ein:

        .Radicale.cache
        .Radicale.lock
        .Radicale.tmp-*
  6. Nun verlässt man die radicale-Shell wieder:

        exit 
  7. Schließlich startet man radicale wieder.

Fortan wird bei jeder Änderung eines Kalenders oder Adressbuchs ein git-commit ausgeführt. Weitere Details zur Versionierung unter Git.

Experten-Info:

Neben der Versionierung mit git lassen sich über das Setzen von "hook =" beliebige andere Kommandos auf den Daten-Ordner von Radicale anwenden, die bei einem Kalender- oder Adressbuch-Ereignis ausgelöst werden.

Benutzerrechte

Zuteilen von Benutzerrechten

In der Grundkonfiguration folgt Radicale der "owner_only"-Direktive. D.h. der jeweilige Benutzer kann nur seine eigenen Kalender und Adressbücher lesen und schreiben. Konfiguriert werden die Berechtigungen dabei standardmäßig über die Datei /etc/radicale/rights. Hier ein Auszug aus der Original-Konfiguration:

# write access to own files for each user
[owner-write]
user: .+
collection: ^%(login)s(/.+)?$
permission: rw

[Sektions-Bezeichnung] Ist frei wählbar, darf aber nur jeweils ein mal in der Datei verwendet werden.
user gibt den oder die Benutzer an auf welche die folgenden Rechte angewandt werden.
collection gibt den Pfad zur Ressource an auf die sich die Rechte beziehen - relativ zum collection-root. Es darf dabei kein führender oder kein abschließender "/" verwendet werden. Die ausschließliche Angabe von collection = entspricht dem collection-root.
permission r = Leseberechtigung, w = Schreibberechtigung, permission = entspricht Zugriff verweigern.

Für die Angabe von user und collection können Reguläre Ausdrücke verwendet werden.

Die Datei wird von Radicale der Reihe nach von Anfang bis Ende verarbeitet und die Rechte der zuerst zutreffenden Rechte-Sektion in der Datei werden angewandt. Deshalb muss man bei der Berarbeitung der Rechte-Datei darauf achten, dass speziellere Berechtigungen vor allgemeineren aufgeführt werden, andernfalls greifen sie unter Umständen nicht wie erwartet.

Praktische Konfigurationsbeispiele

  • Die Benutzerinnen anna und paula sollen auf den Kalender mit der UID 9834d8c8-f1fc-b64c-4bd4-ef1f78abbaf6 von heike lesend und schreibend zugreifen können:

       [heike-cal-public]
       user = anna|paula
       collection = heike/9834d8c8-f1fc-b64c-4bd4-ef1f78abbaf6
       permission = rw
  • Die Benutzerinnen anna und paula sollen zusätzlich zum vorigen Beispiel auf das Adressbuch mit der UID 2af84cd9-43dd-c4d9-2423-08c217afdbcc von heike lesend und schreibend zugreifen können:

       [heike-public]
       user = anna|paula
       collection = heike/2af84cd9-43dd-c4d9-243f-08c217afdbcc|heike/9834d8c8-f1fc-b64c-4bd4-ef1f78abbaf6
       permission = rw
  • Die Benutzerin heike soll lesend auf alle Ressourcen von anna und paula zugreifen dürfen:

       [heike-read-all-anna-paula]
       user = heike
       collection = anna(/.*)?|paula(/.*)?
       permission = r
  • Dem Benutzer marc soll der Zugriff auf sämtliche Ressourcen verweigert werden:

       [deny-all]
       user = marc
       collection = .* 
       permission =

Kalender und Adressbücher teilen (pragmatische, inoffizielle Lösung)

Anstatt die Rechte der Benutzer zum Teilen von Kalendern und Adressbüchern mühevoll über die offizielle Rechte-Konfiguration zu setzen, scheint unter Nutzern von Radicale das Teilen mittels symbolischer Links häufig gebräuchlich zu sein (siehe z.B. Problem-Diskussion auf der github-Seite des Entwicklers 🇬🇧).

Soll z.B. Benutzer02 auf eine Ressource von Benutzer01 zugreifen können, so legt man folgenden symbolischen Link an:

# Symbolischen Link erstellen
sudo ln -s /var/lib/radicale/collections/collection-root/<Benutzer01>/<Geteilte-Ressource>/ /var/lib/radicale/collections/collection-root/<Benutzer02>/<Geteilte-Ressource>

# Systemnutzer radicale zum Besitzer des symbolischen Links machen
sudo chown -h radicale:radicale /var/lib/radicale/collections/collection-root/<Benutzer02>/<Geteilte-Ressource> 

Hinweis:

Bei dieser Methode erhält Benutzer02 Schreib- und Leserechte auf die verlinkte Ressource von Benutzer01. Sollen etwa nur Leserechte erteilt werden, so geht dies nur über die Rechtekonfiguration.

Weitere Konfigurationsoptionen

Neben den bereits vorgestellten Konfigurationsmöglichkeiten erlaubt Radicale noch die Benutzerverwaltung mittels WSGI über einen entsprechenden Server (z.B. Gunicorn oder Apache 2.4 mit mod_wsgi ) oder die Benutzerverwaltung unter Verwendung eines Reverse Proxy.

Details dazu findet man in der Dokumentation 🇬🇧.

Konfiguration des Clients

Aufgrund der Vielfalt der möglichen Clients wird hier nur auf die Grundstruktur eingegangen, alles andere findet sich auf in der offiziellen Dokumentation 🇬🇧.

Loggt man sich im Webinterface von Radicale als Benutzer ein, so wird dort für jeden Kalender und jedes Adressbuch eine URL angegeben, die sich aus der Server-Adresse, dem Benutzernamen und einer UID pro Kalender und Adressbuch zusammensetzt, also z.B. für die Benutzerin anna:

https://10.10.10.250:5232/anna/0b41234d-a9b2-317d-9a7d-58259212c39c

Stets anzugeben ist beim Einrichten im Client-Programm der allgemeine Adressteil des Radical Servers, also aus obigem Beispiel https://10.10.10.250.5232. Die weitere Angabe der Adresse unterscheidet sich dann von Client zu Client:

Wichtig ist auch, dass man für Kalender als Format stets CalDAV und für Adressbücher stets CardDAV wählt.

Problembehandlung

Detailierte Protokollierung

Hat man Probleme mit dem Start von Radicale, so kann man den Detailgrad des Protokolls erhöhen. Dazu ändert man in der Datei /etc/radicale/logging die Einstellung level auf DEBUG.

Die häufigsten Probleme beim Start von Radicale hängen mit unzureichenden Rechten des Systembenutzers radicale zusammen. Dieser muss auf alle Dateien im Verzeichnis /var/lib/radicale/collections lesend und schreibend zugreifen können. Er muss außerdem Leseberechtigungen für die Dateien in /etc/radicale sowie - sofern genutzt - für TLS-Zertifikat und -Key haben.

Kommt man allein durch ändern der Rechte nicht weiter, so hilft oft schon ein Blick auf die Probleme-Seite des Entwicklers auf github 🇬🇧.

Problem mit TLS-Zertifikat in Thunderbird

Möchte man mittels Thunderbird Kalender oder Adressbücher von Radicale einrichten und verwendet man dabei TLS auf dem Radicaleserver, so muss man bevor man einen Kalender oder ein Adressbuch in Thunderbird einrichtet unbedingt das Zertifikat des Radicaleserver vorher in Thunderbird manuell importieren. Das automatische Herunterladen und Speichern des Zertifikats im Rahmen der Einrichtung des Kalenders oder Adressbuchs scheitert aufgrund eines Bug dagegen.

Zum manuellen Importieren in Thunderbird "Einstellungen → Datenschutz & Sicherheit → Zertifikate → Zertifikate verwalten". In der Zertifikatverwaltung wählt man den Reiter "Server" und klickt auf "Ausnahme hinzufügen...". Dann gibt man als Adresse https://Server-IP_ADRESSE:5232 ein, klickt auf "Zertifikat herunterladen" und anschließend auf "Sicherheits-Ausnahmeregel bestätigen".

Anschließend lassen sich Kalender und Adressbücher des Radicalservers erfolgreich hinzufügen.

Alternativen