[[Vorlage(Getestet, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor:einen Editor öffnen] }}} [[Inhaltsverzeichnis(4)]] [[Bild(Radicale/Radicale_Logo.png, 48, align=left)]] [https://radicale.org/ Radicale] {en} 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. {{{#!vorlage Paketinstallation radicale, universe 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 }}} {{{#!vorlage Experten Mittels Python-Plugins ist es möglich, Radicale um weitere Methoden zur Benutzer-Authentifizierung zu erweitern. Details kann man bei Bedarf der [https://radicale.org/2.1.html#documentation/plugins Dokumentation] {en} entnehmen. }}} === Anlegen von Benutzern === Nach dem Anpassen der Authentifizierungsmethode können Benutzer wie folgt angelegt werden: {{{#!vorlage Befehl # 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`: {{{#!vorlage Befehl 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/''' entfernt - also z.B. für `BENUTZER02`: {{{#!vorlage Befehl # 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 }}} {{{#!vorlage Warnung 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: {{{#!vorlage Befehl # 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 {{{#!vorlage Befehl sudo systemctl enable radicale.service }}} ein. Beim nächsten Neustart des Systems wird dann Radicale via [:systemd:] automatisch gestartet. {{{#!vorlage 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: {{{#!vorlage Befehl # 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 [#Konfiguration_des_Clients 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 [:Rechnername: Rechnernamens] im Zertifikat das Sankeoilzertifikat und den zugehörigen Key nochmals neu zu generieren: {{{#!vorlage Befehl # 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 [#Manuell-starten-stoppen neustarten]. Mittels {{{#!vorlage Befehl 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. [wikipedia:SSL-Verschlüsselung: Handshake] zustande kommen. {{{#!vorlage 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 [:CA: 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, [:Git/#Installation: installiert] man git. 1. Anschließend [#Manuell-starten-stoppen stoppt] man den Radicale Server. 1. 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) }}} 1. 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:{{{#!vorlage Befehl 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}}} {{{#!vorlage 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.}}} 1. In die Datei .gitignore fügt man folgendes ein:{{{ .Radicale.cache .Radicale.lock .Radicale.tmp-*}}} 1. Nun verlässt man die radicale-Shell wieder:{{{#!vorlage Befehl exit}}} 1. Schließlich [#Manuell-starten-stoppen startet] man radicale wieder. Fortan wird bei jeder Änderung eines Kalenders oder Adressbuchs ein git-commit ausgeführt. Weitere Details zur Versionierung unter [:Git:]. {{{#!vorlage Experten 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 }}} {{{#!vorlage Tabelle `[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 [:grep: 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. [https://github.com/Kozea/Radicale/issues/1137 Problem-Diskussion auf der github-Seite des Entwicklers] {en}). Soll z.B. '''Benutzer02''' auf eine Ressource von '''Benutzer01''' zugreifen können, so legt man folgenden symbolischen Link an: {{{#!vorlage Befehl # Symbolischen Link erstellen sudo ln -s /var/lib/radicale/collections/collection-root/// /var/lib/radicale/collections/collection-root// # Systemnutzer radicale zum Besitzer des symbolischen Links machen sudo chown -h radicale:radicale /var/lib/radicale/collections/collection-root// }}} {{{#!vorlage 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 [#Zuteilen_von_Benutzerrechten Rechtekonfiguration]. }}} === Weitere Konfigurationsoptionen === Neben den bereits vorgestellten Konfigurationsmöglichkeiten erlaubt Radicale noch die Benutzerverwaltung mittels [wikipedia:Web_Server_Gateway_Interface:WSGI] über einen entsprechenden Server (z.B. [:Gunicorn:] oder [:Apache_2.4:] mit [:Apache/mod_wsgi:mod_wsgi] ) oder die Benutzerverwaltung unter Verwendung eines [wikipedia:Reverse_Proxy: Reverse Proxy]. Details dazu findet man in der [https://radicale.org/2.1.html#documentation/reverse-proxy Dokumentation] {en}. = Konfiguration des Clients = Aufgrund der Vielfalt der möglichen Clients wird hier nur auf die Grundstruktur eingegangen, alles andere findet sich auf in der [https://radicale.org/2.1.html#documentation/clients offiziellen Dokumentation] {en}. 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 [:Thunderbird/Lightning: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 [:Rechte: 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 [https://github.com/Kozea/Radicale/issues github] {en}. == 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 [wikipedia:Programmfehler#„Bug“_als_Synonym_für_Programmfehler: 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 = * [http://www.k5n.us/webcalendar.php WebCalendar] {en} - Kalenderserver ([packages:webcalendar:]) * [:DAViCal:] * [:Archiv/SOGo:SOGo] - Groupware mit CalDAV-Implementation * [https://www.tine20.com/ Tine 2.0] {de} {en} - Groupware und Customer Relationship Management (CRM) mit CalDAV-Implementation = Links = * [https://radicale.org/ Projektseite einschließlich Dokumentation] {en} * [https://github.com/Kozea/Radicale/issues Bug-Tracker] {en} - Radicale Probleme melden, Problemlösungen finden auf der Github-Seite der Entwickler #tag: Netzwerk, Server, Kommunikation, Kalender, Adressbuch, Python