Radicale 2
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
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:
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.
radicale (universe)
python3-bcrypt
python3-passlib
apache2-utils
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:
Sofern noch nicht geschehen, installiert man git.
Anschließend stoppt man den Radicale Server.
Dann legt man in der /etc/radicale/config im Abschnitt
[storage]
den Eintraghook
wiefolgt an:hook = ([ -d .git ] || git init) && git add -A && (git diff --cached --quiet || git commit -m "Changes by "%(user)s)
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.In die Datei .gitignore fügt man folgendes ein:
.Radicale.cache .Radicale.lock .Radicale.tmp-*
Nun verlässt man die radicale-Shell wieder:
exit
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:
Wohl am häufigsten gibt man die vollständige Adresse aus dem Radicale Benutzerinterface an - so z.B. im Lightning Kalender von Thunderbird:
https://10.10.10.250:5232/anna/0b41234d-a9b2-317d-9a7d-58259212c39c
Notwendig kann aber auch sein:
https://10.10.10.250:5232/anna
oder:
https://10.10.10.250:5232/0b41234d-a9b2-317d-9a7d-58259212c39c
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¶
WebCalendar 🇬🇧 - Kalenderserver (webcalendar)
SOGo - Groupware mit CalDAV-Implementation
Tine 2.0 🇩🇪 🇬🇧 - Groupware und Customer Relationship Management (CRM) mit CalDAV-Implementation
Links¶
Bug-Tracker 🇬🇧 - Radicale Probleme melden, Problemlösungen finden auf der Github-Seite der Entwickler