Raspberry Pi - Debian 10 "Buster"
Vorwort
Diese Webseite soll den Neulingen und Unerfahrenen den Einstieg in die Welt des Raspberry Pi erleichtern. Vielleicht helfen die Tipps und Anleitungen dem einen oder anderen sein eigenes Raspberry Pi - Projekt voran zu bringen :)
Einleitung
Die heutigen Betriebssysteme und auch die meisten Programme sind auf die dreifache Leistung eines RasPis 3 ausgelegt und überfordern somit den Minirechner enorm! Deshalb wurden angepasste bzw. abgespeckte Betriebssysteme, Programme und (Hintergrund-) Dienste entwickelt. Aber auch da gibt es noch Unterschiede, es kommt vor allem auf die Konfiguration an, Beispiele: verwende Nginx statt Apache, verwende SQLite oder PostgreSQL statt MySQL, usw.
Das Verfassen einer Schritt-für-Schritt - Anleitung zur Server-Konfiguration, und den dazugehörigen Support bei Fragen zu führen, würde meine Zeit zu sehr beanspruchen. Der Raspberry Pi ist zu meinem Hobby geworden, jedoch möchte ich neben meiner Vollzeitarbeit noch meine Freizeit genießen :)
Raspberry Pi - Server konfigurieren
Um den eigenen privaten Server zu konfigurieren benötigt man Zeit - viel Zeit wenn man von der ganzen Linux-Welt noch keine Ahnung hat! Nehmt euch diese Zeit, führt nicht einfach Schritt-zu-Schritt Anleitungen stur aus! Selten entsprechen Anleitungen einen gut konfigurierten Server noch sind diese auf dem aktuellen Stand, denn bedenkt:
den RasPi gibt es seit 2012 und die meisten Anleitungen wurden 2013 / 2014 verfasst und nie auf die aktuellen Versionen von Hardware und Software adaptiert.
Wichtige Themen benötigen mehr Aufmerksamkeit und ggf. auch mehr Meinungen, deshalb besuche weitere Webseiten und lies nach wie andere es machen und dann beschäftige dich warum die es anders machen!
Erläuterung
Es werden die RasPi-Grundlagen und die Linux-Grundlagen vorrausgesetzt. Die wichtigsten Konsolenbefehle (pdf) solltest du ausgedruckt neben dir liegen haben.
Formatierungen dienen zur Darstellung von Code bzw. Befehlen: Tastatur-Eingabe und Bildschirm-Ausgabe
Die Tastatur-Eingabe kann man kopieren und direkt ins Konsolenfenster einfügen!
1. Grundkonfiguration (Erste Schritte)
Welcome to Raspberry Pi
Wir beginnen am Anfang: die aktuelle Raspbian Version wurde mittels "Win32 Disk Imager" auf die Speicherkarte übertragen und in den Kartenslot gesteckt; der Raspberry Pi muss nun an Bildschirm (HDMI), Tastatur, Router (Ethernet-Kabel) und am Strom angeschlossen werden.
Nach dem Bootvorgang gelangt man zum Desktop und das "Welcome to Raspberry Pi" Fenster öffnet sich. Dieses "Willkommen"-Fenster gibt es seit Debian Version 9 (Stretch) und ist im aktuellen Debian Version 10 (Buster) sehr verständlich aufgebaut. Deshalb gehe ich hier nicht darauf näher ein, geht es einfach Schritt für Schritt durch.
Einstellungen, Sicherheit und Konfiguration
Nun gehen wir ins Desktop Menü und wählen "Raspberry Pi Konfiguration" und nehmen folgende Änderungen vor:
- Boot → Zum CLI
- Automatische Anmeldung: -
- Schnittstelle → SSH → Aktiviert
- Hostname: euerWunschname
Danach starten wir den Raspi neu und loggen uns mit dem Benutzernamen "pi" und dem vorhin festgelegten Passwort in der Konsole ein.
Wir löschen mal den VLC-Player und den Chromium-Browser (Optional):
sudo apt remove vlc chromium-browser
sudo apt autoremove
Wenn man möchte kann man nun den SSH-Port ändern:
sudo nano /etc/ssh/sshd_config
#Port 22
Port 1350
sudo service ssh restart
Wir installieren Fail2Ban und übernehmen unseren SSH Port:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
bantime = 10m
ÄNDERN ZU
bantime = 1h
EINTRAG SUCHEN
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
1. ZEILE „port = ssh“ ÄNDERN ZU
port = 1350
2. FOLGENDE ZEILEN ERGÄNZEN
enabled = true
filter = sshd
maxretry = 3
banaction = iptables-multiport
Den Editor verlassen und die Änderungen übernehmen:
sudo fail2ban-client reload
sudo service fail2ban restart
Wir prüfen Fail2Ban mit:
sudo service fail2ban status
sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Jetzt ändern wir den Standard-Benutzername "pi" auf einen eigenen. Dieser Vorgang muss direkt am Pi erfolgen (nicht über SSH!):
sudo passwd root
hierfür genügt ein einfach Passwort, da wir dieses nur für kurz benötigen.
exit
und als "root" einloogen, danach ändern wir den Benutzernamen:
usermod -l neuerBenutzername -d /home/neuerBenutzername -m pi
groupmod -n neuerBenutzername pi
spätestens jetzt vergeben wir auch ein starkes Passwort:
passwd neuerBenutzername
noch schnell eine Datei löschen:
rm /etc/sudoers.d/010_pi-nopasswd
und jetzt testen wir den Benutzer indem wir über SSH uns mit den neuen Daten einloggen!
Wenn das funktioniert, deaktiviert wir wieder die Passworteingabe für root. Dies erfordert die Eingabe vom neuen Passwort vom neuerBenutzername
sudo passwd -l root
Ist das Erledigt kann man nun mit SSH PuTTY verbunden bleiben, die direkte Eingabe am Raspi ist nicht mehr erforderlich.
Erstell regelmäßig und vor Änderungen und Ergänzungen jeder Art ein komplettes Backup deiner SD-Karte mit Win32 Disk Imager. Damit bist du immer auf der sicheren Seite - ich mach es noch heute so!
2. Webinterface (NGINX und PHP)
Nginx ist ein Webserver-Dienst, um Webseiten und Interfaces von anderen Programmen oder Diensten darzustellen. PHP ist eine Webseiten-Programmiersprache.
Achtet immer darauf das ihr unter keinen Umständen die Dienste Apache und MySQL installiert! Auch wenn euer RasPi damit klar kommt gehen wichtige Ressourcen verloren bzw. leidet die Gesamtleistung darunter!
NGINX installieren:
sudo apt install nginx
wir legen eine php-Datei als Test an:
sudo nano /var/www/html/index.php
NGINX konfigurieren:
sudo mv /etc/nginx/sites-enabled/default /etc/nginx/conf.d/website.conf
sudo nano /etc/nginx/conf.d/website.conf
nach der Zeile „root /var/www/html;“ folgendes hinzufügen
client_max_body_size 20M;
index index.html index.htm index.nginx-debian.html;
ÄNDERN ZU
index index.php index.html index.htm index.nginx-debian.html;
UND FOLGENDE ZEILEN AUSKOMMENTIEREN
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
sudo service nginx restart
PHP7.3 installieren:
Anmerkung: viele der folgenden Pakete benötigen wir später für Baikal, Tiny Tiny-RSS und Seafile.
sudo apt install php7.3 php7.3-fpm php7.3-cli php7.3-curl php7.3-json php7.3-intl php7.3-gd php7.3-pgsql php7.3-xml php7.3-opcache php7.3-sqlite3 php7.3-mbstring php7.3-mysql
PHP7 konfigurieren:
sudo nano /etc/php/7.3/fpm/php.ini
;cgi.fix_pathinfo=1
ÄNDERN ZU
cgi.fix_pathinfo=0
upload_max_filesize = 2M
ÄNDERN ZU
upload_max_filesize = 8M
sudo service php7.3-fpm restart
Öffne nun im Browser die IP-Adresse deines Raspis, die index.php sollte automatisch aufgerufen werden!
ifconfig → [IP vom Pi] ..,z.B.: eth0: inet 192.168.0.5
im Browser: http://192.168.0.5 …zeigt die "phpinfo"-Seite an!
3. Kalender & Kontakte (Baikal)
3. Kalender & Kontakte (Baikal)
Veröffentlichtungen-Versionen: https://github.com/sabre-io/Baikal/releases
Installationsanleitung-Quelle: http://sabre.io/baikal/install/
Anmerkung: Die erforderlichen php7.3-Pakete wurden bereits im Schritt Webinterface installiert.
Einrichtung
cd /var/www/html/
sudo wget https://github.com/sabre-io/Baikal/releases/download/0.6.0/baikal-0.6.0.zip
sudo unzip baikal-0.6.0.zip
sudo rm baikal-0.6.0.zip
sudo chown -R www-data:www-data baikal/
cd baikal/
sudo chmod +r Specific/
Installation über Webinterface
http://[IP vom Rapsi]/baikal/html/
-
Server Time zone → Europe/Vienna
-
Email → baikal@example.at
-
WebDAV → Digest
-
Admin-PW festlegen
Auf der 2ten Seite belasssen wir alles. (Use MySQL möchten wir nicht. Wir benutzen SQLite)
Webzugriff Login "Admin" ändern
1. automatisches ausfüllen von „Benutzer“ entfernen, unter:
sudo nano /var/www/html/baikal/Core/Frameworks/BaikalAdmin/Controller/Login.php
if(trim($sLogin) === "") {
$sLogin = "admin";
}
ersetzen durch:
if(trim($sLogin) === "") {
$sLogin = "";
}
2. neuen Benutzernamen setzen (Zeile 98), unter:
sudo nano /var/www/html/baikal/Core/Frameworks/BaikalAdmin/Core/Auth.php
if($sUser === "admin" && $sPassHash === BAIKAL_ADMIN_PASSWORDHASH) {
versetzen durch
if($sUser === "Benutzer" && $sPassHash === BAIKAL_ADMIN_PASSWORDHASH) {
Die Datenbank von einer früheren Baikal-Version übernehmen (Optional, auf eigene Gefahr!)
Hinweis:
Die Einträge (Kalender, Kontakte) aus einer früheren Version übernehmen ist nichts für Anfänger und erfolgt auf eigene Gefahr. Besondere Vorsicht wird empfohlen und ein Backup der Speicherkarte ist ein muss!
Ein kopieren der ganzen DB führte zu Fehler, da sich die Struktur bei vielen tables veränderte.
Die Lösung ist: die Benutzer samt Adressbuch und Kalender übers Baikal-Admin anzulegen (fehlendes IDs mit leeren Einträgen „temp“ ergänzen) und nur die Einträge/Termine aus Adressbuch/Kalender zu transferieren. Somit beschränkt sich der phpLiteAdmin-Export auf folgendes:
table → calendarobjects
table → cards
und auch nur mit folgenden Optionen:
Export with structure → NEIN (inaktiv setzen)
Export with data → JA
Add DROP TABLE → NEIN
Add TRANSACTION → JA
Comments → JA
Zugriff auf die Datenbank
Um Zugriff auf die SQLite-Datenbank zu erhalten, benötigt man ein ähnliches Programm wie phpMyAdmin (MySQL). Für SQLite empfiehlt sich phpLiteAdmin.
In das Verzeichnis der Datenbank wechseln, Datei herunterladen (Version) und entpacken:
cd /var/www/html/baikal/Specific/db
sudo wget https://bitbucket.org/phpliteadmin/public/downloads/phpLiteAdmin_v1-9-8-2.zip
sudo unzip php*.zip
Das Standard-Passwort ist „admin“. Da wir phpLiteAdmin geich wieder löschen, belassen wir das Standard-Passwort. Die Datei im Browser aufrufen und gewünschte Änderungen durchführen:
http://[IP vom Raspi]/baikal/Specific/db/phpliteadmin.php
Die Dateien wieder löschen.
sudo rm php* readme.md
4. Nachrichten - Feeds (Tiny Tiny RSS)
4. Nachrichten - Feeds (Tiny Tiny RSS)
Veröffentlichtungen-Versionen: https://git.tt-rss.org/fox/tt-rss.git
Installationsanleitung-Quellen:
https://git.tt-rss.org/fox/tt-rss/wiki/InstallationNotes,
https://git.tt-rss.org/fox/tt-rss/wiki/PhpCompatibilityNotes,
https://git.tt-rss.org/fox/tt-rss/wiki/UpdatingFeeds
Anmerkung: Die erforderlichen php7.3-Pakete wurden bereits im Schritt Webinterface installiert.
Datenbank installieren und konfigurieren
sudo apt install postgresql
sudo -u postgres psql
\password postgres
Enter new password: [Datenbank-Passwort]
Enter it again: [Datenbank-Passwort]
CREATE USER "www-data" WITH PASSWORD 'Datenbank-Passwort';
CREATE DATABASE ttrss WITH OWNER "www-data";
GRANT ALL PRIVILEGES ON DATABASE ttrss to "www-data";
\quit
Peer-Authentifizierungsfehler beheben:
sudo nano /etc/postgresql/11/main/pg_hba.conf
local all all peer
ersetzen durch
local all all trust
sudo service postgresql restart
Tiny Tiny RSS installieren und konfigurieren
sudo apt install git
cd /var/www/html
sudo
git clone https://git.tt-rss.org/fox/tt-rss.git ttrss
sudo chown -R www-data:www-data ttrss/
Hat alles geklappt, so können wir die Installation von Tiny Tiny RSS nun im Browser unter http://[IP vom Raspi]/ttrss/install/ aufrufen.
Database type → PostgreSQL
Username → www-data
Password → Datenbank-Passwort
Database name → ttrss
Host name → (leer)
Port → 5432
→ [Test configuration]
Tiny Tiny RSS URL: https://ttrss.example.at
Haben wir die Daten richtig eingegeben, so erhalten wir die Ausgabe Database test succeeded und können anschließend auf Initialize database klicken. Daraufhin sollte ein Generated configuration file erscheinen mit einer Textbox darunter.
Den darinstehenden Text (Inhalt der Konfigurationsdatei) kopieren wir und fügen ihn in die config.php Datei ein.
sudo nano /var/www/html/ttrss/config.php
Konfiguration einfügen
und ÜBER DER ZEILE
define('SELF_URL_PATH', 'https://ttrss.example.at');
ERGÄNZEN WIR DIE FOLGENDE ZEILE
define('_SKIP_SELF_URL_PATH_CHECKS', true);
Wir vergeben noch Schreibrechte auf einige Ordner. Anschließend löschen wir das install-Verzeichnis:
cd /var/www/html/ttrss/
sudo chmod -R 777 cache/images/ cache/feeds/ cache/export/ cache/upload/ feed-icons/ lock/
sudo rm -r install
Anmerkung: den Administrator-Benutzernamen "Admin" kann man in der aktuellen Version leider nicht mehr ändern.
Nachrichten Feeds automatisch aktualisieren
Quelle: https://www.raspberrypi.org/documentation/linux/usage/systemd.md
Wir erstellen uns einen systemd Eintrag mit nachstehenden Inhalt:
sudo nano /etc/systemd/system/ttrss.service
[Unit]
Description=ttrss_backend
After=network.target postgresql.service
[Service]
User=www-data
ExecStart=/var/www/html/ttrss/update_daemon2.php
[Install]
WantedBy=multi-user.target
Testen:
sudo systemctl start ttrss.service
sudo systemctl stop ttrss.service
Fehler? … wenn nein, dann hinzufügen:
sudo systemctl enable ttrss.service
Newsplus-Plugin (Optional)
Durch dieses Plugin lässt sich das News+ Android App benutzen. Anleitung/Quelle: https://github.com/hrk/tt-rss-newsplus-plugin/
cd /var/www/html/ttrss/plugins
sudo git clone https://github.com/hrk/tt-rss-newsplus-plugin.git
sudo mv tt-rss-newsplus-plugin/api_newsplus ./
sudo chown -R www-data:www-data api_newsplus/
sudo rm -r tt-rss-newsplus-plugin/
Plugin aktivieren
sudo nano /var/www/html/ttrss/config.php
define('PLUGINS', 'auth_internal, note');
ersetzen durch
define('PLUGINS', 'auth_internal, note, api_newsplus');
Außerdem muss man noch im Webinterface unter Einstellungen das Kästchen bei "Aktiviere API-Zugang" aktivieren.
Ich verwende folgendes Android-App: https://play.google.com/store/apps/details?id=org.ttrssreader
Tiny Tiny RSS - Version aktualisieren (git update)
Früher oder Später solle man die Version von Tiny Tiny RSS aktualisieren.
Ein Backup der config.php – Datei wird empfohlen (falls diese aktualisiert werden sollte)! Nach dem Upgrade ggf. die Inhalte der config.php vervollständigen.
cd /var/www/html/ttrss/
sudo git pull origin master
ODER
sudo git --git-dir=/var/www/html/ttrss/.git pull origin master
5. Verschlüsselung (OpenSSL)
5. Verschlüsselung (OpenSSL)
Kennst du noch den TOP-TIPP?
Backup durchgeführt?? - hoffentlich! :)
Das Thema Verschlüsselung hat seit dem NSA-Skandel immer mehr an Bedeutung gewonnen! Den Datenverkehr einer öffentlichen Webseite zu verschlüsseln macht nur wenig Sinn, jedoch möchten wir auch sensible Daten bzw. Dateien transferieren (Seafile, Baikal, usw.) welche es zu schützen gibt.
Eines gleich vorweg:
eine RICHTIGE VERSCHLÜSSELUNG (selbst signiertes Zertifikat) kann NICHT MIT 4 ZEILEN CODE zustande kommen! Auch wenn man auf den meisten Seiten so eine Anleitung findet ist es einfach Falsch!
Dann gibt es da noch:
die ganzen eingetragenen Zertifizierungsstellen bei denen man signierte Zertifakte erhält (egal ob kostenlos oder kostenpflichtig), wo man jedoch nie mit Sicherheit sagen kann ob die nicht den privaten Schlüssel an Behörden weitergeben (egal ob gewollt oder ungewollt) und somit die ganze Verschlüsselung unwirksam ist!
Wie gut das Zertifikat ist und welche Mängel es aufweist kann man kostenlos unter QUALYS SSL LABS testen. Da wir unser Zertifikat selbst signieren wird es als nicht vertrauenswürdig eingestuft und wir erhalten automatisch die Note T, jedoch mit der Fußzeile "Wenn Vertrauensprobleme ignoriert werden: Note A". Für uns entscheident ist ein Zertifikat ohne Mängel sowie folgende Bewertung:
Protocol Support: | 100% | Protokollunterstützung |
Key Exchange: | 90% | Schlüsselaustausch |
Cipher Strength: | 90 % | Verschlüsselungsstärke |
Für dieses umfangreiche Thema habe ich eine Anleitung verfasst: Raspberry Pi - OpenSSL (pdf)
HTTPS-PORT (Port-Weiterleitung):
Der Port 443 ist der zuständige HTTPS-Port (SSL/TLS). Eine Port-Weiterleitung am Router ist erforderlich!
6. externe Festplatte (Optional - falls gewünscht)
6. externe Festplatte (Optional - falls gewünscht)
Da Speicherkarten nur wenig Speicherplatz bieten, ist das Auslagern von großen Datenmengen auf eine externe Festplatte (2,5 oder 3,5 Zoll) sinnvoll. Eine 3,5 Zoll Festplatte benötigt eine eigene Stromversorgung (Kosten), deshalb rate ich zu einer 2,5 Zoll welche direkt vom Netzteil (2A) des RasPis versorgt werden kann.
persönliche Anmerkung:
ich selbst habe die PiDrive 314GB von Western Digital in Verwendung, wobei für unsere Zwecke jede ehemalige Laptop-Festplatte bestens geeignet sein dürfte.
Eine neu gekaufte Festplatte hat meistens keine Partitionen, somit schaut es aus als ob die Festplatte nicht erkannt wird. Bei Windows wird man automatisch darauf hinwiesen, in der Debian - Konsole muss man selbst aktiv werden! Es gibt eine echt gute Anleitung wie man eine Festplatte partitioniert, einbindet, usw. Deshalb hab ich nachträglich nur einen Verbesserungsvorschlag: ein "nofail" in fstab ergänzen
Schritt: Festplatte in fstab eintragen
UUID=efd48c69-3780-44f2-8262-1f54c1a4aae6 /media/usbdisk ext4 defaults,nofail 0 0
"nofail" verhindert das bei fehlender Festplatte der „emergency mode“ (=Auto-Login als Root) aktiviert wird!
7. private Cloud (Seafile)
7. private Cloud (Seafile)
Vorwort
Mit einer Cloud kann man persönliche Daten überall abrufen bzw. Dateien synchronisieren. Das ist sehr nützlich wenn man beispielsweise seine Musik am PC zu Hause, am Laptop für Unterwegs und in der Arbeit auf den gleichen Stand halten möchte, und / oder man seine persönlichen Dokumente übers Smartphone abrufen können möchte.
Eine private, also in der eigenen Wohnung befindlichen, Cloud schützt zusätzlich noch vor fremden Blicken.
Ein Backup dieser Daten ist in den meisten Fällen nicht erforderlich, da die Dateien am Server mit dem PC zu Hause (und / oder dem Laptop) synchronisiert werden und somit die Daten doppelt (bis dreifach) vorhanden sind - vorausgesetzt der Wohnung passiert nichts (Brand, Diebstahl, usw.). Wenn man 100%ig sicher gehen möchte, sollte man ein Backup bei einem Freund oder im Elternhaus unterbringen.
Veröffentlichtungen-Versionen: https://github.com/haiwen/seafile-rpi/releases
Installationsanleitung-Quellen:
https://download.seafile.com/published/seafile-manual/deploy/using_mysql.md
https://download.seafile.com/published/seafile-manual/deploy/deploy_with_nginx.md
https://download.seafile.com/published/seafile-manual/deploy/https_with_nginx.md
Anmerkung: Die erforderlichen php7.3-Pakete wurden bereits im Schritt Webinterface installiert.
Anmerkung:
Auf der Seafile-Seite als auch bei der Installation von Seafile wird die Verwendung von SQLite in Verbindung mit einer externen Festplatte (USB-Laufwerk) abgeraten. Deshalb wird als Datenbank MariaDB (MySQL) genommen.
Benutzer anlegen, MySQL installation und konfigurieren
sudo su
adduser seafile --disabled-login
apt install mariadb-server
cd /media/festplatte/Seafile
mkdir seafile-data
chown seafile:seafile seafile-data/
Pakete installieren:
apt install python-mysqldb python2.7 libpython2.7 python-setuptools python-ldap python-mysqldb python-memcache python-urllib3 python-requests
MYSQL-Server stoppen und im gesicherten Modus starten:
/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
UPDATE user SET authentication_string = password("MYSQL-ROOT-PASSWORT") where User='root';
FLUSH PRIVILEGES;
exit
Raspi neu starten:
shutdown -r 0
Seafile installieren und konfigurieren:
sudo su seafile
wget https://github.com/haiwen/seafile-rpi/releases/download/v7.0.5/seafile-server_7.0.5_stable_pi.tar.gz
tar -xvf seafile-server_7.0.5_pi.tar.gz
rm seafile-server_7.0.5_pi.tar.gz
cd seafile-server-7.0.5/
./setup-seafile-mysql.sh
Wir folgen den Anweisungen am Bildschirm und definieren Namen des Servers, Domain, Speicherplatz, usw. Das meiste ist dabei selbsterklärend. z.B.: "seafile data dir" → "/media/festplatte/Seafile/seafile-data"
Sollte man sich dabei unsicher fühlen: auf der Seafile-Seite ist alles genau beschrieben https://download.seafile.com/published/seafile-manual/deploy/using_mysql.md#user-content-Setup
Nun starten wir Seafile und Seahub:
./seafile.sh start
./seahub.sh start
Seafile automatisch starten (Autostart einrichten)
sudo nano /etc/systemd/system/seafile.service
[Unit]
Description=Seafile
After=network.target mysql.service
[Service]
Type=forking
ExecStart=/home/seafile/seafile-server-latest/seafile.sh start
ExecStop=/home/seafile/seafile-server-latest/seafile.sh stop
User=seafile
Group=seafile
[Install]
WantedBy=multi-user.target
sudo systemctl enable seafile seahub
sudo nano /etc/systemd/system/seahub.service
[Unit]
Description=Seafile hub
After=network.target seafile.service
[Service]
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/home/seafile/seafile-server-latest/seahub.sh start
ExecStop=/home/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile
[Install]
WantedBy=multi-user.target
sudo systemctl enable seafile seahub
Raspi neustarten und Status überprüfen
sudo shutdown -r 0
sudo service seafile status
● seafile.service - Seafile
Loaded: loaded (/etc/systemd/system/seafile.service; enabled; vendor preset: enabled)
Active: active (running) ......
sudo service seahub status
● seahub.service - Seafile hub
Loaded: loaded (/etc/systemd/system/seahub.service; enabled; vendor preset: enabled)
Active: active (running) ......
Seafile zu Fail2Ban hinzufügen
Quelle: https://download.seafile.com/published/seafile-manual/security/fail2ban.md
wir öffnen die Datei und fügen am Ende nachstehendes hinzu:
sudo nano /etc/fail2ban/jail.local
[seafile]
enabled = true
port = http,https
filter = seafile-auth
logpath = /home/seafile/logs/seahub.log
maxretry = 3
Wir prüfen Fail2Ban mit:
sudo service fail2ban status
sudo fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: seafile, sshd
E-Mails vom Seafile-Server versenden (z.B.: Passwort zurücksetzen)
siehe https://download.seafile.com/published/seafile-manual/config/sending_email.md
Update / Upgrade der Seafile Version
siehe https://download.seafile.com/published/seafile-manual/deploy/upgrade.md
8. Seafile-Client am Raspi
Warum / Wozu?
Diese Frage werden sich vielleicht einige stellen, deshalb hier die Erklärung: meine Musik ist auf Seafile abgelegt und sämtliche Daten am Seafile-Server sind verschüsselt. Um meine Musik u.a. bequem am TV-Gerät, als Entertainment Center dient Kodi, abspielen zu können, muss die Musik unverschüsstelt sein. Die Daten stellen wir mit einem NFS-Server im lokalen Netzwerk bereit.
Anleitung
Quelle: https://help.seafile.com/en/syncing_client/linux-cli.html
sudo apt install seafile-cli
cd /media/festplatte
sudo mkdir NFS Seafile-to-NFS
sudo chown pi:pi Seafile-to-NFS/
cd Seafile-to-NFS/
mkdir seafile-client
cd /media/festplatte/NFS
sudo mkdir Musik
sudo chown pi:pi Musik/
Initialisierung und Daemon starten:
cd /media/festplatte/Seafile-to-NFS
seaf-cli init -d seafile-client/
seaf-cli start
Datenbank herunterladen:
Die "ID-der-Seafile-Bibliothek" sieht man wenn man in der URL im Seafile-Webinterface, nachdem man die Bibliothek angeklickt hat.
Beispiel für die ID: 0536c006-8a43-449e-8718-39f12111620d
seaf-cli download -l ID-der-Seafile-Bibliothek -s http://127.0.0.1:8000 \
-d /media/festplatte/NFS -u Seafile-Account-Benutzername -p Seafile-Account-Passwort
Status abfragen:
seaf-cli status
Autostart einrichten:
sudo nano /etc/systemd/system/seafcli.service
[Unit]
Description=seafcli
After=network.target seahub.service
[Service]
Type=forking
ExecStart=/usr/bin/seaf-cli start
ExecStop=/usr/bin/seaf-cli stop
User=cenzServer
Group=cenzServer
[Install]
WantedBy=multi-user.target
sudo systemctl enable seafcli
9. Samba-Server
Was ist Samba / SMB? ⇒ https://de.wikipedia.org/wiki/Samba_(Software)
sudo apt install samba samba-common-bin
Bei der Installation wird man gefragt ob man ein zusätzliches dhcp-client Paket installieren möchte. Dies beantworten wir mit Nein / No.
Jetzt konfigurieren wir den Samba-Server in 3 Schritten:
sudo nano /etc/samba/smb.conf
1. Standard-Arbeitsgruppe ändern
workgroup = WORKGROUP
ÄNDERN ZU
workgroup = PiSamba
2. Standard-Inhalte nicht mehr teilen
WIR GEHEN ZU
#======================= Share Definitions =======================
ALLES WAS DARUNTER FOLGT KOMMENENTIEREN WIR MITTELS „;“ AUS
Das sieht dann so aus:
;[netlogon]
;[homes]
; comment = Home Directories
; browseable = no
; read only = yes
; create mask = 0700
; directory mask = 0700
; valid users = %S
;[netlogon]
; comment = Network Logon Service
; path = /home/samba/netlogon
; guest ok = yes
; read only = yes
;[profiles]
; comment = Users profiles
; path = /home/samba/profiles
; guest ok = no
; browseable = no
; create mask = 0600
; directory mask = 0700
;[printers]
; comment = All Printers
; browseable = no
; path = /var/spool/samba
; printable = yes
; guest ok = no
; read only = yes
; create mask = 0700
;[print$]
; comment = Printer Drivers
; path = /var/lib/samba/printers
; browseable = yes
; read only = yes
; guest ok = no
; write list = root, @lpadmin
3. Unser Verzeichnis hinzufügen
FOLGENDE ZEILEN AM ENDE DER DATEI ERGÄNZEN
[profilname]
comment = shared directory
valid users = getshareddirectory
path = /media/festplatte/NFS/synchronisiertes-seafile-verzeichnis
guest ok = no
browseable = yes
read only = yes
Die ganzen Konfigurations-Parameter, für die smb.conf-Datei, findet man unter
https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
Testen der Konfigurationsdatei mit:
testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[sharedmusic]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
log file = /var/log/samba/log.%m
logging = file
map to guest = Bad User
max log size = 1000
obey pam restrictions = Yes
pam password change = Yes
panic action = /usr/share/samba/panic-action %d
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd program = /usr/bin/passwd %u
server role = standalone server
unix password sync = Yes
usershare allow guests = Yes
workgroup = CENZ
idmap config * : backend = tdb
[profilname]
comment = shared music
path = /media/festplatte/NFS/synchronisiertes-seafile-verzeichnis
valid users = getshareddirectory
Entscheident ist vor allem die Ausgabe: Loaded services file OK.
Den Benutzer „getshareddirectory“ müssen wir zuerst in UNIX anlegen um ihm ein Passwort zuordnen zu können. Statt dem herkömmlichen adduser-Befehl, bei dem ein Homeverzeichnis, eine Gruppe, usw. angelegt werden, verwenden wir „useradd“:
sudo useradd getshareddirectory
sudo smbpasswd -a getshareddirectory
Danach starten wir den Dienst neu:
sudo systemctl restart smbd.service
Konfiguration Samba-Client:
Um unser Samba-Verzeichnis auf anderen Geräten hinzufügen zu können, sind einige Daten erforderlich. In der Regel sind das folgende:
Server: HOSTNAME-VOM-PI oder IP-ADRESSE-VOM-PI
Pfad: /profilname
Domäne/Workgroup: PiSamba
Benutzer: getshareddirectory
Passwort: [wie bei smbpasswd eingegeben]
Fail2Ban hinzufügen?
Man könnte Samba noch zu Fail2Ban hinzufügen. Dies habe ich jedoch nicht gemacht, da ich nur innerhalb vom lokalen Netzwerk den Dienst Passwortgeschützt und nur Leseberechtigt anbiete.
Sollte man das Bedürfnis verspüren dennoch Fail2Ban zu konfigurieren, muss man im Internet selbst recherchieren. z.B. auf https://www.heise.de/security/artikel/Erpressungs-Trojaner-wie-Locky-aussperren-3120956.html und / oder https://github.com/CanaryTek/ransomware-samba-tools/tree/master/fail2ban
10. NFS-Server (Alternative zu Samba)
10. NFS-Server (Alternative zu Samba)
Anmerkung:
"Samba" kann einiges mehr als ein NFS-Server, deshalb gibt zahlreiche Samba-Clients für wohl alle Systeme (u.a. als Android-App). Gute NFS-Clients sucht man vergeblich.
sudo apt install nfs-kernel-server
Ein einfaches Beispiel:
sudo nano /etc/exports
FOLGENDE ZEILE ERGÄNZEN
/media/festplatte/NFS/synchronisiertes-seafile-verzeichnis *(ro,all_squash,no_subtree_check)
Änderungen übernehmen:
sudo exportfs -ra
Die ganzen Kommandos, für die exports-Datei, findet man unter https://linux.die.net/man/5/exports
So kann man beispielsweise nur für eine bestimmte IP-Adresse das NFS-Laufwerk freigeben, was natürlich sicherer ist. Das "ro" steht für "read-only", Schreibrechte für das NFS-Laufwerk erhält man mit "rw" ("read-write").
NFS-Laufwerk mounten:
Das hinzufügen vom NFS-Laufwerk am NFS-Client (Notebook, PC, Kodi, usw.) funktioniert je nach Betriebssystem etwas anders. Dafür gibt es jedoch genügt Videos auf YouTube bzw. Anleitungen im Internet.
Beispiel, NFS-Laufwerk am Linux-PC hinzufügen:
sudo apt-get install nfs-common
showmount -e [IP vom Raspi]
Export list for [IP vom Raspi]:
/media/festplatte/NFS/synchronisiertes-seafile-verzeichnis
*
sudo mount -t nfs \
[IP vom Raspi]:/media/festplatte/NFS/synchronisiertes-seafile-verzeichnis /mnt/nfsshare
/mnt/nfsshare sollte nun die Daten enthalten
Laufwerk entfernen und Pakete deinstallieren:
sudo umount /mnt/nfsshare
sudo apt-get remove nfs-common
sudo apt-get autoremove
Themen die dich interessieren könnten:
Themen die dich interessieren könnten: