Zum Inhalt

Nextcloud Installation und Konfiguration

Die Anleitung beschreibt die Installation und die ersten Schritte von Nextcloud Hub auf einem Raspberry Pi .


Hardware und Software

Die folgende Hardware wird für die eigene Nextcloud verwendet.

  • Raspberry Pi 4️⃣ oder 5️⃣
  • Raspberry Pi Gehäuse mit Kühlung 🥶
  • 32GB SD-Karte
  • externe SSD-Festplatte (für das Nextcloud Daten- und Temp-Verzeichnis)
  • USB-Stick oder externe SSD-Festplatte (für Backups)

Die Festplatte benötigt eine eigene Stromversorgung🔌

Die externe SSD-Festplatte benötigt eine eigene Stromversorgung 🔌. Der Anschluss an einem USB-Port am Raspberry Pi kann zu Problemen führen und die Funktion der Nextcloud beeinträchtigen.

Die Stromversorgung lässt sich am Einfachsten mit einem SATA Konverter für 2.5" SATA Festplatte oder SSD gewährleisten. Die Stromversorgung wird an einen normalen USB-2.0-Port des Raspberry Pis angeschlossen.

SATA Konverter für 2.5" SATA Festplatte oder SS

Ein USB-Stick kann dagegen direkt am Pi angeschlossen werden.

Als Betriebssystem wird Raspberry Pi OS Lite (64-bit) ohne Desktopumgebung verwendet. Mithilfe des Raspberry Pi Imager wird es auf die SD-Karte geschrieben wird.
Die gesamte Anfangskonfiguration für den Raspberry Pi kann im Raspberry Pi Imager hinterlegt werden und wird automatisch mit übertragen.

Raspberry Pi Imager - Auswahl des Betriebssystems


Anmeldung mit Passwort

Die Anmeldung am Raspberry Pi kann ganz klassisch mit Benutzername und Passwort erfolgen.

Anmeldung mit SSH-Key

Die SSH-Verbindung zwischen dem eigenen Client 💻 und dem Raspberry Pi (= Server) ist eine sichere und komfortabel Zugriffsmöglichkeit über die CLI. Sie erfordert zwar ein wenig mehr Vorbereitung, vereinfacht die Installation und die nachfolgende Administration jedoch erheblich.

Note

Es wird ein bestehender SSH-Schlüssel für die Verbindung verwendet, der auf einem Yubikey-Hardwaretoken 🔐 hinterlegt ist.

Eine ausführliche Anleitung zum Einrichten eines eigenen YubiKeys 🔐 findet sich in meinem Blog:


Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


SSH auf dem Client

Auf dem eigenen Client 💻 ist in einem Terminal der Befehl zum Aufbau der SSH-Verbindung einzugeben. Auf dem 👉 Server muss der sshd-Dienst bereits laufen und konfiguriert sein.

# Bekannte Keys entfernen - optional
ssh-keygen -R ip-adresse-der-rpi

# SSH-Verbindung herstellen
ssh benutzer@ip-adresse-der-rpi

SSH auf dem Server

Die einfachste Möglichkeit auf dem Server ist die Verwendung des Raspberry Pi Imager um alle Grundeinstellungen für die SSH-Verbindung vorzubereiten und zu konfigurieren.

oder ...

... der SSH-Dienst wird über das Menü raspi-config aktiviert.

Die Schritte zur Aktivierung und Konfiguration von SSH können auch selbst durchgeführt werden. Dazu ist das Betriebssystem auf die SD-Karte zu kopieren und der Raspberry Pi an einen Monitor anzuschließen und die folgenden Konfigurationsschritte zu durchlaufen.

# OpenSSH Server auf dem neuen Server installieren
sudo apt install openssh-server

Das ~/.ssh-Verzeichnis ist ggf. anzulegen und die Rechte neu zu vergeben.

# .ssh-Verzeichnis anlegen und Rechte anpassen
mkdir .ssh

chmod 0711 ~/.ssh

# Datei für die SSH-Schlüssel anlegen
nano ~/.ssh/authorized_keys

In die neu angelegte Datei authorized_keys kann der öffentliche Schlüssel sehr einfach mit einem Editor, z.B. nano, vim, etc., mit Copy-and-Paste eingefügt werden.

# Den privaten Schlüssel in die Datei neu angelegte Datei authorized_keys kopieren

# Key 1 - Description
ssh-rsa keykeykeykeykeykeykeykeykey

# Key 2 - Description
ssh-rsa keykeykeykeykeykeykeykeykey

# Key 3 - Description
...

Mehrere SSH-Schlüssel 🔑 können fortlaufend in die Datei eingetragen werden. Kommentare können mit # am Zeilenanfang eingefügt werden.

Die Rechte für die Datei ~/.ssh/authorized_keys kann angepasst werden, damit eine Änderung der Einträge nur noch mit sudo-Rechten möglich ist.

# Rechte neu setzten
sudo chown root:root ~/.ssh/authorized_keys

sudo chmod 644 ~/.ssh/authorized_keys

# 644 = rw-r--r--
# Besitzer / Owner = u = rw-
# Gruppe / Group = g = r--
# Andere / Other o = r--

# SSH-Dienst neustarten
sudo systemctl restart sshd

Update des Betriebssystems

Das Betriebssystem des Raspberry Pi ist nach dem ersten erfolgreichen Start zu aktualisieren:

sudo apt update && sudo apt dist-upgrade && sudo apt autoremove

Installation der benötigten Softwarepakete

Alle weiteren benötigten Softwarepakete für die Nextcloud lassen sich über den Paketmanager aus den Repositories installieren.

sudo apt install apache2 mariadb-server-10.5 smbclient imagemagick

Note

MariaDB wird aus den Paketquellen installiert und die dortige Version weicht ggf. von der geforderten Version durch Nextcloud ab‼️


PHP installieren

In den Paketquellen vieler Linux-Betriebssysteme ist oftmals nicht die aktuellste PHP-Version verfügbar, deshalb wird auf die Paketquellen von 🔗 sury.org ausgewichen.

Eine Schritt-für-Schritt-Anleitung für die Installation ist in 👉 Nextcloud Update / Upgrade Fehler - PHP-Fehler zu finden.


Webserver Apache2 anpassen

Der Webserver Apache2 wird so konfiguriert, dass Nextcloud über einen virtuellen Host über eine Sub-Domain, wie z.B. https://next.meine-domain.de, erreichbar gemacht wird.

Die entsprechende Konfigurationsdatei kann mit dem Editor nano erstellt und bearbeitet werden.

sudo nano /etc/apache2/sites-available/nextcloud.conf

Der Inhalt ist noch anzupassen:

  • ServerName = next.meine-domain.de
  • DocumentRoot = /var/www/html/nextcloud
  • Directory = /var/www/html/nextcloud
<VirtualHost *:80>
  DocumentRoot /var/www/html/nextcloud/
  ServerName  next.meine-domain.de

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

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

Nachdem Speichern der Datei ist die Konfiguration neu einzulesen und Apache2 neu zu starten.

# Die neue Konfiguration nextcloud.conf einlesen
sudo a2ensite nextcloud.conf

# Apache2 neustarten
sudo systemctl reload apache2

Möchte man die Konfiguration wieder löschen 🚮, geht das über den Befehl a2dissite.

# Die Konfiguration nextcloud.conf entfernen
sudo a2dissite nextcloud.conf

# Apache2 neustarten
sudo systemctl reload apache2

Apache Module aktivieren

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime

Apache Neustart

sudo systemctl restart apache2

Apache aufrufen

Funktionstest. Falls der Webserver läuft wird die index.html im Webbrowser angezeigt. Die Datei liegt im Root-Verzeichnis des Webserver /var/www/html.

http://ip-addresse

Ist bereits eine ufw - Firewall 🔥 aktiv, sind die Ports 80 und 443 zu öffnen.


Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


MariaDB Server

Nextcloud fordert die Installation von MariaDB Version >= 10.6 und 11.4 <=.

Die Version, die über den Paketmanager bereitgestellt wird, lässt sich abfragen.

sudo apt list | grep mariadb

In der Ausgabe sieht man, dass die Version mariadb-server-10.5/stable 1:10.11.6-0+deb12u1 arm6 enthalten ist.

MariaDB Server absichern

sudo mysql_secure_installation

Es werden einige Fragen gestellt, die mit Y beantwortet werden können.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDB Datenbank für Nextcloud anlegen

Es ist eine leere Datenbank für Nextcloud anzulegen.

sudo mariadb

Die Datenbank nextcloud wird mit dem Befehl angelegt.

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Das Ganze sieht wie folgt aus:

sudo mariadb

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0,001 sec)

MariaDB [(none)]> quit;
Bye

MariaDB Benutzer anlegen

Danger

❗Das Passwort ist NUR für die Nextcloud-Datenbank und wird später noch benötigt, also gut merken 📝❗

Die beiden Einträge, insbesondere das Passwort, sind anzupassen:

  • Benutzername: nextcloud
  • Password: mein-geheimes-passwort
sudo mariadb

CREATE USER nextcloud@localhost identified by 'mein-geheimes-passwort';

GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost;

# Optional, falls Probleme bei der Installation auftreten
grant all privileges on nextcloud.* to 'nextcloud'@'localhost' with grant option;

FLUSH privileges;

quit;

Das Passwort für den Benutzer nextcloud kann jederzeit gelöscht und wieder mit dem Befehl von oben neu gesetzt werden.

SET PASSWORD FOR 'nextcloud'@localhost = PASSWORD("");

MariaDB wichtige Befehle - Deep Dive

Einige wichtige Befehle für die MariaDB - kurzer Deep Dive.

sudo mariadb

# Alle existierenden Datenbanken auflisten
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
+--------------------+
4 rows in set (0.007 sec)

# Alle Benutzer des Datenbankservers anzeigen
MariaDB [(none)]> SELECT User FROM mysql.user;
+-------------+
| User        |
+-------------+
| mariadb.sys |
| mysql       |
| nextcloud   |
| root        |
+-------------+
4 rows in set (0.007 sec)

# Tabellen anzeigen
SHOW TABLES IN nextcloud;

# Benutzer löschen
DROP USER 'nextcloud'@'localhost';

# Datenbank "nextcloud " löschen
DROP DATABASE IF EXISTS nextcloud;

# Berechtigungen für Benutzer nextcloud anzeigen
SHOW GRANTS FOR 'nextcloud'@'localhost';

# Passwort für Benutzer `nextcloud` löschen
SET PASSWORD FOR 'nextcloud'@localhost = PASSWORD("");

Nextcloud herunterladen

Prüfung der md5sum

Die heruntergeladene Datei wird mit der bereitgestellten md5sum überprüft.

# Wechsel in das Home-Verzeichnis
cd

# Download der aktuellsten Nextcloud-Version
curl https://download.nextcloud.com/server/releases/latest.tar.bz2 > latest.tar.bz2

# Download der md5-Prüfsumme
curl https://download.nextcloud.com/server/releases/latest.tar.bz2.md5 > latest.tar.bz2.md5

# Vergleich der beiden md5sums
md5sum latest.tar.bz2 && cat latest.tar.bz2.md5

Tip

Nur wenn die beiden Prüfsummen übereinstimmen ✅, kann mit der Installation begonnen werden.

# Die beiden Prüfsummen werden verglichen
md5sum latest.tar.bz2 && cat latest.tar.bz2.md5

# Die beiden Prüfsummen stimmen überein und die Installation kann fortgesetzt werden
2e954b3942e11b19542f3d430af9966e  latest.tar.bz2
2e954b3942e11b19542f3d430af9966e  latest.tar.bz2
65f04a8017908e9dc21196f633fc9707  latest.metadata
# tar.bz2-Archiv in das Verzeichnis kopieren
sudo cp ~/latest.tar.bz2 /var/www/html/

# Wechsle in das Verzeichnis
cd /var/www/html/

# tar.bz2-Archiv entpacken
sudo tar xfvj latest.tar.bz2

Nach dem Entpacken können die nicht mehr benötigten Dateien entfernt werden.

sudo rm /var/www/html/latest.tar.bz2
rm ~/latest.tar.bz2
rm ~/latest.tar.bz2.md5

Nextcloud Ordner und Berechtigungen vergeben

cd /var/www/html/nextcloud
sudo mkdir -p /var/www/html/nextcloud/data
sudo chown www-data:www-data /var/www/html/nextcloud/data
sudo chmod 750 /var/www/html/nextcloud/data
sudo chown www-data:www-data /var/www/html/nextcloud/config
sudo chown -R www-data:www-data /var/www/html/nextcloud/apps
sudo systemctl restart apache2

Nextcloud Installation starten

Die Installation der Nextcloud lässt sich über den Webbrowser starten 🏁.

http://ip-adresse/nextcloud

Nextcloud Installation - Benutzer, Passwort und Datenbank anlegen

  • Benutzername: ist neu zu vergeben
  • Passwort: ist neu zu vergeben
  • Datenverzeichnis: keine Änderung notwendig
  • Datenbank-Benutzer: nextcloud
  • Datenbank-Passwort: siehe oben
  • Datenbankname: nextcloud
  • Server: localhost (Portnummer ist nicht erforderlich)

Nextcloud Installation - Benutzer, Passwort und Datenbank anlegen

Nach der Installation funktioniert ggf. die Weiterleitung auf das Nextcloud-Dashboard nicht korrekt und die Adresse ist manuell einzugeben.

http://ip-adresse/nextcloud

Nextcloud Installation erfolgreich! - Willkommensbildschirm wird angezeigt

Die empfohlenen Apps können gleich installiert werden, wenn die Hardwareanforderungen passen.


Nextcloud - Erster Start

Nach dem ersten Start 🚀 der Nextcloud werden in den Verwaltungseinstellungen einige Meldungen angezeigt, die nachfolgend bearbeitet werden.

Einige Einstellungen sind in der Konfigurationsdatei /var/www/html/nextcloud/config/config.php zu ergänzen.

Es gibt zwei Möglichkeiten Einträge dort zu schreiben:

  1. Die Datei wird mit einem Editor bearbeitet. (die Option wird in dieser Anleitung verwendet.)

  2. Mit dem occ Kommando lassen sich die Einträge bearbeiten.

Beispiel:

sudo -u www-data php occ config:system:set  memcache.local --value="\\OC\\Memcache\\APCu"
sudo -u www-data php /var/www/html/nextcloud/occ config:system:set  memcache.local --value="\\OC\\Memcache\\APCu"

Pretty URLs

sudo nano /var/www/html/nextcloud/config/config.php

# Am Ende der Datei, aber immer vor ); die Zeile eintragen
'htaccess.RewriteBase' => '/nextcloud',

sudo systemctl restart apache2

Der Eintrag kann auch mithilfe des occ-Befehls erstellt werden.

sudo -u www-data php /var/www/html/nextcloud/occ config:system:set  htaccess.RewriteBase --value="/nextcloud"

OPcache

Die Anpassung des OPcache erfolgt in der Konfigurationsdatei von Nextcloud.

sudo nano /var/www/html/nextcloud/config/config.php

# Am Ende der Datei, aber vor ); die Zeile eintragen
'memcache.local' => '\\OC\\Memcache\\APCu',

# Webserver Apache 2 neustarten
sudo systemctl restart apache2

Es sind anschließend einige Anpassungen der php.ini vorzunehmen.

# Backup der php.ini erstellen
sudo cp /etc/php/8.3/apache2/php.ini /etc/php/8.3/apache2/php.ini-bak

# php.ini bearbeiten
sudo nano /etc/php/8.3/apache2/php.ini

Am Anfang des Abschnitts [opcache] ist einzutragen:

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq = 60
opcache.validate_timestamps = 0
# Webserver Apache neustarten
sudo systemctl restart apache2

PHP Speichergrenze

Beim ersten Aufruf von Nextcloud wird u.a. diese Meldung ausgegeben.

Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.

Die Speichergrenze ist in der php.ini anzupassen.

# Backup der php.ini anlegen
sudo cp /etc/php/8.3/apache2/php.ini /etc/php/8.3/apache2/php.ini-original

# php.ini editieren
sudo nano /etc/php/8.3/apache2/php.ini

# Eintrag memory_limit anpassen
memory_limit = 512M

sudo systemctl restart apache2

In diesem Zuge Können gleich noch drei weitere Werte in der php.ini angepasst werden:

sudo nano /etc/php/8.3/apache2/php.ini

upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 30

sudo systemctl restart apache2

output buffering

Fehlermeldung:

PHP configuration option output_buffering must be disabled

Lösung:

sudo nano /etc/php/8.3/apache2/php.ini

# Eintrag auskommentieren
; output_buffering = 4096

# Eintrag einfügen und output_buffering ausschalten
output_buffering = off

apachectl configtest && sudo systemctl restart apache2

opcache.interned_strings_buffer

Die Zeile ist in der php.ini vorhanden. Der Wert ist von 8 auf 16 zu ändern.

sudo nano /etc/php/8.3/apache2/php.ini

opcache.interned_strings_buffer=16

Datenverzeichnis und temporäres Uploadverzeichnis auf externen USB-Stick verschieben

Das Datenverzeichnis und ein temporäres Uploadverzeichnis werden auf das gleiche, externe Speichermedium, z. B. externe Festplatte, USB-Stick, verschoben.

Dadurch werden die Schreibaktivitäten auf die SD-Karte verringert und ein größeres Speichermedium für das Ablegen der Dateien kann verwendet werden.

Vor der Änderungen ist ein Backup der Nextcloud-Konfigurationsdatei zu erstellen und anschließend die Nextcloud in den Wartungsmodus zu versetzen.

sudo cp /var/www/html/nextcloud/config/config.php ~

sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on

Note

In diesem Beispiel wird ein NTFS formatiertes Speichermedium verwendet. Bei anderen Formatierungen, z.B. ext4, ist die Zeile in der /etc/fstab anzupassen.
Eine kurze Beschreibung ist in meinem Blog zu finden.

sudo apt install ntfs-3g

Der Mount Point ist zu erstellen.

# Mount Point erstellen
sudo mkdir /mnt/data

UUID (🔗 Universally Unique Identifier) des angeschlossenen Laufwerks bestimmen.

Das externe Speichermedium ist an einen USB-Port am Raspberry Pi anzustecken, damit die UUID ausgelesen werden kann.

sudo blkid

Die blkid des Speichermediums ist zu kopieren und anschließend in die /etc/fstab einzutragen.

Der Eintrag in der /etc/fstab wird erstellt.

sudo nano /etc/fstab

Am Ende der Datei /etc/fstab die Zeile mit der UUID des USB-Sticks eintragen

# Data-Verzeichnis der Nextcloud
UUID=xcxcxcxcxcxcxc /mnt/data ntfs-3g utf8,dmask=007,fmask=007,umask=007,uid=www-data,gid=www-data 0

Note

Die UUID ändert sich auch, wenn das Speichermedium neu formatiert wird.

Das Laufwerk lässt sich anschließend sofort einhängen:

sudo mount /mnt/data

cd /mnt/data

Datenverzeichnis

Der alte Eintrag 'datadirectory' => '/var/www/html/nextcloud/data', in der Nextcloud-Konfigurationsdatei ist zu ersetzen.

# Ordner für Datenverzeichnis auf externem Speichermedium erstellen
sudo mkdir -p /mnt/data/nc-data

# Config-Datei bearbeiten
sudo nano /var/www/html/nextcloud/config/config.php

# Eintrag ändern in der Nextcloud config.php
'datadirectory' => '/mnt/data/nc-data/data',

# Ordner und Dateien verschieben
sudo mv -v /var/www/html/nextcloud/data /mnt/data/nc-data

# Nextcloud Wartungsmodus AUS
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --off

Temporäres Uploadverzeichnis erstellen

Die Dateien werden während des Uploadvorgangs in dieses Verzeichnis gespeichert. Erst wenn 100 % der Datei hochgeladen wurden, wird sie automatisch in das Datenverzeichnis verschoben.

Das temporäre Uploadverzeichnis liegt in diesem Beispiel auf dem gleichen externen Speichermedium wie das Datenverzeichnis /mnt/data.

Note

Das externe Speichermedium muss bereits eingebunden sein, damit dieser Ordner angelegt werden kann.

# Nextcloud Wartungsmodus AN
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --on

# Ordner für das temporäre Verzeichnis erstellen
sudo mkdir -p /mnt/data/nc-tmp

# Config-Datei bearbeiten
sudo nano /var/www/html/nextcloud/config/config.php

# Eintrag ändern
'tempdirectory' => '/mnt/data/nc-tmp',

# Nextcloud Wartungsmodus AUS
sudo -u www-data php /var/www/html/nextcloud/occ maintenance:mode --off

Papierkorb Retention

Definiert, wann Ordner und Dateien im Papierkorb endgültig gelöscht werden sollen.

# Config-Datei bearbeiten
sudo nano /var/www/html/nextcloud/config/config.php

# Eintrag ändern
'trashbin_retention_obligation' => 'auto, 30',

CRON aktivieren

In der Nextcloud Weboberfläche ist die Option Einstellungen --> Grundeinstellungen --> Cron auszuwählen.

Auf der CLI ist für den Benutzer www-data ein Cron Job anzulegen.

sudo crontab -u www-data -e

*/5  *  *  *  * php8.3 -f /var/www/html/nextcloud/cron.php

Manuelle kann der Cron sofort auf der CLI ausführt werden, mit der Standard php-Version:

sudo -u www-data php -f /var/www/html/nextcloud/cron.php

Manuelles ausführen mit Angabe der installierten PHP-Version, in diesem Fall mit php8.3:

sudo -u www-data php8.3 -f /var/www/html/nextcloud/cron.php

Damit die CRON Jobs korrekt laufen, ist eine Einstellung in der Konfigurationsdatei von APCu vorzunehmen. 👉 APCu

Nextcloud Skeleton ändern

Skeleton sind Dokumente, die jedem neuen Benutzer der Nextcloud automatisch in dessen Ordner angezeigt werden.

Option 1: Eigene Vorlagen definieren

Nextcloud legt jedem neuen Benutzer standardmäßig Dateien in seinen Dateiordner.

Es können eigene Dateien und Ordner definiert werden, die in einem neuen Verzeichnis abgelegt werden.

# Standard-Skeleton anzeigen
cd /var/www/html/nextcloud/core/skeleton

ls

 Documents             'Nextcloud Manual.pdf'   Photos                          Templates
'Nextcloud intro.mp4'   Nextcloud.png          'Reasons to use Nextcloud.pdf'

Neues Skeleton-Verzeichnis im neuen Datenverzeichnis /mnt/data/nc-data anlegen und Vorlagen erstellen:

sudo mkdir /mnt/data/nc-data/data/skeleton-neu

In dieses neue Verzeichnis sind alle Vorlagen abzuspeichern. Werden neue Benutzer angelegt, werden diesen automatisch die Skeleton-Dateien ihr Verzeichnis kopiert.

Anpassung der config.php:

sudo nano /var/www/html/nextcloud/config/config.php

# Eintrag ändern
'skeletondirectory' => '/mnt/data/nc-data/data/skeleton-neu',

Option 2: Ganz ohne Vorlagen

Sollen keine Vorlagen verwendet und dem Benutzer ein leeres Verzeichnis erstellt werden, dann ist der Eintrag in der Config-Datei leer zu lassen.

sudo nano /var/www/html/nextcloud/config/config.php

 # Eintrag ändern
'skeletondirectory' => '',

Nextcloud Backup Möglichkeiten

nextcloudbackup

Bei einer Nextcloud-Installation sind die folgenden Ordner und die darin enthaltenen Dateien zu sichern:

  • Konfigurationsdateien - /var/www/html/nextcloud/config
  • Datenverzeichnis - /mnt/data/nc-data
  • MariaDB Datenbank - nextcloud
  • Themes-Verzeichnis (optional, wenn Anpassungen vorgenommen wurden) - var/www/html/nextcloud/themes

Die Sicherung ist am einfachsten und effizientesten mit einem Bash-Skript und einem Cron Jobs zu erstellen.

Das Backup sollte auf ein separates Speichermedium (Festplatte, USB-Stick, NAS, FRITZ!Box, etc.) übertragen werden.

Das Einbinden des Speichermediums erfolgt analog wie bereits in Abschnitt 👉 Datenverzeichnis und temporäres Uploadverzeichnis auf externen USB-Stick verschieben beschrieben.

Tip

In meinem Codeberg Repository nextcloudbackup sind die Shell Skripte 📑 für das Backup abrufbar.

Aus der offiziellen Nextcloud-Dokumentation


autodelete - Backups nach einer bestimmten Zeit löschen

autodelete löscht in regelmäßigen Abständen die Datensicherungen, die mit 👉#nextcloudbackup erstellt wurden.

Mit dieser Lösung kann man verhindern, dass das Speichermedium zu voll ist, um neue Datensicherungen zu speichern.

Tip

In meinem Codeberg Repository autodelete sind die Shell Skripte 📑 für das regelmäßige Löschen 🚮 der Datensicherungen abrufbar.


imagebackup - Sicherung der kompletten SD-Karte

Es lässt sich auch die komplette SD-Karte des Raspberry Pis im laufenden Betrieb sichern.

Das ist eine sehr angenehme Möglichkeit auch mal schnell die bestehende SD-Karte durch eine neue zu ersetzen.

Tip

In meinem Codeberg Repository imagebackup sind die Shell Skripte 📑 für das Backup abrufbar.


Backup von Adressbüchern und Kalendern

Mit einem Shell-Skript lassen sich die Adressbücher und Kalender einer Nextcloud-Installation automatisiert sichern.

Weitere Backup-Möglichkeiten

Es gibt noch weitere Möglichkeiten, um die Konfigurationsdateien und das Datenverzeichnis der eigenen Nextcloud zu sichern.


Redis Installieren

Redis Installation und Konfiguration

sudo apt install redis-server php-redis

Redis lässt sich mit einem Passwort absichern. Der Passworthash wird in der redis.conf und der config.php eingetragen.

passwort ist durch ein eigenes Passwort zu ersetzen.

# Redis-Passwort-Hash erstellen
echo passwort | sha256sum

# Backup erstellen
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf-original

sudo nano /etc/redis/redis.conf

# Ersetzen
# unixsocketperm 700
unixsocketperm 770

# maxclients 10000
maxclients 100

# requirepass foobared
requirepass passwort

Webserver Rechte auf den Socket gewähren

sudo usermod -aG redis www-data
sudo service redis-server restart

# Redis Service anzeigen
ps ax | grep redis

Nextcloud config.php anpassen

Es wird auch APCu verwendet. Die Konfiguration ist im Abschnitt 👉 APCu beschrieben.

Note

In der config.php ist der <Redis-Passwort-Hash> einzutragen NICHT das Passwort.
Es kann jedoch sein, dass durch die Eingabe des <Redis-Passwort-Hash> die Nextcloud nicht mehr erreichbar ist. Dann kann das Passwort in PLAIN in die /var/www/html/nextcloud/config/config.php eingetragen werden.

sudo nano /var/www/html/nextcloud/config/config.php

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
     'host'     => '/var/run/redis/redis-server.sock',
     'port'     => 6379,
     'dbindex'  => 0,
     'password' => '<Redis-Passwort-Hash>',
     'timeout'  => 1.5,
],

Redis Fehler

Der Host wird nicht richtig erkannt, die Nextcloud Weboberfläche ist nicht mehr erreichbar.

sudo nano /var/www/html/nextcloud/config/config.php

# Alter Eintrag
     'host'     => '/var/run/redis/redis-server.sock',
     'port'     => 6379,

# Neuer Eintrag
     'host'     => '127.0.0.1',
     'port'     => 6379,

Nextcloud - Fehlermeldungen

Bei den hier aufgelisteten Fehlern handelt sich hauptsächlich um Meldungen, die beim ersten Start der Nextcloud in den Verwaltungseinstellungen angezeigt werden.

Note

Weitere Fehler und deren Lösung sind in hier im Repository in der Datei 👉 Nextcloud - Fehler und Lösungen zu finden.

Ordnerberechtigungen sind falsch gesetzt

Die Ordnerberechtigungen sind nicht korrekt gesetzt und der Webserver-Benutzer www-data erhält keinen Schreibzugriff auf die Nextcloud-Verzeichnisse.

Dieser Fehler hat für den Betrieb der Nextcloud keine Auswirkungen. Steht jedoch ein Update an, müssen in die aufgelisteten Ordner neue Dateien geschrieben oder bestehende Dateien geändert werden.

Check for write permissions
The following places can not be written to:

    /var/www/html/nextcloud/updater/../version.php
    /var/www/html/nextcloud/updater/../public.php
    /var/www/html/nextcloud/updater/../cron.php
    /var/www/html/nextcloud/updater/../occ
    /var/www/html/nextcloud/updater/../.htaccess
    /var/www/html/nextcloud/updater/../remote.php
    /var/www/html/nextcloud/updater/../.user.ini
    /var/www/html/nextcloud/updater/../status.php
    /var/www/html/nextcloud/updater/../robots.txt
    /var/www/html/nextcloud/updater/../console.php
    /var/www/html/nextcloud/updater/../index.php
    /var/www/html/nextcloud/updater/../COPYING
    /var/www/html/nextcloud/updater/../AUTHORS
    /var/www/html/nextcloud/updater/../index.html

Abhilfe schafft das Setzen der richtigen Zugriffsrechte

sudo chown -R www-data:www-data /var/www/html/nextcloud
sudo find /var/www/html/nextcloud/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/nextcloud/ -type f -exec chmod 640 {} \;

App-Ordner

Fehlermeldung:

Einige App-Ordner haben einen anderen Besitzer als der Benutzer des Webservers (`www-data`). Dies kann der Fall sein, wenn Apps manuell installiert wurden. Prüfe die Berechtigungen der folgenden App-Ordner:

...

Lösung:

sudo chown -R www-data:www-data /var/www/html/nextcloud/apps

Fehlende PHP-Module

Fehlermeldung:

Dieser Installation fehlen einige empfohlene PHP-Module. Für bessere Leistung und bessere Kompatibilität wird dringend empfohlen, diese zu installieren.
    bcmath
    gmp

Lösung:

sudo apt install php8.3-bcmath php8.3-gmp
apachectl configtest && sudo systemctl restart apache2

Fehlende Telefonregion

Fehlermeldung:

Für Deine Installation ist keine Standard-Telefonregion festgelegt

Lösung:

sudo nano /var/www/html/nextcloud/config/config.php

Am Ende der Datei, aber vor ); die Zeile einzutragen

'default_phone_region' => 'DE',

Apache2 testen und neu starten:

apachectl configtest && sudo systemctl restart apache2

Webfinger & Nodeinfo

Fehlermeldung:

Dein Webserver ist nicht richtig konfiguriert, um "/.well-known/webfinger" aufzulösen.
Dein Webserver ist nicht richtig konfiguriert, um "/.well-known/nodeinfo" aufzulösen.

Lösung:

siehe 👉 Apache Webserver konfigurieren

Caldav & Carddav

Fehlermeldung:

Dein Webserver ist nicht richtig konfiguriert, um "/.well-known/caldav" aufzulösen.
Dein Webserver ist nicht richtig konfiguriert, um "/.well-known/carddav" aufzulösen.

Lösung:

siehe 👉 Apache Webserver konfigurieren

APCu

Fehlermeldung:

An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

Lösung:

# apcu.ini editieren
sudo nano /etc/php/8.3/mods-available/apcu.ini

# Am Ende der Datei eintragen
apc.enable_cli=1

# Webserver neustarten
apachectl configtest && sudo systemctl restart apache2

# Nextcloud config.php editieren
sudo nano /var/www/html/nextcloud/config/config.php

# Zeile einfügen
'memcache.local' => '\OC\Memcache\APCu',

Apache2 neu starten:

sudo systemctl restart apache2

Note

Weitere Fehler und deren Lösung sind in hier im Repository in der Datei 👉 Nextcloud - Fehler und Lösungen zu finden.


Apache Webserver konfigurieren

index.html anpassen

sudo rm /var/www/html.index.html
sudo nano /var/www/html/index.html

Option 1: Inhalt der index.html:

Es wird nur der Inhalt der index.html angezeigt, wenn das Root-Verzeichnis /var/www/html von Apache2 aufgerufen wird. Zur Erinnerung, die Nextcloud wurde im Ordner /var/www/html/nextcloud installiert.

<html>
<head>
<title>Are you looking for something?</title>
</head>
<body>
Are you looking for something?<br>
Maybe it is not here.<br>
Please contact your administrator for assistance.
</body>
</html>

Option 2: Inhalt der index.html mit Redirect:

Beim Aufruf des Root-Verzeichnis /var/www/html/ des Apache2 wird der Benutzer automatisch zur Nextcloud weitergeleitet.

<html>
<head>
<title>Redirect</title>
<meta http-equiv="refresh" content="0; URL=https://next.meinedomain.de/nextcloud">
<meta name="keywords" content="automatic redirection">
</head>
<body>
If your browser doesn't automatically go there within a few seconds,
you may want to go to the destination manually.
</body>
</html>

Let's Encrypt

acme.sh

Eine elegante und einfache Lösung zur Verwaltung von Zertifikaten habe ich im Artikel
👉 Nextcloud und acme.sh - automatische Aktualisierung von SSL-Zertifikaten für deine Nextcloud beschrieben.

Auf der offiziellen Website des Projekts ist eine detaillierte Installationsanleitung für Let's Encrypt zu finden.

Note

⚠️ Port 80 muss auf dem Router geöffnet und für den Raspberry Pi erreichbar sein.

Certbot Installation mit snap

sudo apt update && sudo apt dist-upgrade
sudo apt install snapd
sudo reboot
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Neues Let's Encrypt Zertifikate erstellen

sudo certbot --apache

Es sind dann noch einige Informationen mit anzugeben, bevor das Zertifikat auf dem Raspberry Pi installiert werden kann.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): email@adresse.de

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Account registered.
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): next.meinedomain.de
Requesting a certificate for next.meinedomain.de

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/next.meinedomain.de/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/next.meinedomain.de/privkey.pem
This certificate expires on 2023-06-17.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for next.meinedomain.de to /etc/apache2/sites-available/nextcloud.conf
Congratulations! You have successfully enabled HTTPS on https://next.meinedomain.de

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Aktualisierung eines vorhandenen Let's Encrypt Zertifikats

⚠️ Port 80 muss auf dem Router geöffnet und für den Raspberry Pi erreichbar sein. Die Aktualisierung des Let's Encrypt Zertifikats erfolgt unabhängig der gewählten Installationsoption (snap oder pip).

Die Aktualisierung des Zertifikats erfolgt mit dem Befehl:

# Testlauf - dry-run
sudo certbot renew --dry-run

# Aktualisierung
sudo certbot renew

Zertifikate lassen sich auch wieder vom eigenen Server löschen. Es ist dabei zu beachten, das evtl. vorhandene Verlinkungen und Verweise in Konfigurationsdateien manuell angepasst werden müssen (z. B.: /etc/apache2/sites-available/...)

# Zertifikate anzeigen
sudo certbot certificates

# Zertifikate löschen
sudo certbot delete

Mit dem Apache HTTP Server Control Interface, kurz apachectl lassen sich die virtuellen Hosts mit den zugeordneten Zertifikaten anzeigen

apachectl -t -D DUMP_VHOSTS

Die Ausgabe kann in etwa so aussehen:

VirtualHost configuration:
*:443                  next.meinedomain.de (/etc/apache2/sites-enabled/nextcloud.conf:2)
*:80                   next.meinedomain.de (/etc/apache2/sites-enabled/nextcloud.conf:1)

Nextcloud - Eintrag als trusted_domains

Die Domain ist in der Konfigurationsdatei von Nextcloud einzutragen:

sudo nano /var/www/html/nextcloud/config/config.php

# next.meinedomain.de mit fortlaufender Nummerierung eintragen
  'trusted_domains' => 
  array (
    0 => '192.168.xxx.yyy',
    1 => 'next.meinedomain.de',
  ),

Apache2 - Einstellungen für die eigene Domain

Der Eintrag in der Konfigurationsdatei nextcloud.conf sieht für die eigene Domain wie beispielhaft dargestellt aus.

Der Abschnitt wird direkt unterhalb der <VirtualHost *:80> eingefügt, der in 👉 Webserver Apache2 anpassen beschrieben ist.

sudo nano /etc/apache2/sites-available/nextcloud.conf

Es wird unterhalb des bestehenden Abschnitts

<VirtualHost *:443>
    DocumentRoot /var/www/html/nextcloud
    ServerName  next.meine-domain.de

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/next.meine-domain.de/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/next.meine-domain.de/privkey.pem

    <Directory /var/www/html/nextclod>
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DNS-Eintrag für das eigene Netzwerk - Local DNS Records - Optional

Nach der Installation des Let's Encrypt Zertifikats kann man dem eigenen Netzwerk mitteilen sofort die Nextcloud aufzusuchen, anstatt den Umweg über einen DNS im Internet zu gehen. Es muss dazu entweder

  1. ein Local DNS Records [A/AAAA] oder
  2. ein Eintrag in der etc/hosts eines jeden Clients erstellt werden.

Local DNS Records A/AAAA mit Pi-hole

Diese Variante ist definitiv zu bevorzugen.

Die Konfiguration wird nur an dem zentralen Punkt im eigenene Netzwerk eingestellt und gilt dann sofort für alle Geräte.

Sehr einfach ist das z.B. mit einem Pi-hole möglich.

Pi-hole Local DNS Records

Nachdem der Eintrag abgespeichert wurde, passiert Folgendes:

  1. die Clients im Netzwerk senden ganz normale im Hintergrund ihre DNS-Anfragen an den DNS-Server (= Pi-hole)
  2. Pi-hole nimmt die Anfragen and und verarbeitet sie
  3. Pi-hole erkennt, dass für die Anfrage next.meine-domain.de ein lokaler DNS-Eintrag vorhanden ist
  4. Pi-hole teilt dem Client die IP-Adresse der Nextcloud mit

👉 Die Anfrage verlässt das eigene Netzwerk nicht. Das funktioniert auch, wenn man von außerhalb mit einem VPN auf das eigene Heimnetzwerk zugreift, z.B. mit WireGuard der FRITZ!Box.

Vorteile:

  • Durch das Vorgehen werden keine Anfragen an einen DNS-Server im Internet gesendet, sondern ausschließlich im lokalen Netzwerk verarbeitet.
  • schnelle Antwortzeiten
  • die Zertifikate sind auch hier gültig und könenn genutzt werden
  • wird die Nextcloud ausschließlich im eigenen Netzwerk oder VPN verwendet, können die Ports 80 und 443 auf dem Router geschlossen werden
  • die beiden Ports 80 und 443 müssen nur zur Aktualisierung des Let's Encrypt-Zertifikats auf dem Router geöffnet werden

AVM FRITZ!Box

In der FRITZ!Box ist die Auflösung privater IP-Adressen durchaus möglich. Dafür ist eine Ausnahme für den DNS-Rebind-Schutz einzurichten.

AVM FRITZ!Box DNS Rebind Schutz

Die (Sub-)Domain der Nextcloud ist einzutragen.

AVM FRITZ!Box DNS Rebind Schutz

Nach dem Speichern der neuen Einstellungen ist ein Neustart der FRITZ!Box notwendig, damit die Änderungen wirksam werden.

Eintrag in der /etc/hosts-Datei


Danger

Bei jeder Änderung an der Domain oder der IP-Adresse des Servers ist auf jedem Client der Eintrag in det /etc/hosts anzupassen.


Also daran denken 🤔, bei Netzwerkproblemen auch mal einen Blick 👀 in die /etc/hosts zu werfen.

iPhone

Bei der Verwendung von iPhones kann es trotz des gesetzten lokalen DNS-Eintrag in Pi-hole dazu kommen, dass das Smartphone die Verbindung zur Nextcloud nicht audfbaut. Es kommt eine Meldung "Zeitüberschreitung".

Abhilfe schafft das manuelle Eintragen des DNS-Servers und der Such-Domain.

Einstellungen ⇨ WLAN auswählen

Einstellungen - WLAN

Eigenes WLAN auswählen - klick auf das !

WLAN Einstellungen

DNS konfigurieren

DNS konfigurieren

IP-Adresse des lokalen DNS-Servers, z.B. Pi-hole, eintragen und die SUCH-DOMAIN, also die URL der Nextcloud, eintragen.

DNS konfigurieren

Die Möglichkeit über die /etc/hosts-Datei kann separat oder paralle zum lokalen DNS-Eintrag erstellt werden.

Die Einstellung ist auf jedem Client vorzunehmen!

Auf einem Linux oder Mac ist die Datei zu editieren

sudo nano /etc/hosts

Dort ist einfach eine Zeile am EOF einzutragen:

192.168.xxx.xxx   next.meine-domain.de

Bei einem Windows ist die Datei im Verzeichnis C:\Windows\ System32\drivers\etc\hosts zu finden und nach dem gleichen Muster zu editieren.


E-Mail-Versand mit Postfix

Das Betriebssystem versendet über den Mail Transfer Agent (MTA) Postfix E-Mails. Meine Skripte (imagebackup, nextcloudbackup, sysstatus) verwenden das Tool zum Verschicken von Statusnachrichten.

Pakete installieren

sudo apt install postfix libsasl2-modules mutt

main.cfg editieren

# Backup der Datei anlegen
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf-bak

# Datei bearbeiten
sudo nano /etc/postfix/main.cf
# Strato - Am Ende der Datei eintragen
relayhost= smtp.strato.de:465
smtp_sasl_auth_enable = yes
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_enforce_peername = no
smtpd_tls_security_level = may
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

# GMail - Am Ende der Datei eintragen
relayhost= smtp.gmail.com:587
smtp_sasl_auth_enable = yes
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_enforce_peername = no
smtpd_tls_security_level = may
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

Zugangsdaten und Absender konfigurieren

sudo nano /etc/postfix/sasl_passwd

In der Datei ist der Eintrag nach dem Schema zu erstellen

E-Mail-Server:Port E-Mail-Adresse:Passwort

Je nach verwendetem Mailprovider ist die Zeile entsprechend einzutragen.

# Strato 
smtp.strato.de:465 E-Mail-Adresse:Passwort

# GMail
smtp.gmail.com:587 E-Mail-Adresse:Passwort

In der Datei sender_canonical wird eigetragen, wie der Absender der E-Mail angezeigt werden soll.

sudo nano /etc/postfix/sender_canonical

# Einträge nach dem Schema 
pi email@meineadresse.de
user1 user1@meineadresse.de
user2 user2@meineadresse.de
# Zugriffsrechte korrekt setzen
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

# Zugriffsrechte korrekt setzen
sudo chown root:root /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db
sudo chmod 0600 /etc/postfix/sender_canonical /etc/postfix/sender_canonical.db

# Hash-Datenbanken neu erstellen
sudo postmap /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sender_canonical

sudo systemctl restart postfix

Zum Abschluss und auch bei jeder Änderung an den beiden Dateien die Hash-Datenbanken neu zu erstellen.

E-Mail-Versand testen - ohne Anhang

echo 'Test E-Mail' | mutt empfänger@meineadresse.de -s "Test-Email ohne Anhang"

E-Mail-Versand testen - mit Anhang

cd
touch datei.txt

echo 'Test-Email mit Anhang' | mutt empfänger@meineadresse.de -a /home/pi/datei.txt -s "Test-Email mit Anhang"

Auf einem Raspberry Pi lässt sich die Protokolldatei in /var/log/mail.log einsehen.

tail -f /var/log/mail.log

Postfix schreibt bei einigen Linux Distributionen seine Protokolle in die Syslog, die man sich mit dem Befehl anzeigen lassen kann

journalctl -u postfix@-.service

Möchte man die Protokolle, wie bisher auch, in einer eigenen Datei haben, dann sind die folgenden Schritte durchzuführen.

sudo postfix stop

sudo postconf maillog_file=

Die Ausgabe zeigt an, dass aktuell noch keine benutzerdefinierte mail.log Datei vorhanden ist.

Die eigene Protokolldatei lässt sich mit eintragen.

sudo postconf maillog_file=/var/log/mail.log


sudo postfix start

Verschlüsselte GPG-Nachrichten versenden

GPG-Schlüssel importieren

Öffentlichen Schlüssel des Empfängers max.muster@mail.de importieren.3

# GPG Version anzeigen
gpg --version

# Import eines Schlüssel
gpg --import max.muster.asc

# Import mehrerer Schlüssel
gpg --import *.asc

Nach dem Import kann der Schlüssel im Schlüsselbund angezeigt werden.

gpg --list-keys max.muster@mail.de

Vertrauenslevel für max.muster@mail.de erhöhen.4

gpg --edit-key max.muster@mail.de

gpg> trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 5

gpg> quit

GPG-SChlüssel erstellen

👉 Wie erstellt man ein GPG-Schlüsselpaar?

Das Trust Level lässt sich von einem Client exportieren und auf einem neuen Computer wieder importieren

gpg --export-ownertrust > trust.txt

gpg --import-ownertrust < trust.txt

[!IMPORTANT] Soll ROOT oder sudo auch verschlüsselte E-Mail an die bekannten Empfänger versenden, dann muss für den Benutzer ROOT ebenfalls die öffentlichen Schlüssel importieret werden Benutzer wechseln mit sudo su und anschließend die Schlüssel importieren und das Trust Level erhöhen.

muttrc

Die Konfigurationsdatei .muttrc enthält die mutt-Einstellungen für den jeweiligen Benutzerist. Die Datei ist im Home-Verzeichnis des jeweiligen Benutzers zu erstellen.

Für die nachfolgende Befehle wird muttrc nicht benötigt. Die Befehle zum Verschlüsseln und Signieren werden direkt mit set- Befehl an den E-Mail-Client gesendet.

nano ~/.mushrc

Der Inhalt der Datei lt.

set crypt_use_gpgme=yes
set crypt_autoencrypt=yes
set crypt_replyencrypt=yes
#set crypt_autosign=yes
#set crypt_replysign=yes
#set crypt_verify_sig=yes

Es werden die ausgehenden Nachrichten verschlüssel, wenn für den Empfänger ein gültiger öffentlicher Schlüssel im Schlüsselbund vorhanden ist.

Die drei letzten Zeilen können kommentiert werden, wenn der Nextcloud-Server über einen eigenen GPG Sign Key verfügt.

mutt - pipe

echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | mutt -s "Verschlüsselte Nachricht" -e "set crypt_autoencrypt=yes" max.muster@mail.de

# automatisches Signieren kann mit set crypt_autosign=no ausgeschaltet werden. 
echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | mutt -s "Verschlüsselte Nachricht" -e "set content_type=text/html, realname='$(hostname)', set crypt_autoencrypt=yes; set crypt_autosign=no" max.muster@mail.de

neomutt - pipe

echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | neomutt -s "Verschlüsselte Nachricht" -e "set content_type=text/html, realname='$(hostname)', set crypt_autoencrypt=yes" max.muster@mail.de

# automatisches Signieren kann mit set crypt_autosign=no ausgeschaltet werden. 
echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | neomutt -s "Verschlüsselte Nachricht" -e "set content_type=text/html, realname='$(hostname)', set crypt_autoencrypt=yes; set crypt_autosign=no" max.muster@mail.de

mutt - pipe mit Anhang

echo "Der Anhang ist auch verschlüsselt." | mutt -s "verschlüsselte Nachricht mit Anhang" -e "set content_type=text/html, realname='$(hostname)', set pgp_autoencrypt=yes" -a secret.pdf -- max.muster@mail.de
echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | mutt -s "Verschlüsselte Nachricht" -e "set content_type=text/html, realname='$(hostname)', set crypt_autoencrypt=yes"  -a secret.pdf max.muster@mail.de

# automatisches Signieren kann mit set crypt_autosign=no ausgeschaltet werden. 
echo "Supergeheime Nachricht" | gpg --encrypt --armor --recipient max.muster@mail.de | mutt -s "Verschlüsselte Nachricht" -e "set content_type=text/html, realname='$(hostname)', set crypt_autoencrypt=yes; set crypt_autosign=no"  -a secret.pdf max.muster@mail.de

mutt und hooks

Warning

Das funktioniert nur im mutt oder neomutt Clientmodus. Mit pipes werden so KEINE verschlüsselten Nachrichten versendet, dafür muss die oben erwähnte Variante verwendet werden‼️

In der .muttrc können über Hooks Versandregeln definiert werden. Dazu werden die Zeilen einfach am EOF hinzugefügt.

send-hook . 'unset pgp_autosign; unset crypt__autoencrypt'
send-hook '~t max.muster@mail.de' 'set crypt_autoencrypt'
send-hook '~t lisa.mueller@mail.de' 'set set crypt_autosign; set crypt_autoencrypt'
  • send-hook . 'unset pgp_autosign; unset crypt__autoencrypt' = globale Regel, hebt alle vorherigen Einstellungen auf
  • für Empfänger max.muster@mail.de = verschlüsseln
  • für Emüfänger lisa.mueller@mail.de = verschlüsseln & signieren

Die einzelnen Optionen sind in der offiziellen Dokumentation von mutt zu finden:

Tip

Wie erstellt man sein eigenes GnuPG-Schlüsselpaar?
Wie lädt man die Schlüssel auf einen Hardwaretocken, z.B. Yubikey oder Nitrokey?
Zu den Anleitungen und Hilfen 🔗 YubiKey Themenseite auf strobelstefan.de 😎


Server Hardening

Benutzerverwaltung Raspberry Pi

⚠️ Diese Anleitung stellt nur einen Auszug der Möglichkeiten der Linux-Benutzerverwaltung dar. Bitte zwingend auf die eigenen Anforderungen abstimmen!

Neuen Benutzer anlegen

sudo adduser <benutzer>
sudo usermod -aG sudo <benutzer>
sudo usermod -aG users <benutzer>

# Wird eine eigene Gruppe für die SSH-Anmeldung verwendet ist der neue Benutzer dort zwingend hinzuzufügen.

# Benutzer wechseln
su - <benutzer>

# Passwort vergeben
passwd

SSH-Schlüssel für neuen Benutzer anlegen

Es sind die SSH-Schlüssel für den neuen Benutzer anzulegen, wie in Abschnitt 👉 SSH-Verbindung zwischen Client und Server mit Public Keys beschrieben.

mkdir ~/.ssh
chmod 0711 ~/.ssh

# Den SSH-Key in die Datei kopieren
sudo nano ~/.ssh/authorized_keys

# Alternativ kann auch mit ssh-copy-id der öffentliche Schlüssel vom eigenen Client übertragen werden
ssh-copy-id -i ~/.ssh/id_rsa.pub benutzer@neuer-server

# Rechte neu setzten
sudo chown root:root ~/.ssh/authorized_keys
sudo chmod 644 ~/.ssh/authorized_keys
sudo systemctl restart sshd

Benutzer pi deaktivieren bzw. löschen

Note

Der Benutzer pi wird bei aktuellen Raspberry Pi OS-Versionen nicht mehr mit ausgeliefert. Der Abschnitt bietet aber einen guten Überblick über das Linux-Benutzermanagement.

Bevor ein bestehender Benutzer auf dem System deaktiviert oder gelöscht wird, unbedingt prüfen, ob

  • SSH-Zugriff möglich ist
  • der neue Benutzer Mitglied der Gruppe sudo ist und auch wirklich sudo-Befehle ausführen kann.

Ist beides möglich, kann der Benutzer deaktiviert bzw. gelöscht werden.

# Anzeige der Benutzerdaten
chage -l pi

# Bevorzugete Option
chsh -s /usr/sbin/nologin pi

# Lock Account
sudo passwd -l pi

# Unlock Account
sudo passwd -u pi

# Benutzeranmeldung sperren
sudo usermod -L pi

# Benutzer 
sudo deluser pi

# Benutzer inkl. Home-Verzeichnis löschen
sudo deluser --remove-home pi

fail2ban

Was ist fail2ban?

sudo apt install fail2ban

Für die Anpassung ist eine neue Datei mit dem Namen jail.localanzulegen. Die Orginaldatei jail.conf kann bei Updates überschrieben werden.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

SSH lässt sich absichern mit dem Eintrag in der jail.local. Der bestehende Abschnitt ist durch die nachfolgenden Zeilen zu ersetzen.

sudo nano /etc/fail2ban/jail.local
[sshd]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 900
ignoreip = 127.0.0.1/8
  • enabled = true = fail2ban wird für sshd aktiviert
  • port = ssh = legt den SSH-Port fest. Wird SSH auf einem anderen Port genutzt, ist dieser hier einzutragen
  • filter = sshd = Verweist auf den Namen des Filters, der zur Überwachung des SSH-Dienstes angewendet werden soll. Die Filterregeln definieren, auf welche Ereignisse zu achten ist und wie bösartiges Verhalten zu erkennen ist.
  • logpath = /var/log/auth.log = Hier wird der Pfad zu der Protokolldatei (/var/log/auth.log) angegeben, in der authentifizierungsbezogene Ereignisse für SSH aufgezeichnet werden. Fail2ban durchsucht diese Protokolldatei nach Anzeichen für unbefugte Zugriffsversuche.
  • maxretry = 5 = nach wie vielen erfolglosen Anmeldeversuchen die IP-Adresse gesperrt wird
  • bantime = 900 = WIe lange die IP-Adresse in Sekunden gesperrt wird, bis eine erneute Anmeldung erlaubt wird (900 Sekunden = 15 Minuten)
  • ignoreip = 127.0.0.1/8 = IP-Adresse, die nicht geblockt werden soll, auch nach mehr als 5 erfolglosen Anmeldeversuchen. Diese Konfiguration ist wichtig. Sie verhindert, dass Sie von Ihrem eigenen Fail2ban-Server ausgesperrt werden.

Die Log-Datei und die Rechte lassen sich manuell anpassen.

sudo touch /var/log/auth.log

sudo chmod 640 /var/log/auth.log

jail nextcloud.conf erstellen:

sudo nano /etc/fail2ban/filter.d/nextcloud.conf

Inhalt anpassen:

[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"

nextcloud.local-Datei erstellen:

sudo nano /etc/fail2ban/filter.d/nextcloud.local

Inhalt anpassen:

[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /mnt/data/nc-data/data/nextcloud.log

fail2ban neu starten und Status der Konfiguration ansehen:

sudo systemctl start fail2ban.service
sudo systemctl enable fail2ban
sudo fail2ban-client status nextcloud

fail2ban Benachrichtigungen

Die Konfiguration wird im Abschnitt 🔗 fail2ban beschrieben und ist Voraussetzung für den Versand der Benachrichtigungen.

fail2ban kann auch E-Mail mit Nachrichten zu bestimmten Ereignissen an eine definierte E-Mail-Adresse senden.

# Backup der Datei anlegen
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak

# Datei bearbeiten
sudo nano /etc/fail2ban/jail.conf

# Die Zeilen in der Datei sind anzupassen
...
destemail = email@meineadresse.de
...
sender = email@meineadresse.de
...
mta = mail
...
# action = %(action_)s
action = %(action_mwl)s
...

sudo systemctl restart fail2ban.service

E-Mail-Versand beim Neustarten des Raspberry Pi ausschalten.

sudo nano /etc/fail2ban/action.d/mail-buffered.local

# In die Datei kopieren
[Definition]
actionstart =
actionstop =

# Dummy-Dateien anlegen
sudo cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail.local
sudo cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois-lines.local
sudo cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois.local
sudo cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-buffered.local
sudo cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-common.local

sudo systemctl restart fail2ban.service

unattended-upgrade

sudo apt install unattended-upgrades

unattended-upgrades konfigurieren

sudo dpkg-reconfigure -plow unattended-upgrades

Datei anlegen ...

sudo nano /etc/apt/apt.conf.d/10periodic

... und mit Inhalt füllen.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

ufw - Firewall

Warning

Werden Ports über die Firewall geschlossen, ist ggf. eine SSH-Anmeldung am Server nicht mehr möglich. Der Port 22 sollte deshalb unbedingt geöffnet bleiben!

Ist der Server über SSH nicht mehr erreichbar, kann der Raspberry Pi an einen Monitor angeschlossen werden und eine normale Benutzeranmeldung durchgeführt werden. Es sollte hier unbedingt das Tastaturlayout über sudo raspi-config auf "Deutsch" gesetzt werden, um die Anmeldeinformationen, insbesondere das Passwort, ohne Probleme eingeben zu können.
Standardmäßig verwendet der Raspberry Pi ein englisches Tastaturlayout, was insbesondere bei der Eingabe von Sonderzeichen mit einem deutschen Layout eine kleine oder große Herausforderung darstellen kann 😀.

sudo apt install ufw

Die erste Regel ist das Freischalten von Port 22 für SSH, damit man immer Zugriff auf den Server bekommt.

sudo ufw allow 22

oder eine striktere Regel

sudo ufw limit ssh

ufw has the ability to deny connections from an IP address that has attempted to initiate 6 or more connections in the last 30 seconds. Users should consider using this option for services such as SSH.

IPV6 deaktivieren (optional)

sudo nano /etc/default/ufw

# Zeile alt
IPV6=yes

# Zeile neu
IPV6=no

Zwei Profile sind in /etc/ufw/applications.d/ anzulegen.

Profil 1: Port 80 - nextcloud_80

sudo nano /etc/ufw/applications.d/nextcloud_80

Inhalt der Datei

[nextcloud_80]
title=Nextcloud - Port 80
description=Nextcloud - Port 80 for http
ports=80/tcp

Profil 2: Port 443 - nextcloud_443

sudo nano /etc/ufw/applications.d/nextcloud_443

Inhalt der Datei

[nextcloud_443]
title=Nextcloud - Port 443
description=Nextcloud - Port 443 for https
ports=443/tcp

ufw-Änderungen einlesen und neu starten:

sudo ufw allow 22
sudo ufw app update nextcloud_443
sudo ufw app update nextcloud_80
sudo ufw allow nextcloud_80
sudo ufw allow nextcloud_443

Die Standardregel besagt, dass jede eingehende Verbindung abgelehnt wird und jede ausgehende Verbindung erlaubt wird.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Weitere Ports, die freigegeben werden können:

sudo ufw allow 80/tcp
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw allow 67/tcp
sudo ufw allow 67/udp
sudo ufw allow 123/tcp
sudo ufw allow 123/udp

sudo ufw deny 25
sudo ufw enable
sudo ufw reload
sudo ufw app list

Weiterführende Informationen gibt es in meinem Blog.


PHP Version

siehe dazu 🔗 PHP-Fehler


Logrotate

Logritate archiviert und löscht Protokolldateien in regelmäßigen Abständen.

Logrotate - Install

sudo apt install logrotate

# Installierte Version anzeigen
logrotate --version

Konfiguration

Die Konfigurationsdateien werden im Verzeichnis /etc/logrotate.d/ abgelegt.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
#dateext

# uncomment this if you want your log files compressed
compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may be also be configured here.
Command Description
weekly rotates the log files once a week
su root syslog will archive the logs using the specific user (root) and group (syslog) to prevent issues with permissions
rotate 4 makes sure that four old versions of the file are saved. Rotates a given log four times before deleting it, so this keeps four weeks of logs online.
create The old file is saved under a new name and a new file is created
compress compress causes logrotate to compress log files to save space. This is done using gzip by default, but you can specify another program
include This important option makes sure that the content of the directory /etc/logrotate.d is included. In this directory, files exist that specify how to handle some individual log files.
dateext Archive old versions of log files adding a date extension like YYYYMMDD instead of simply adding a number. The extension may be configured using the dateformat and dateyesterday options.

Die Konfigurationsdateien für die Programme liegen im Verzeichnis /etc/logrotate.d und werden tw. nach deren Installation automatisch dort angelegt. Die Konfigurationsdateien können anschließend angepasst werden, um die globalen Vorgaben aus /etc/logrotate.conf zu überschreiben.

Command Description
rotate x keep x log files (x = number of log files)
hourly, daily, weekly, monthly, yearly rotate interval
compress compress the rotated files.
missingok don’t write an error message if the log file is missing.
notifempty don’t rotate the log file if it is empty
compress compress archive
delaycompress This command is useful if you want to compress the archived logs, but want to delay the compression. When delaycompress is active, an archived log is compressed the next time that the log is rotated. This can be important when you have a program that might still write to its old log file for a time after a fresh one is rotated in. Note that delaycompress works only if you have compress in your configuration.

Weitere Informationen finden sich in manpage man logrotate.

Beispiel

Es wird eine Datei für das regelmäßige Löschen für 👉 imagebackup.log anglelegt.

sudo nano /etc/logrotate.d/imagebackup

Der Inhalt der Datei kann beispielhaft aussehen:

/var/log/imagebackup.log {
        rotate 4
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        endscript
}

Tip

Die Logs werden in das Verzeichnis /var/log/ geschrieben, was sich bei einem Raspberry Pi auf der SD-Karte befindet.
Protokolldateien lassen sich auch auf ein externes Speichermedium schreiben, das nach dem Vorbild von 👉 Datenverzeichnis und temporäres Uploadverzeichnis auf externen USB-Stick verschieben eingehängt wird. Der Pfad ist dann in den Skripten jeweils anzupassen.


sysstatus.sh

Das Skript wird angelegt mit

sudo nano /etc/scripts/sysstatus.sh

Die Rechte werden angepasst mit

sudo chown root:root /etc/scripts/sysstatus.sh

sudo chmod 0644 /etc/scripts/sysstatus

Der Inhalt des Skripts kann auf meiner Website abgerufen werden.

Logrotate, damit die Protokolldatei regelmäßig archiviert und gelöscht wird.

sudo nano /etc/logrotate.d/sysstatus
/var/log/sysstatus.log {
        rotate 4
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        endscript

Logwatch

Das Open Source Tool logwatch erstellt einen kurzen, übersichtlichen Check über die Logs eines Linux-basierten Servers. Es bietet eine gute und transparente Anlaufstelle und es ermöglicht, sich vorgefilterte Meldungen anzeigen zu lassen (z.B. Festplatte voll, fehlerhafte Anmeldungen an sicherheitsrelevanten Diensten oder um einfach nach dem Status der letzten installierten oder veränderten Pakete in der Paketverwaltung zu sehen). 2

Ich verwende Logwatch nicht, da es mir für einen schnellen Überblick zu umfangreich ist. Anstelle von Logwatch verwende ich ein eigenes Skript. 👉 sysstatus.sh

Installation

sudo apt install logwatch

Parameters

Parameter
--output stdout/mail/file Specifies the output method. (Default: stdout)
--format text/html Specifies the output format. (Default: text)
--filename X Specifies the output file X.
--detail low/med/high Specifies the detail level of the report. (Default: low)
--mailto X Sends the generated report by mail to the address X. (requires an installed MTA)
--range today Specifies the time period to report on (see logwatch --range help).

Logwatch - Usage

Logwatch should be run with high permissions otherwise the tool won´t get access to system logs.

Log from current day

sudo logwatch --detail low --range today 

Log-in HTML format

sudo logwatch --detail high --range yesterday --format html --filename ~/logwatch/$(date +%F).html 

Log sent via email - range yesterday

sudo logwatch --detail high --range yesterday --format html --mailto email@adresse

Log sent via email - range 30 days

sudo logwatch --detail low --range 'between 30 days ago and yesterday' --mailto email@adresse 

Logwatch - CRON Setup

Damit auch die E-Mail-Nachrichten versendet werden können, muss Postfix / mutt auf dem System installiert sein. 👉 E-Mail-Versand mit Postfix

sudo crontab -e

Add the following line somewhere in the crontab file:

0 6 * * *  /usr/sbin/logwatch --detail med --format html --range yesterday --mailto email@adresse > /dev/null 2>&1

Zusätzliche Tweaks

Verzögerter Boot

Angeschlossene externe Festplatten werden manchmal nicht schell genung vom Betriebssystem erkannt. Das Verhalten kann bei einem alten, schachen Raspberry Pi und bei konventionellen HDDs auftreten. Der Eintrag in der /etc/fstab wird versucht einzubinden, aber das Speichermedium ist noch nicht bereit..

Die Folge, das Betriebssystem schaltet in den Recovery Modus und der Raspberry Pi startet nicht. Das System ist dann auch über einen SSH-Zugang nicht mehr erreichbar.

Lösung 1

Eine Anpassung in der /boot/config.txt verschafft dem externen Speicher ein wenig Zeit, bevor der Bootvorgang startet

Bis Bullseye 🎯

sudo nano /boot/config.txt

ab Bookworm 🐛

sudo nano /boot/firmware/config.txt
# Am Ende der Datei eintragen
program_usb_timeout=1

# Weiterer Eintrag in der Datei
# The command instructs to wait for a given number of seconds in start.elf 
# before loading the kernel.
boot_delay=30

Lösung 2

Man verzichtet auf den Eintrag in der /etc/fstab und bindet den externen Speicher über CRON und eine Shellskript direkt nach dem erfolgreichen Bootvorgang ein.

🔗 storage-mount.sh

RTC-Modul DS3231

RTC steht für Real Time Clock ⏰ und hilft dem Raspberry Pi nach einem Neustart die eingestellte Zeit nicht zu verlieren, da der kleine Einplatinenrechner über keine eingebaute Batterie verfügt.

Das RTC-Modul DS3231 ist auf den GPIOs anzubringen und anschließend zu aktivieren.

sudo raspi-config

# Auswählen
3 Interface Options --> P5 I2C

Dateien anpassen

sudo nano /etc/modules

# In Datei eintragen
i2c-dev
i2c-bcm2708

I2C-Modul installieren

sudo apt update && sudo apt install i2c-tools && sudo shutdown -h now

Raspberry Pi herunterfahren und das RTC DS3231 anschließen.

sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

Wird "68" ausgegeben wurde das DS3231 erkannt und kann verwendet werden.

echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-1/new_device

# Ausgabe, wenn RTC-Modul erfolgreich erkannt wurde
ds3231 0x68

Einstellung bei jedem Neustart laden

sudo nano /etc/rc.local

# Zeile VOR "exit 0" einfügen
echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

Uhrzeit prüfen

# Uhrzeit überprüfen
sudo hwclock
2021-10-09 14:27:07.410247+02:00

# Uhr einstellen
sudo hwclock -w

Nicht mehr benötigte Komponenten abschalten

sudo update-rc.d ntp disable
sudo update-rc.d fake-hwclock disable

Regelmäßiger Neustart des Raspberry Pis

Ein regelmäßiger Neustart des Raspberry Pis ist ggf. sinnvoll und kann mit einem CRON automatisiert werden.

sudo crontab -e

# Reboots the system every Wednesday at 6:05 a.m.
0 6 * * 3 /sbin/shutdown -r +5

ClamAV Virenschutz für die Nextcloud

Dieser Abschnitt ist im Manual, um alle Schritte aufzuzeigen. Vielleicht findet sich eine Lösung, um ClamAV auch auf einem Raspberry Pi sinnvoll mit der Nextcloud zu nutzen.

ClamAV (Clam AntiVirus) ist ein unter der GNU General Public License stehendes Virenschutzprogramm. 1

ClamAV lässt sich aus den Repositories sehr einfach installieren und mit der App Antivirus for files in Nextcloud verwenden.

Die Pakete lassen sich mit dem Paketmanager über die Repositories installieren.

sudo apt-get install clamav clamav-daemon

Nach der Installation ist der ClamAV Service zu stoppen ⏹️, damit die aktuellsten Signaturen eingelesen werden können.

sudo systemctl stop clamav-freshclam.service

Aktualisieren lässt sich ClamAV mit dem Befehl:

sudo freshclam

Der Service kann wieder gestartet ▶️ werden

# ClamAV starten
sudo systemctl start clamav-freshclam.service

# ClamAV Status anzeigen
sudo systemctl status clamav-freshclam.service

Für das regelmäßige, automatische Einspielen der aktuellsten Virensignaturen ist ein CRON Job anzulegen.

sudo crontab -e

Die zwei Zeilen sind einzufügen.

# ClamAV
47 * * * * /usr/bin/freshclam --quiet

Das der Updateprozess über einen CRON erfolgt ist clamav-freshclam noch mitzuteilen.

sudo dpkg-reconfigure clamav-freshclam

ClamAV

Die App Antivirus for files ist über die Verwaltungsoberfläche von Nextcloud zu installieren.

In den Einstellungen der App ist bei Modus ClamAV-Deamon (Socket) auszuwählen.

ClamAV

ClamAV funktioniert damit im Zusammenspiel mit Nextcloud. Es werden alle Dateien überprüft. Der Job läuft im Hintergrund und kann ggf. viele Ressourcen des Raspberry Pis verwenden und eine hohe Arbeitslast erzeugen.

Damit Nextcloud nur neu hinzugefügte Dateien scannt, lässt sich der Background Job ausschalten. Das Deaktivieren der Hintergrundaufgabe ist bei etwas schwacher Hardware durchaus zu empfehlen.

sudo -u www-data php /var/www/html/nextcloud/occ config:app:set files_antivirus av_background_scan --value="yes"

Spende

Gib mir gerne einen Kaffee ☕ aus 😀

Gib mir gerne einen Kaffee ☕ aus !

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Follow Me


Changelog

  • 2025-05-04: Umzug von Repository