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