Nextcloud
Mit der Open-Source-Software Nextcloud speichern Sie Ihre Dateien datenschutzrechtlich einwandfrei auf Ihrem eigenen Server, genießen aber trotzdem die vielfältigen Nutzungs- und Zugriffsmöglichkeiten bekannter Cloudspeicher-Systeme wie Dropbox, Google Drive und Microsoft OneDrive. Die Software lässt sich über Apps im Administrationsbereich um Groupware-Funktionalitäten wie Chat, Videotelefonie, E-Mail, Kalender, Kontakte, Notizen und Aufgaben erweitern.
Die aktuellen Beschreibungen basieren auf Nextcloud in der Version 19.
Erfüllte Anforderungen
Diese Anforderungen erfüllt das Schulnetzkonzept:
- Zugriffsmöglichkeiten: Web, WebDAV (Netzlaufwerke), App, Synchronisationsclient
- Webzugriff
- Verschlüsselter Zugriff via https in Kombination mit einem Let's-Enrypt-Zertifikat
- Wohlgeformte URLs (ohne index.php)
- Anbindung an vorhandenes Benutzer- und Gruppenverzeichnis (Samba via LDAP)
- personalisierter Zugriff je Benutzer
- gemeinsame Verzeichnisse auf Basis von Gruppenzugehörigkeiten
- granulare Einstellung von Zugriffsberechtigungen passend zum Einsatzzweck (nur lesen, schreiben, ...)
Installation
Virtuelle Maschine erzeugen
Verwenden Sie hierzu die Beschreibung zur Installation eines virtuellen Linux-Debians.
Dimensionierungsbeispiel der virtuellen Maschine für 750 Benutzer:
- 2 CPUs
- 300 GB Festplattenspeicher
- 8 GB Arbeitsspeicher
- 1 Netzwerkkarte mit Zugriff auf das Netzwerk LAN_SERVER
Voraussetzungen für Zugriff von außerhalb der Schule
- Provider für öffentliche Domäne für Zugriff von außen
- z. B. Subdomain ihrer Schuldomain: nextcloud.ihre-schule.de
- Möglichkeit des Setzens von A-Name bzw. C-Name-Einträgen
- Notwendige externe Router-Ports: 80, 443
- Eine gute Internetanbindung, v. a. was die Uploadgeschwindigkeit anbelangt, sodass Zugriffe von außen in angemessener Zeit abgearbeitet werden können.
Notwendige Pakete installieren
# Notwendige Tools
apt install sudo zip unzip -y
# Aktuelleres PHP (8.2) als das vom Debian-Repository (7.3) installieren
sudo apt -y install lsb-release apt-transport-https ca-certificates wget
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
apt update
apt install php8.2 php8.2-common php8.2-cli
# Vorgeschlagene Pakete aus Nextcloud-Dokumentation
apt install apache2 mariadb-server libapache2-mod-php8.2
apt install php8.2-gd php8.2-mysql php8.2-curl php8.2-mbstring php8.2-intl
apt install php8.2-gmp php8.2-bcmath php-imagick php8.2-xml php8.2-zip
apt install imagemagick
# Vorgeschlagene Cache-Lösung aus Nextcloud-Dokumentation für einzelnen Server
# APCu als lokalen Cache
# Redis als verteilten Cache und zum Sperren von Transaktionsdateien
apt install php-apcu redis-server php-redis
# PHP-Modul für LDAP-Zugriff:
apt install php8.2-ldap
Datenbankserver (MariaDB/MySQL) einrichten
Zunächst starten Sie einen textbasieren Assistenten zur Absicherung Ihres Datenbankservers.
Dabei vergeben Sie bitte ein eigenes Passwort für den Datenbank-User root. Wenn Sie im weiteren Verlauf in einem Konsolenbefehl die Zeichenfolge <dbuser-root-pw> sehen, dann ersetzen Sie diese bitte mit Ihrem selbst vergebenen Passwort.
mysql_secure_installation
# Bitte tätigen Sie folgende --> Angaben:
# Passwort für Datenbank-User root festlegen
# Remove anonymous users? [Y/n] --> y
# Disallow root login remotely? [Y/n] --> y
# Remove test database and access to it? [Y/n] --> y
# Reload privilege tables now? [Y/n] --> y
Nun erzeugen Sie einen Datenbank-User mit dem Namen nextcloud und eine gleichnamige Datenbank.
Dabei vergeben Sie bitte ein eigenes Passwort für den Datenbank-User nextcloud. Wenn Sie im weiteren Verlauf in einem Konsolenbefehl die Zeichenfolge <dbuser-nextcloud-pw> sehen, dann ersetzen Sie diese bitte mit Ihrem selbst vergebenen Passwort.
Schließen Sie jede der folgenden Zeilen einzeln mit Eingabe der Enter-Taste ab.
mysql -uroot -p
<dbuser-root-pw>
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '<dbuser-nextcloud-pw>';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
quit;
Webserver (Apache) einrichten
Zunächst erzeugen Sie eine Konfigurationsdatei für die Nextcloud-Webseite.
Beachten Sie, dass die Datei als letzte Zeile eine Leerzeile hat.
vim /etc/apache2/sites-available/nextcloud.conf
Datei /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName nextcloud.ihre-schule.de
ServerAlias www.nextcloud.ihre-schule.de
<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
</VirtualHost>
#wichtig: Leerzeile als letzte Zeile der Datei!
Die Default-Konfiguration des Webservers deaktivieren und die Konfiguration für die Nextcloud aktivieren:
a2dissite 000-default.conf
a2ensite nextcloud.conf
In den PHP-Einstellungen für Apache muss noch der Default-Wert für das Memory-Limit auf 512 MB erhöht werden:
vim /etc/php/8.2/apache2/php.ini
Datei /etc/php/8.2/apache2/php.ini
# Die nachfolgenden Zeilen finden und wie folgt abändern:
upload_max_filesize = 16G
post_max_size = 16G
memory_limit = 512M
output_buffering = 0
vim /etc/php/8.2/cli/conf.d/20-apcu.ini
Datei /etc/php/8.2/cli/conf.d/20-apcu.ini
# einfügen:
apc.enable_cli=1
Im Anschluss aktivieren Sie die für den Betrieb von Nextcloud notwendige Apache-Module und starten den Webserver neu:
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
systemctl restart apache2
Nextcloud-Dateien herunterladen und entpacken
Suchen Sie auf der Downloadseite von Nextcloud nach dem aktuellsten Downloadlink für die ZIP-Datei von Nextcloud und laden diese auf der Konsole mit dem Programm wget herunter:
# In das www-Verzeichnis des Webservers wechseln
cd /var/www/
# Achtung: hier den selbst recherchierten
# aktuellen Link zur aktuellen ZIP-Datei verwenden:
wget https://download.nextcloud.com/server/releases/latest.zip
# ZIP-Datei entpacken - Achtung verwenden Sie den richten Namen:
unzip latest.zip
# Die ZIP-Datei wird nicht mehr benötigt und kann gelöscht werden:
rm latest.zip
Dateiberechtigungen anpassen
chown -R www-data:www-data /var/www/nextcloud/
find /var/www/nextcloud/ -type d -exec chmod 750 {} \;
find /var/www/nextcloud/ -type f -exec chmod 640 {} \;
Die Benutzerdateien außerhalb des Ordners /var/www aufbewahren
Zur Steigerung der Sicherheit erstellen wir den Ordner zur Aufbewahrung der Dateien aller Nextcloud-Benutzer außerhalb des www-Verzeichnisses:
mkdir /srv/nextcloud-data
chown www-data:www-data /srv/nextcloud-data/
Beenden der Nextcloud-Installation
- Rufen Sie die URL Ihrer Nextcloud auf, z. B.: nextcloud.ihre-schule.de
- Legen Sie ein Administrator-Konto für Ihre Nextcloud an
- Tätigen Sie folgende Angaben:
- Datenverzeichnis: /srv/nextcloud-data
- Datenbank: MySQL/MariaDB
- Datenbank-Benutzer: nextcloud
- Datenbank-Passwort: <dbuser-nextcloud-pw>
- Datenbank-Name: nextcloud
- Datenbank-Host: localhost
Anpassen der Konfigurationsdatei Ihrer Nextcloud
vim /var/www/nextcloud/config/config.php
Datei /var/www/nextcloud/config/config.php
# Folgende Einstellungen - falls noch nicht vorhanden - ergänzen/abändern:
'trusted_domains' =>
array (
0 => 'nextcloud.ihre-schule.de',
# ggf. wollen Sie unter den trusted Domains die www-Subdomäne ergänzen:
1 => 'www.nextcloud.ihre-schule.de',
),
'ldapUserCleanupInterval' => 15,
# Lokaler Cache
'memcache.local' => '\OC\Memcache\APCu',
# Verteilter Cache + Sperren von Transaktionsdateien
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
'overwrite.cli.url' => 'https://nextcloud.ihre-schule.de/',
'overwriteprotocol' => 'https',
'htaccess.RewriteBase' => '/',
'trusted_proxies' =>
array (
# Tragen Sie hier die LAN_SERVER-IP des Reverse-Proxies (OPNsense) ein: z. B. 10.1.100.1
0 => '10.1.100.1',
),
'forwarded_for_headers' =>
array (
0 => 'HTTP_X_FORWARDED_FOR',
),
# Mit nachfolgenden beiden Angaben landen alle Freigaben für einen Benutzer
# automatisch im Ordner 'Mit mir geteilt', ohne dass der Nutzer hierzu
# explizit zustimmen muss.
'share_folder' => '/Mit mir geteilt',
'sharing.enable_share_accept' => false,
vim /var/www/nextcloud/.user.ini
Datei /var/www/nextcloud/.user.ini
# einfügen:
memory_limit=512M
index.php aus URL entfernen
Wenn Sie in der Adresszeile Ihrer Nextcloud die unschöne Angabe index.php entfernen wollen, führen Sie folgende Befehle aus:
cd /var/www/nextcloud
sudo -u www-data php occ maintenance:update:htaccess
Installation und Konfiguration der LDAP-Verbindung zum Samba-Server
Freilich ließe sich die Nextcloud auch mit der integrierten Benutzer- und Gruppenverwaltung betreiben. Unser Schulnetzkonzept sieht aber vor, die Benutzer und Gruppen auch für andere Dienste zu verwenden (personalisiertes WLAN über Freeradius). Damit der Benutzerbestand nun nicht zweimal gepflegt werden muss, ist der Betrieb eines gesonderten Benutzer- und Gruppenverzeichnisses (Samba-Server) die ökonomischere Variante.
- Melden Sie sich bei Ihrer Nextcloud als Administrator an, klicken Sie auf Ihr Benutzer-Icon und wählen den Menüpunkt "Apps".
- Suchen Sie unter App-Pakete nach "LDAP user and group backend" und aktivieren Sie dieses.
- Stellen Sie vor dem nächsten Schritt sicher, dass der Samba-Server über eine verschlüsselte Verbindung erreichbar ist (s. dazu Anleitung Samba-Server).
- Nun können Sie mit der LDAP-Einrichtung beginnen. Begeben Sie sich hierzu zu den Einstellungen und darin zum Punkt LDAP / AD Integration:
- Server
- Host: ldaps://ldap.ihre-schule.de
- Port: 636
- Benutzer-DN: CN=svc_nextcloud,OU=services,OU=Users,OU=School,DC=schulnetz,DC=intra
(Passen Sie die an Ihre Installation an!) - Passwort: <sambauser-Administrator-pw>
- Basis-DN: DC=schulnetz,DC=intra
(Passen Sie die Angaben an Ihre Installation an!)
- Host: ldaps://ldap.ihre-schule.de
- Benutzer
- Sofern Sie im Samba-Server einer Gruppe "nextcloud" angelegt haben und die Nextcloud nur für zu dieser Gruppe zugeordneten Benutzern zulassen wollen, wählen Sie bei "Nur aus diesen Gruppen:" die Gruppe "nextcloud" aus.
- Anmelde-Attribute
- Haken bei: LDAP-/AD-Benutzername:
- Gruppen
- Nur diese Objektklassen: group
- Wählen Sie bei "Nur aus diesen Gruppen" jene Gruppen aus, welche für die Datei- bzw. Freigabeverwaltung für Sie relevant sind, z. B. schueler, lehrer, 5a, ...
- Fortgeschritten
- Ordnereinstellungen:
- Anzeigenamen des Benutzers: displayName
- Basis-Benutzerbaum: OU=Users,OU=School,DC=schulnetz,DC=intra
(Passen Sie die Angaben an Ihre Installation an!) - Anzeigenamen der Gruppe: cn
- Basis-Gruppenbaum: OU=Groups,OU=School,DC=schulnetz,DC=intra
(Passen Sie die Angaben an Ihre Installation an!) - Assoziation zwischen Gruppe und Benutzer: member(AD)
- Spezielle Eigenschaften
- Kontingent Feld: postOfficeBox
(= Quota; wird im LDAP-Account-Manager je Benutzer bei Postfach hinterlegt; Beispiele: 500 MB, 1 GB, ...) - E-Mail-Feld: mail
- Kontingent Feld: postOfficeBox
- Experte
- Interner Benutzername: userPrincipalName
- Ordnereinstellungen:
- Server
Einrichtung der Hintergrundaufgaben
Damit die Nextcloud reibungslos funktioniert muss sie im Hintergrund diverse Aufgaben erledigen. Der effektivste Weg dafür ist das Ausführen der Aufgaben als Benutzer www-data über einen Cronjob vom System anzustoßen:
crontab -u www-data -e
Datei crontab
# am Ende der Datei folgende Zeile(n) einfügen:
# Ausführung von cron.php alle 5 Minuten:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Nun müssen Sie als Administrator in den Einstellungen der Nextcloud diese Variante der Hintergundaufgaben-Erledigung noch aktivieren:
- Begeben Sie sich zum Punkt Grundeinstellungen.
- Wählen Sie unter Hintergrund-Aufgaben die Option "Cron".
Anlage von Ordnern und Freigaben
Zur gemeinsamen Zusammenarbeit an Dateien und Ordnern in der Schule schlage ich folgende Ordnerstruktur (samt Freigaben) vor, welche Sie als Nextcloud-Administrator anlegen:
- Schule
- Klassen (Schreibzugriff für Gruppe Lehrer)
- 5a (Schreibzugriff für Gruppe 5a)
- 5b (Schreibzugriff für Gruppe 5b)
- ...
- Für Lehrer (Schreibzugriff für Gruppe Lehrer)
- Für Schüler (Schreibzugriff für Gruppe Lehrer, Lesezugriff für Gruppe Schüler)
- Klassen (Schreibzugriff für Gruppe Lehrer)
Die an einen Benutzer freigegebenen Ordner erscheinen in dessem Startverzeichnis im Ordner "Mit mir geteilt".
Damit Benutzer an sie geteilte Ordner nicht an andere weiterverteilen können (z. B. Schüler der 5a teilt den Klassenordner an Schüler der 5b) empfiehlt es sich, bei den Freigabeeinstellungen des jeweiligen Ordners den Haken bei "Weiterverteilen erlauben" zu entfernen.
Über die oben dargestellten Freigaben hinaus kann jeder Benutzer eigene Dateien und Ordner (außerhalb des Ordners "Mit mir geteilt") mit beliebigen Personen und Gruppen teilen.
Wenn ein Benutzer einen Freigegebenen Ordner (versehentlich) entfernt hat, findet er diesen wieder im linken Seitenmenü unter "Freigaben → Mit Ihnen geteilt", "Freigaben → Gelöschte Freigaben" oder "Freigaben → Ausstehende Freigaben".
Nextcloud verschlüsselt über vollqualifizierte Domänennamen erreichbar machen
Damit die Nextcloud nicht über Ihre IP sondern über z. B. https://nextcloud.ihre-schule.de sowohl von außen als auch von innerhalb des Schulhauses aufgerufen werden kann, lesen Sie in der Anleitung zu OPNsense folgende Abschnitte:
- Vollqualifizierte Domänennamen für Schulnetzdienste
- Installation und Konfiguration des Reverse-Proxy-Servers
- Installation und Konfiguration der automatisierten Zertifikatsverwaltung
Wartung
Update der Nextcloud
Als Nextcloud-Administrator können Sie in den Einstellungen unter "Übersicht" in Erfahrung bringen, ob für Ihre Nextcloud Updates bereitstehen. Diese spielen Sie dieses am besten über die Konsole ein, da die Fertigstellung des Updates ohnehin den Umgang mit der Konsole verlangt. Es empfiehlt sich vor dem Update im Virtualisierungshost einen Snapshot der Nextcloud-VM zu erstellen.
cd /var/www/nextcloud
sudo -u www-data php updater/updater.phar
# Die Fragen zum Update mit Y (Yes) beantworten.
# Die Frage nach Beibehaltung des Wartungsmodus mit N (No) beantworten.
- Testen Sie Ihre aktualisierte Nextcloud.
- Nach erfolgreichem Test können Sie ggf. den zuvor erstellten Snapshot wieder entfernen.
Gelöschte Samba- bzw. LDAP-Benutzer auch in der Nextcloud löschen
Wenn Sie auf dem mit der Nextcloud über LDAP verbundenen Samba-Server einen Benutzer löschen, kann sich dieser zwar nicht mehr in der Nexcloud anmelden, aber seine Daten sind nach wie vor im Ordner /srv/nextcloud-data vorhanden.
Vorneweg ein Hinweis: Wenn Sie viele Nutzer auf einmal löschen, dauert es ein wenig, bis die Nextcloud dies erkannt hat. Laut Ihrer Festlegung in der config.php (s. oben: ldapUserCleanupInterval) sucht die Nextcloud alle 15 Minuten nach gelöschten Benutzern. Je Interval kann für maximal 50 Benutzer festgestellt werden, dass diese vom Benutzerverzeichnis gelöscht wurden.
→ Die Feststellung von 500 gelöschten Benutzern dauert somit: 500 User / 50 User/Interval = 10 Intervalle
→ 10 Intervalle * 15 Minuten/Intervall = 150 Minuten
Zur Anzeige der Benutzer, welche die Nextcloud als "zu löschend" erkannt hat, führen Sie folgenden Befehl aus:
cd /var/www/nextcloud
sudo -u www-data php occ ldap:show-remnants
Um die User zu löschen führen Sie den nachfolgenden Befehl aus.
Bitte beachten Sie, dass es dabei zu Fehlermeldungen kommt. Diese sind lediglich der Tatsache geschuldet, dass der Befehl zeilenweise die Nextcloud-Ausgabe der zu löschenden User abarbeitet. Da die Ausgabe auch Zeilen ohne einen Benutzer beinhaltet (Überschrift, Trennzeilen), kommt es in diesen zu Fehlern. Diese beeinflussen die Löschung der Benutzer aber nicht.
cd /var/www/nextcloud
sudo -u www-data php occ ldap:show-remnants | while read pipe user line ; do echo $user ; sudo -u www-data php occ user:delete $user ; done
Letzte Aktualisierung der Seite: 2024-02-16 14:17