Voraussetzungen, werden durch die Grundinstallation abgedeckt:

  • Die Grundinstallation ist durchgeführt
  • Netzwerk ist konfiguriert
  • Internetzugriff ist erlaubt (Firewall)
  • root pw ist vergeben
  • Ein weiterer Benutzer ist angelegt
  • Webserver ist installiert
  • SSH Server ist installiert

SSH vorbereiten – root Logins verbieten

nano /etc/sshd/sshd_config

PermitRootLogin yes

Softwareinstallation

apt install sudo open-vm-tools vim mariadb-server ffmpeg imagemagick locate htop ntp ntpdate

Neuen Benutzer anlegen und sudo erlauben

sudo adduser username
sudo adduser username sudo

Uhrzeitsynchronisation

Zuerst setzen wir die korrekte Zeit. Dann tregen wir den Zeitserver in der Konfigurationsdatei ein und starten den Service neu.

ntpdate -u ntp-time.server.de

vi /etc/ntp.conf
server ntp-time.server.de
service ntp start

MariaDB konfigurieren

mysqladmin -u root -p password "pw"
mysql -u root -p
CREATE DATABASE nextcloud
GRANT ALL PRIVILEGES ON nextcloud.* to 'ncuser'@'localhost' IDENTIFIED BY 'newpw'

PHP 8.0 installieren

Die PHP Pakete werden beim Paketmaintainer gehostet: https://deb.sury.org/

https://www.linuxuprising.com/2021/01/apt-key-is-deprecated-how-to-add.html

Zuerst bereiten wr die Umgebung vor, indem wir ein paar Pakete installieren, das PHP Repository von sury hinterlegen und den Signaturkey des Repositorys runterladen.

Dann installieren wir PHP 8 und Zusatzpakete

sudo apt install lsb-release ca-certificates software-properties-common gnupg

sudo echo "deb [signed-by=/usr/share/keyrings/sury-php-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

sudo wget -qO - https://packages.sury.org/php/apt.gpg | sudo tee /usr/share/keyrings/sury-php-archive-keyring.gpg

sudo apt install php8.0
sudo apt install php8.0-{curl,gd,mbstring,xml,zip,mysql,bz2,intl,ldap,smbclient,imap,bcmath,gmp,apcu,memcached,redis,imagick}

php.ini anpassen

vi /etc/php/8.0/apache2/php.ini

upload_max_filesize = 2G
post_max_size = 2G
memory_limit = 2G
output_buffering = 0

Apache vorbereiten (Nextcloud)

https://docs.nextcloud.com/server/latest/admin_manual/installation/source_installation.html

Es wird eine SSL Konfiguration genutzt. Die SSL Keys müssen vorher unter /etc/apache2 abgelegt werden oder an irgendeinem anderen Ort, dann unten die Verzeichnisse anpassen. Der Webserver muss die Dateien lesen können, andere Benutzer dürfen aber auf keinen Fall den privaten Key lesen! Es wird vorausgesetzt, dass der Apache als Benutzer www-data läuft.

chmod 644 /etc/apache2/ssl/domain.de.crt
chmod 644 /etc/apache2/ssl/Intermediate_CA_Bundle.crt
chmod 600 /etc/apache2/ssl/domain.de.key
chown www-data:www-data /etc/apache/ssl/*
a2enmod ssl
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
vi /etc/apache2/sites-available/nextcloud.conf

<VirtualHost *:443>
  Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"
  SSLEngine on

  DocumentRoot /var/www/nextcloud/
  ServerName  daten.domain.de
  ServerAlias datenraum.domain.de

  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
    SSLCACertificateFile /etc/apache2/ssl/Intermediate_CA_Bundle.crt
    SSLCertificateFile /etc/apache2/ssl/domain.de.crt
    SSLCertificateKeyFile /etc/apache2/ssl/domain.de.key
</VirtualHost>
vi /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/nextcloud

        Redirect permanent / https://subdomain.domain.com/

</VirtualHost>
a2ensite nextcloud

systemctl restart apache2

Nextcloud installieren

Nextcloud Paket mit wget runterladen und Dateien nach /var/www/nextcloud entpacken.

chown -R www-data:www-data /var/www/nextcloud/

Nun aktivieren wir die rewrite-Funktion von Nextcloud. Dafür muss die .htaccess-Datei im Stammverzeichnis (/var/www/nextcloud) für den Webserver beschreibbar sein.

vi /var/www/nextcloud/config/config.php

'overwrite.cli.url' => 'https://subdomain.domain.com/',
'htaccess.RewriteBase' => '/',

Das Gebietsschema legen wir auf Deutschland fest.

'default_language' => 'de_DE', #(de_DE = förmliches Sie; de=Du)
'default_locale' => 'de_DE',

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html

Nextcloud Zugriffstoken

Für die Remote API sollte man ein Zugriffstoken aktivieren, sonst können Details über den Server frei aufgerufen werden. Z.B. Benutzeranzahl, Verfügbarer Speicherplatz, etc…

sudo -u www-data php occ config:app:set serverinfo token --value yourtoken

Damit sollte folgender Befehl bei einem Browser, mit dem man nicht gleichzeitig in Nextcloud angemeldet ist eine Fehlermeldung generieren:

https://daten.fps-law.de/ocs/v2.php/apps/serverinfo/api/v1/info

Der API Token wurde erst in der Version 22 eingeführt. Habe die Funktion noch nie genutzt, würde aber ein ausreichend sicheres Token verwenden, da die API mit diesem Token verwendet werden kann, anstatt eines Admin-Users. Also Brute-Force sicher machen!

Nextcloud LDAP Authentifizierung aktivieren

LDAP Löschen von Benutzern

LDAP Benutzer unterliegen in Nextloud speziellen Regeln, was das Löschen der Accounts betrifft. Infos dazu sind hier beschrieben:

https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_auth_ldap_cleanup.html

Man kann die Accounts entweder automatisch löschen lassen, mit einer Konfigurationsoption oder über folgende Befehle manuell:

sudo -u www-data php occ ldap:show-remnants
sudo -u www-data php occ user:delete [user]

LDAP App Installation und konfiguration

App LDAP Integration aktivieren und die Einstellungsseite neu laden. Der Menupunkt LDAP/AD-Integration erscheit links im Menu unter Verwaltung.

Tab Server:

Server = <IP des LDAP Servers>
Port = LDAP Port (Für AD: 389)
Benutzer-DN = CN=_svc_benutzer,OU=ServiceKonten,DC=domain,DC=tld
Passwort = Starkes PW
Base DN = Auf Base-DN ermitteln klicken, wird automatisch aufgelöst, sofern die obigen Daten korrekt sind.

Tab Benutzer:

In dem Tab wird angegeben, welche Benutzer aus dem AD in Nextcloud angezeigt werden.

Nextcloud versucht automatisch alle Gruppen aus dem LDAP Verzeichnis auszulesen. Man kann dann einfach eine Gruppe davon wählen. Mitglieder aus dieser Gruppe dürfen sich dann in Nextcloud anmelden. Sollte das nicht funktionieren, kann man das Filterattribut selbst eingeben. Das lautet für einen Gruppenfilter in etwa so:

(&(|(objectclass=person))(|(|(memberof=CN=Datenraum,CN=Benutzergruppen,DC=domain,DC=tld)(primaryGroupID=7902))))

Die einzelnen Werte müssen natürlich für das enigesetzte AD angepasst werden (Gruppenname/OU/Domain/TLD).

Tab Anmeldeattribute:

Diese Einstellung legt fest, welche Benutzer sich anmelden dürfen.

Analog zu dem obigen LDAP Filter könnte man folgenden Filter verwenden:

((&(&(|(objectclass=person))(|(|(memberof=CN=Datenraum,CN=Benutzergruppen,DC=domain,DC=tld)(primaryGroupID=7902))))(|(samaccountname=%uid)(|(mailPrimaryAddress=%uid)(mail=%uid))))

Tab Gruppen:

Hier wird festgelegt welche AD-Gruppen in Nextcloud angezeigt werden.

E-Mail Feld aus LDAP auslesen

Die Mailadresse steht im AD unter dem LDAP-Feld mail:

Nextcloud Tasks über Cron (optional)

https://docs.nextcloud.com/server/22/admin_manual/configuration_server/background_jobs_configuration.html

Nextcloud schaut standardmäßig bei jedem Seitenaufruf, ob es auszuführende Tasks gibt. Das ist overhead und dazu noch nicht einmal so zuverlässig, wie ein Linux Cron Job.

Daz udie Crontag des Benutzerkontos editieren, unter dem der Webserver läuft. Unter Debian ist das www-data.

crontab -u www-data -e

Dann folgende Zeile einfügen, um den Job alle 5 Minuten laufen zu lassen:

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

Nextcloud Single Sign On mit Azure AD (optional)

https://medium.com/@ntrussell/enable-nextcloud-sso-authentication-through-microsoft-azure-active-directory-saml-abe37d735cd

Nextcloud Memory Caching aktivieren (optional)

Nextcloud empfiehlt Memory Caching. Dafür ist der Redis Server gut geeignet. Er unterstützt distributed memcache, Transactional File Locking und sogar User-Sessions über verschiedene Webseiten hinweg. Die Konfiguration mit APCu ist dafür viel einfacher.

APCu

vi /var/www/nextcloud/config/config.php 

'memcache.local' => '\OC\Memcache\APCu'

In der php.ini für die CLI muss man das aber auch aktivieren, ist off by default.

vi /etc/php/8.0/cli/php.ini

apc.enable_cli=1

Redis

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html

Wir werden Redis als local memcache und Transactional File Locking konfigurieren.

sudo apt install redis-server php-redis

Redis Config anpassen

vi /etc/redis/redis.conf

unixsocket /run/redis/redis-server.sock
unixsocketperm 770
port 0

www-data zu redis Gruppe hinzufügen

sudo usermod -a -G redis www-data

Nextcloud config anpassen

vi /var/www/nextcloud/config/config.php

'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'redis' => [
     'host'     => '/run/redis/redis-server.sock',
     'port'     => 0,
],

Es ist wichtig, dass der Port auf 0 gesetzt wird. Das bedeutet Redis hört nicht auf TCP Anfragen, sondern nur auf Socketanfragen.

Nectcloud Rich Workspace für alle Benutzer deaktivieren

Der Rich Workspace ist das Feature, dass man Notizen zu Verzeichnissen hinzufügen kann, die dann im oberen Bereich angezeit werden, wenn man in das Verzeichnis wechselt. Dazu wird im Verzeichnis eine Readme.md abgelegt.

sudo -u www-data php occ config:app:set text workspace_available --value=0

https://github.com/nextcloud/server/issues/19548

Nextcloud Skeleton Files

Neue Benutzer erhalten standardmäßig eine Kopie des Ordners /nextcloud/core/skeleton. Bei neuen Updates wird der Inhalt ersetzt, daher kann man die Dateien darin nicht einfach löschen. Dafür gibt es die Config Variable skeletondirectory. Diese kann man in der config.php auf einen Pfad setzten, der vom Webserver gelesen werden kann.

https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/default_files_configuration.html

Netzwerkpfad auf Dateisystemebene einbinden

Die Anfroderung an der Nextcould Server ist unter Anderem, dass die Daten unter dem Datenverzeichnis bei uns auf dem Fileserver gespeichert werden, um somit die Datenhaltung zu vereinheitlichen. Für Nextcloud soll es so aussehen, als ob das aber ein normales Linux-Verzeichnis ist, auf dem Nextcloud nativ arbeiten kann.

https://wiki.ubuntuusers.de/mount.cifs/

https://wiki.ubuntuusers.de/fstab/

apt install cifs-utils

Datei /root/.smbcredentials erstellen und die Zugangsdaten zur Freigabe eintragen:

username=BENUTZER
password=PASSWORD
domain=DOMAIN

chmod 600 /root/.smbcredentials

Nun ein Verzeichnis im Dateisystem erstellen unter dem die Freigabe eingebunden werden soll. Z.B. /media/daten

Ob erfolgreich auf die Freigabe zugegriffen werden kann, kann man nun mit folgendem Kommando testen:

mount -t cifs -o credentials=~/.smbcredentials //<ip des servers>/<freigabe> /media/daten

Wenn es bei dem obigen Kommando nicht zu Fehlermeldungen kommt und man die Dateien der Freigabe unter /media/daten sehen kann, hat alles funktioniert. Nun sind wir bereit die Daten in der fstab zu hinterlegen, um die Freigabe bei Systemstart zu verbinden. Vorher aber noch schnell die Freigabe wieder unmounten.

umount /media/daten

vi /etc/fstab

Folgende Zeile ans Ende anfügen:

//<ip>/<share> /media/daten cifs x-systemd.automount,credentials=/root/.smbcredentials,rw,_netdev,uid=www-data,gid=www-data,file_mode=0770,dir_mode=0770 0 0

Weitere interessante Mount Optionen sind iocharset=utf8,nofail

Nextcloud empfohlene Apps

Share Listing

Ermöglicht eine Abfrage aller Dateifreigaben über die CLI (sudo -u www-data php occ sharing:list).

Activities for shared file downloads, visible to all admins

Zeigt die Downloads von freigegebenen Daten allen Admins im Activities Menu.

Deck

Kanban-ähnliche Organisation für persönliche Planung und Teamprojekte.

Notes

Ablenkungsfreie Notizen und Schreiben.

Group Folders

Vom Administrator konfigurierte Ordner, die mit jedem Gruppenmitglied geteilt sind.

Nextcloud OCC – nützliche Befehle

occ user:list
occ user:info [username]

Nextcloud Updaten

Wenn möglich, sollte der automatische webbasierte Installer benutzt werden. Ansonten hier die Dokumentation:

https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html