Datei-Server


© Januar 2024, letzte Änderung am 18.02.24

--- still under construction ---

Übersicht

DEB & Samba-Installation in KVM

Eigentlich hat jede FritzBox auch die Möglichkeit Dateien zwischen zu speichern.
Allerdings altert das die Flash-Bausteine oder
extern angeschlossenen USB-Speicher.
Und irgendwann plötzlich, sind sie nicht mehr lesbar.
Abgesehen davon, ist natürlich eine Fritzbox nicht so performant
wie ein Mini-ITX 10 W Prozessor mit angeschlossener SSD.

Mein 24x7 PC ist ein Gigabyte J3455N auf dem mit KVM virtualisiert
verschiedene Systeme laufen.
Zurzeit sind üppige 16 GB RAM und eine kleine 240 GB SSD verbaut.
Um es als echtes NAS laufen lassen zu wollen,
müsste ich weitere Festplatten anschließen, was ich allerdings nicht vorhabe.
Das geplante externe Tauschlaufwerk, braucht nur temporär kleinere Mengen
speichern können und sollte auch der Windows-Welt zugänglich sein.

Um ein weiteres System zu installieren, habe ich zunächst
ein minimales, aktuelles Debian runter geladen.
Zurzeit das 628 MB große:   debian-12.4.0-amd64-netinst.iso.

Dann habe ich den  virt-manager  gestartet,
um eine neue Maschine anzulegen via  create a new virtual machine.
Die Installation erfolgt via runter geladenes Image.
Also  local install  eingestellt, und als Pfad
 /home/m/Downloads/debian-12.4.0-amd64-netinst.iso  ausgewählt.
Debian 12 konnte ich nicht finden, daher  Generic default 
Für einen Datei-Server benötige ich wahrscheinlich nur Plattenplatz,
aber wenig RAM.  2048 MB RAM 2 CPUs  40 GB (109 GB noch frei auf der SSD)
Name in der KVM  deb12

Danach wird auch schon von der ISO gebootet und ich sehe den Bootscreen.
Zunächst wird der grafischer Installer ausgewählt.
Germany,   Deutsch,   Deutschland
gj7  als Netzwerk-Name eingestellt.
Die vollständige 40 GB Platte kann genutzt werden.
Auswahl: Desktop environment, Xfce, SSH server eingestellt
Einen weiteren Dialog, was benötigt wird, gibt es nicht.
Grub wird auf erster Partition installiert.
Nach knapp 25 min war die Installation fertig
und ein Neustart ist erforderlich.

su
apt update → Alle Pakete sind aktuell

Zum ersten Mal eingeloggt und aktualisiert,
ergibt keinen Handlungsbedarf.

Ich habe dann Synaptic aufgerufen, um einiges unnötiges zu entfernen. Z.B.
raus:  libre  hv3  exfalso  parole  xfburn
rein:  samba
Alternativ geht das natürlich auch über die Shell.
Der smbclient ist nicht zwingend nötig, erleichtert aber den Test.

apt install samba smbclient

Das  SMB-Protokoll  ist zwar für Linux nicht optimal,
dafür aber mit vielen Systemen kompatibel.

weitere Tools

Für Samba auf einem virtuellen Rechner, macht es Sinn
via einer  Bridge  mit den Host verbunden sein,
damit eine eigene IP-Adresse für die virtuelle Maschine genutzt werden kann.
Im Router kann man die einmal mit DHCP festgelegte Adresse fixieren.

Einen  Remote-Zugriff  via ssh, sollte man grundsätzlich weiter schützen.
Z.B indem man noch fail2ban installiert.
Danach sollte ein  ssh-Zugriff möglich sein. Z.B.  ssh -X m@gj7.fritz.box
Danach ist es nicht mehr nötig via Host  gj1.fritz.box & virt-manager
auf das virtuelle System gj7 zuzugreifen.

Zum Anfang

Samba-Server Konfiguration

Um aufzuzeigen, wie es funktioniert, definiere ich verschiedene Benutzer,
welche kein  ~/Home-Laufwerk erhalten und sich nicht einloggen können.
Dafür definiere ich zuächst die Gruppen und dann die Benutzer.
Die Befehle sind bei DEB etwas versteckt und lassen sich z.B. mit
whereis addgroup finden.
Zu guter letzt, setze ich noch die Passwörter.

su 
/usr/sbin/addgroup a

lege Gruppe »a« (GID 1001) an …
/usr/sbin/addgroup b → 1002

/usr/sbin/adduser --gid 1001 --disabled-login --no-create-home --shell /bin/false a1
Lege neuen Benutzer »a1« (1004) mit Gruppe »a« (1001) an …

/usr/sbin/adduser --gid 1002 --disabled-login --no-create-home --shell /bin/false b1

smbpasswd -a a1
Added user a.
smbpasswd -a b1

smbpasswd -a c     funktioniert nicht, da noch nicht angelegt
New SMB password:
Retype new SMB password:
Failed to add entry for user c.
 

Überprüfen kann man das wie folgt:

cat /etc/passwd 

m:x:1000:1000:m,,,:/home/m:/bin/bash
a1:x:1004:1001:,,,:/home/a1:/bin/false
b1:x:1005:1002:,,,:/home/b1:/bin/false

cat /etc/group

a:x:1001
b:x:1002

pdbedit -w -L     # von Samba übernommen?
a1:1004:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:3EE64AC0FF6BEF0569E58DED9566C1FB:[U ]:LCT-65B5D999:
b1:1005:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:C3E68F0FB85276CE359A03F5D11B028A:[U ]:LCT-65B5D7C0:
 

Nun sind noch Ordner anzulegen.
Je nach Quelle, wird auch /home, /media oder /samba vorgeschlagen.

su
cd /
mkdir share
mkdir a1                      mkdir b1
chown a1:a a1                 chown b1:b b1
chmod 700 a1/                 chmod 700 b1/

ls -la   zur Überprüfung
drwxr-xr-x  5 root    root    4096  3. Feb 22:51 .
drwxr-xr-x 19 root    root    4096 28. Jan 18:20 ..
drwxr-xr-x  2 a1      a       4096  3. Feb 22:49 aSmb
drwxr-xr-x  2 b1      b       4096  3. Feb 22:49 bSmb

Und zu guter Letzt, ist es nötig den SMB-Server zu konfigurieren.
Ganz am Ende der bereits existierenden Datei,
kann man Benutzerverzeichnisse ergänzen.

su
cd /etc/samba
cp smb.conf smb.conf.backup01
nano /etc/samba/smb.conf

[global]
# hosts allow = 127. 192.168.    evtl. ergänzen

[homes]
read only = no                   geändert

;[printers]                      alles auskommentiert
;   comment = All Printers
;   browseable = no
;   path = /var/tmp
;   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

# oder ; Kommentare hinter z.B.  comment = samba_a  sind nicht erlaubt!
[smba1]
    comment = samba_a
    path = /share/a1
    guest ok = no
    browsable = yes
    create mask = 0600
    directory mask = 0700
    read only = no
[smbb1]
    comment = samba_b
    path = /share/b1
    guest ok = no
    browsable = yes
    create mask = 0600
    directory mask = 0700
    read only = no

Nach der Änderung muss Samba neu gestartet werden,
damit die Änderungen übernommen werden.

su
systemctl restart smbd.service
Job for smbd.service failed because the control process exited with error code.
See "systemctl status smbd.service" and "journalctl -xeu smbd.service" for details.

cat /var/log/samba/log.smbd

Offensichtlich habe ich mich irgendwo vertippt.
Wenn alles in Ordnung ist, kommt keine Meldung.
Überprüfen kann man den Daemon wie folgt.

su
systemctl status smbd.service  vergleichbar mit  systemctl status nmbd
smbd.service - Samba SMB Daemon
     Loaded: loaded (/lib/systemd/system/smbd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-02-03 23:51:39 CET; 14s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
    Process: 4930 ExecCondition=/usr/share/samba/is-configured smb (code=exited>
    Process: 4932 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (>
   Main PID: 4941 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 3 (limit: 2285)
     Memory: 5.4M
        CPU: 352ms
     CGroup: /system.slice/smbd.service
             ├─4941 /usr/sbin/smbd --foreground --no-process-group
             ├─4943 /usr/sbin/smbd --foreground --no-process-group
             └─4944 /usr/sbin/smbd --foreground --no-process-group

Feb 03 23:51:38 gj7 systemd[1]: Starting smbd.service - Samba SMB Daemon...
Feb 03 23:51:39 gj7 systemd[1]: Started smbd.service - Samba SMB Daemon.

Weitere Überprüfung

testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
…

smbclient -L localhost -U%

   Sharename       Type      Comment
   ---------       ----      -------
   homes           Disk      Home Directories
   smba1           Disk      samba_a
   smbb1           Disk      samba_b
   IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
   nobody          Disk      Home Directories
SMB1 disabled -- no workgroup available

homes und nobody könnte man noch ausblenden.

Smb auf einem Client benutzen

Eigentlich sollte es auf dem Klienten reichen smbclient zu installieren,
aber aus unerfindlichen Gründen bekomme ich bei einem Rechner,
trotzdem unter deb buster, mit Thunar, keinen Zugriff hin.

sudo apt install smbclient gvfs-backends samba

smbclient -L //gj7.fritz.box
Unable to initialize messaging context
Enter WORKGROUP\a1's password: 

   Sharename       Type      Comment
   ---------       ----      -------
   homes           Disk      Home Directories
   smba1           Disk      samba_a
   smbb1           Disk      samba_b
   IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
   a1              Disk      Home Directories

Reconnecting with SMB1 for workgroup listing.
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Failed to connect with SMB1 -- no workgroup available

Benutzung in der Shell (weil sich Thunar manchmal ziert)

Der Benutzer ist hier a1. Ein Zugriff ohne korrekten Pfad & Servername scheitert.

cd Downloads
smbclient -U a1 //gj8.fritz.box/smba1
mkdir failed on directory /var/run/samba/msg.lock: Permission denied
Unable to initialize messaging context
Enter WORKGROUP\a1's password: geheim
Try "help" to get a list of possible commands.
smb: \> 

Mit help kann ich mir den riesigen Befehlsvorrat angucken.
Wahrscheinlich kommt man mit folgendem aus ls cd mkdir rm put get quit.

cd web
mget *
Get file Element6und7.png? y
getting file \web\Element6und7.png of size 983708 as Element6und7.png (23430.5 KiloBytes/sec)…
Get file MK52_schleppkette.png? y

Über einen Dialog wird man wahrscheinlich seltener arbeiten. Daher noch ein Beispiel als eine Befehlszeile.
Um noch mehrere, per Semikolon getrennte, Befehle absetzten zu können, ist noch -c nötig.
promt off vermeidet das Bestätigen jeder Datei.
Die zweite Zeile enthält noch das Samba-Passwort, hier "geheim"

smbclient -U a1 //gj8.fritz.box/smba1 -c 'cd web;prompt off;mget *.png'
smbclient -U a1%geheim //gj8.fritz.box/smba1 -c 'cd web;prompt off;mget *.png'

Zielverzeichnis ist das zuvor gewählte ~/Download.
Alles mit gleichen Namen wird ohne Warnung überschrieben.
Daher empfehle ich voher einen Ordner zu erstellen und dort hin zu gehen.

Zum Anfang

Benutzung mit Thunar

Die benutzung via Thunar ist relativ einfach.
Via Go > Browse Network gelange ich zu den Netzlaufwerken.
Alternativ finde ich im linken Bereich Browse Network.

thunar network:///

Entsprechend dem Benutzer, wähle ich den Ordner und werde aufgefordert ein Passwort einzugeben.

thunar gj8.fritz.box

Leider klappt es nicht immer.

thunar problem

Zum Anfang

ftp-Server

Zunächst richte ich einen neuen Benutzer ein, welcher auschließlich via ftp
auf sein Laufwerk kommt.

su
/usr/sbin/adduser --disabled-login --no-create-home  --shell /bin/false ftpuser
Lege neuen Benutzer »ftpuser« (1006) mit Gruppe »ftpuser« (1006) an …
Erstelle Home-Verzeichnis »/home/ftpuser« nicht.
…

passwd ftpuser
Geben Sie ein neues Passwort ein:  Geheim 

Als weiteren Schutz schließe ich einen ssh-Zugriff aus
und starte den ssh Dämon erneut.

su
nano /etc/ssh/sshd_config

DenyUsers ftpuser        # am Ende ergänzt

systemctl restart sshd

Für nicht einlogbare Nutzer lege ich einen Ordner an. Unter: /mnt.

cd /mnt
mkdir ftp
chown ftpuser: ftp
chmod 550 ftp

Zunächst muß der entsprechende Dämon installiert werden.

su
apt install vsftpd

Für FTP over SSL ist vorher noch ein Zertifikat zu erstellen.

su 
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

 

Dann müssen noch zwei Dateien zur Konfiguration editiert werden.

cd /etc
cp vsftpd.conf vsftpd.conf.backup01  Sicherheitskopie
nano /etc/vsftpd.conf

anonymous_enable=NO               # bei DEB12 bereits aktiv no
local_enable=YES                  # nur vom eigenen Verzeichnis erlaubt
write_enable=YES                  # aktivieren
#local_umask=022
ascii_upload_enable=YES           # aktivieren
ascii_download_enable=YES         # aktivieren

chroot_local_user=YES             # aktiviert   um nur auf /mnt/fts
chroot_list_enable=YES            # aktiviert   zugreifen zu können
allow_writeable_chroot=YES        # ergänzt

chroot_list_file=/etc/vsftpd.chroot_list # aktiviert
local_root=/mnt/ftp               # ergänzt

ls_recurse_enable=YES

#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#ssl_enable=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
su
nano vsftp.chroot_list

m                         # Benutzer m
ftpuser

Nach Abschluss der Konfiguration ist ein Neustart des Dienstes erforderlich.

systemctl restart vsftpd
systemctl stop vsftpd.service   # falls erforderlich
systemctl start vsftpd.service
systemctl enable vsftpd.service
systemctl status vsftpd

Zum Anfang

Alternativen

WebDAV Nun würden vielleicht einige anmerken, dass einer der Hauptgründe für Synology die hervorragende Software ist. Das ist auch korrekt - aber diese Software ist ganz offiziell "open source". Synology gibt regelmäßig den source code von "DSM" nach release der aktuellen Version frei. Daher ist das Projekt "XPEnology" entstanden. Im Klartext heißt das, dass man Synology DSM auf fast jedem PC verwenden kann. --------------- FreeNAS, --------------- Anfänger OpenMediaVault ------------- Unternehmen FreeNAS oder NAS4Free --------------- TrueNAS Core (ehemals FreeNAS) ---------------- Samba NFS Sabnzbd FTP HTTP Plex Media Server OpenMediaVault choose system drive
diff -rq a0.0 a0.1

Zum Anfang

Quellen

veuhoff.net   NAS Eigenbau: Empfehlungen für all diejenigen, die sich einen NAS-Server selber bauen möchten (2022)
https://www.technikbrennpunkt.de/artikelserie-anleitung-fuer-ein-preiswertes-selbstbau-nas-1-hardware-3814/ Anleitung für ein preiswertes Selbstbau NAS [#1 Hardware]
https://wiki.ubuntuusers.de/NFSv4/
https://basic-tutorials.de/ratgeber/software/so-kannst-du-einen-einfachen-ubuntu-fileserver-erstellen/
https://www.linode.com/docs/guides/linux-mount-smb-share/
https://www.pcwelt.de/article/1146977/netzwerken_mit_samba_-_so_geht_s-linux.html
https://www.samba.org/samba/docs/4.9/man-html/smb.conf.5.html
https://www.oreilly.com/openbook/samba/book/ch09_02.html
https://geekrewind.com/install-and-configure-vsftpd-on-ubuntu-20-04-18-04/
https://www.pcwelt.de/article/1182617/samba-im-terminal-unkompliziert-auf-dateien-zugreifen.html
https://www.thomas-krenn.com/de/wiki/FTP-Server_unter_Debian_einrichten
https://blog.zazu.berlin/hardware/schneller-linux-fileserver-datenserver-im-eigenbau-teil-1-hardware.html

Zum Anfang