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 E-Mail, Kalender, Kontakte, Notizen und Aufgaben erweitern.

Die aktuellen Beschreibungen basieren auf Nextcloud in der Version 16.

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, ...)

TODO

Daran muss noch gearbeitet werden:

  • Beschreibung der Groupware-Funktionalitäten

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 "intern"

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 (7.3) als das vom Debian-Repository (7.0) installieren
apt install apt-transport-https lsb-release
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update
apt install php7.3 php7.3-common php7.3-cli

# Vorgeschlagene Pakete aus Nextcloud-Dokumentation
apt install apache2 mariadb-server libapache2-mod-php7.3
apt install php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-mbstring
apt install php7.3-intl php-imagick php7.3-xml php7.3-zip

# Zusätzlich für unser Konzept notwendig:
apt install php7.3-ldap php7.3-apcu

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

Datenbank-Server konfigurieren

vim /etc/mysql/my.cnf
Datei /etc/mysql/my.cnf
# Ersetzen Sie die Inhalte der Datei mit folgenden Inhalten:

[server]
skip-name-resolve
innodb_buffer_pool_size = 128M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
query_cache_type = 1
query_cache_limit = 2M
query_cache_min_res_unit = 2k
query_cache_size = 64M
tmp_table_size= 64M
max_heap_table_size= 64M
slow-query-log = 1
slow-query-log-file = /var/log/mysql/slow.log
long_query_time = 1

[client-server]
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_large_prefix=on
innodb_file_format=barracuda
innodb_file_per_table=1

Starten Sie im Anschluss den Datenbankserver neu:

systemctl restart mariadb.service

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;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY '<dbuser-nextcloud-pw>';
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

<Directory /var/www/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud
 Satisfy Any
</Directory>

<IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
# wichtig: "nextcloud.ihre-schule.de" in den beiden folgenden Zeilen
# mit der von Ihnen genutzten Subdomain für die Nextcloud austauschen
Redirect 301 /.well-known/carddav https://nextcloud.ihre-schule.de/remote.php/dav
Redirect 301 /.well-known/caldav https://nextcloud.ihre-schule.de/remote.php/dav
</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

Im Anschluss aktivieren Sie 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 ZIP-Datei verwenden:
wget https://download.nextcloud.com/server/releases/nextcloud-???.zip

# ZIP-Datei entpacken - Achtung verwenden Sie den richten Namen:
unzip nextcloud-???.zip

# Die ZIP-Datei wird nicht mehr benötigt und kann gelöscht werden:
rm nextcloud-???.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 verschieben Sie den Ordner, in dem später die Dateien aller Benutzer abgelegt werden, an eine andere Stelle auf Ihrem Server:

mv /var/www/nextcloud/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:
'datadirectory' => '/srv/nextcloud-data',
'ldapUserCleanupInterval' => 15,
'memcache.local' => '\OC\Memcache\APCu',
'share_folder' => '/Mit mir geteilt',
'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',
  ),

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=Administrator,CN=Users,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!)
    • Benutzer
      • Belassen Sie die Standardeinstellungen.
    • Anmelde-Attribute
      • Haken bei: LDAP-/AD-Benutzername:
    • Gruppen
      • Wählen Sie die Gruppen aus, welche für die Datei- bzw. Freigbeverwaltung 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
      • Experte
        • Interner Benutzername: userPrincipalName

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 einfügen:
*/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)

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, als Administrator in den Einstellungen im Bereich "Teilen" den Haken bei "Weiterverteilen erlauben" zu entfernen.

Über die oben dargestellten Freigaben hinaus kann jeder Benutzer eigene Dateien und Ordner (außerhalb des Ordner "Mit mir geteilt") mit beliebigen Personen und Gruppen teilen.

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: 2020-07-16 13:39