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.
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.
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.
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.deDocumentRoot
= /var/www/html/nextcloudDirectory
= /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.
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
- 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)
Nach der Installation funktioniert ggf. die Weiterleitung auf das Nextcloud-Dashboard nicht korrekt und die Adresse ist manuell einzugeben.
http://ip-adresse/nextcloud
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:
-
Die Datei wird mit einem Editor bearbeitet. (die Option wird in dieser Anleitung verwendet.)
-
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
- 🔗 Uploading big files > 512 MB
- 🔗 https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html?highlight=output_buffering#configuring-php
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.
Tip
Lesetipp 👉 Mythos oder Wahrheit - Fallen SD-Karten bei einem Raspberry Pi tatsächlich so häufig aus?
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
-
Backup - 🔗 https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html
-
Restore - 🔗 https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html
-
Using the occ command - 🔗 https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#maintenance-commands-label
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.
- 🔗 Datensicherung für die Nextcloud mit rsync
- 🔗 openmediavault und rsync
- 🔗 Datensicherung für die Nextcloud mit BorgBackup
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
- 🔗 https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html
- 🔗 Nextcloud und das lästige Problem mit /.well-known/caldav & /.well-known/carddav
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
- 🔗 Pi-hole – Let's Encrypt-Zertifikat für interne IP-Adressen verwenden
- 🔗 https://certbot.eff.org/instructions?ws=apache&os=debianbuster
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
- ein
Local DNS Records [A/AAAA]
oder - 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.
Nachdem der Eintrag abgespeichert wurde, passiert Folgendes:
- die Clients im Netzwerk senden ganz normale im Hintergrund ihre DNS-Anfragen an den DNS-Server (= Pi-hole)
- Pi-hole nimmt die Anfragen and und verarbeitet sie
- Pi-hole erkennt, dass für die Anfrage
next.meine-domain.de
ein lokaler DNS-Eintrag vorhanden ist - 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.
Die (Sub-)Domain der Nextcloud ist einzutragen.
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
Eigenes WLAN auswählen - klick auf das !
DNS konfigurieren
IP-Adresse des lokalen DNS-Servers, z.B. Pi-hole, eintragen und die SUCH-DOMAIN, also die URL der Nextcloud, eintragen.
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
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
odersudo
auch verschlüsselte E-Mail an die bekannten Empfänger versenden, dann muss für den BenutzerROOT
ebenfalls die öffentlichen Schlüssel importieret werden Benutzer wechseln mitsudo 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 wirklichsudo
-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.local
anzulegen. 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ürsshd
aktiviertport = ssh
= legt den SSH-Port fest. Wird SSH auf einem anderen Port genutzt, ist dieser hier einzutragenfilter = 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 wirdbantime = 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
.
- 🔗 https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-16-04
- 🔗 https://linuxhint.com/logrotate-ubuntu-tutorial/
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
- Projektseite 🔗 https://sourceforge.net/projects/logwatch
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.
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
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 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"
-
ClamAV Fehler und Probleme werden 👉 hier behandelt.
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.
Follow Me
Follow Me
Changelog
- 2025-05-04: Umzug von Repository