Backup Server::Samba
Algemeen
Samba zorgt ervoor dat gebruikers van een Windows-systeem toegang krijgen tot gedeelde bestanden en printers van een Unix-systeem en andersom.
Bij de Backup-Server is het belangrijk dat we zoveel mogelijk 'air-gapped' zijn en in die context is Samba een behoorlijke open deur.
Samba zal daarom alleen geïnstalleerd worden maar zal per default uitgeschakeld blijven.
Alleen bij uitzondering mag Samba geactiveerd worden en dan alleen voor communicatie met de Admin-PC voor systeemonderhoud en read-only.
Read-Only
Dit houdt in dat in principe niets naar de Backup-Server geschreven kan worden en kunnen er alleen bestanden gecopieerd worden die op de Backup-Server in de share geplaatst zijn.
Zie voor Samba installatie ook https://www.raspberrypi.com/tutorials/nas-box-raspberry-pi-tutorial/
Maak SHARE map
Maak een map aan die via Samba gedeeld mag worden:
ben@pi-nas:~ $ sudo mkdir /store/share
ben@pi-nas:~ $ sudo chmod -R 755 /store/share
ben@pi-nas:~ $ apt list samba
Listing... Done
samba/stable,now 2:4.17.8+dfsg-2 armhf
samba-common-bin/stable,now 2:4.17.8+dfsg-2 armhf
ben@pi-nas:~ $ sudo apt install samba samba-common-bin
Samba wordt geconfigureerd in het bestand /etc/samba/smb.conf
Hieronder alleen de wijzigingen die aangebracht worden:
Global Settings
[global]
## Browsing/Identification ###
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = MSHOME
Share Definitions
[homes] comment = Home Directories browseable = no # Ben Makkink 15 jul 2024 HOMES verborgen. # Comment following line to show HOME shares available = no
[share] comment = Gedeelde bestanden en mappen path = /store/share writable = No create mask = 0755 directory mask = 0755 hosts deny = ALL hosts allow = 192.168.178.0/26 public = no browsable = yes valid users = pi-samba force user = pi-samba
Samba stelt de share alleen beschikbaar als de gebruiker geauthenticeerd is als 'pi-samba' en de share is 'read-only'
Herstart Samba met nieuwe configuratie
ben@pi-nas:~ $ sudo systemctl restart smbd
Creëer geautoriseerde gebruiker
ben@pi-nas:~ $ sudo adduser pi-samba
Adding user `pi-samba' ...
Adding new group `pi-samba' (1001) ...
Adding new user `pi-samba' (1001) with group `pi-samba (1001)' ...
Creating home directory `/home/pi-samba' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for pi-samba
Enter the new value, or press ENTER for the default
…
Is the information correct? [Y/n] y
Adding new user `pi-samba' to supplemental / extra groups `users' ...
Adding user `pi-samba' to group `users' ...
ben@pi-nas:~ $ sudo smbpasswd -a pi-samba
New SMB password: zie LastPass: 007 Backup-Server Raspberry Samba
Retype new SMB password: idem 007
Added user pi-samba.
Samba default gedeactiveerd
Samba zou een opening naar de Backup-Server kunnen zijn voor ransomware.
Daarom wordt de Samba server gedeactiveerd en vervolgens verborgen (gemaskeerd) gehouden totdat Admin deze activeert.
Stop Samba:
ben@pi-nas:~ $ sudo systemctl stop smbd
Check status:
ben@pi-nas:~ $ sudo systemctl status smbd
smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; preset: enabled)
Active: inactive (dead) since Mon 2024-07-15 17:06:12 CEST; 6s ago
Process: 889 ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS (code=killed, signal=TERM)
Main PID: 889 (code=killed, signal=TERM)
Voorkom herstart met boot
Met de eerstvolgende (re)boot
wordt Samba echter door /etc/init.d/smbd elke keer weer automatisch gestart.
Om dit te voorkomen moeten we SMBD (de smbdaemon) verbergen/maskeren.
ben@pi-nas:~ $ sudo systemctl mask smbd
Created symlink /etc/systemd/system/smbd.service → /dev/null.
Check (after reboot):
ben@pi-nas:~ $ sudo systemctl start smbd
Failed to start smbd.service: Unit smbd.service is masked.
Start Samba handmatig
Als nu Samba toch gestart moet worden moet eerrst de maskering (symlink) verwijderd worden.
Verwijder maskering:
ben@pi-nas:~ $ sudo systemctl unmask smbd
Removed "/etc/systemd/system/smbd.service".
Nu kan Samba gestart worden:
ben@pi-nas:~ $ sudo systemctl start smbd
Check Status:
ben@pi-nas:~ $ sudo systemctl status smbd
smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-09-24 11:17:52 CEST; 10s ago
Als het systeem crasht (bijv. stroomstoring) terwijl samba actief is dan zal bij de (re)boot SMBD niet gemaskeerd zijn en start dus gewoon weer op.
Omdat de Backup-Server per default geen Samba-service mag hebben moet daarom bij elke boot SMBD (opnieuw) gemaskeerd worden.
Daarin wordt voorzien door de toevoeging van een @reboot CRON:
@reboot systemctl mask smbd
Samba start/stop toggle met script
Omdat er nogal wat handelingen in de juiste volgorde nodig zijn om Samba veilig te gebruiken op de Backup-Server gebruiken we het script 'Samba-Share'
Script 'samba-share'
Bekijk hier het volledige script
Het proces stap voor stap:
# **********************************************************************************************
# * SAMBA-SHARE script Ben Makkink 21-jul-2024 Raspberry Pi 4 Backup Server *
# * Op de BackupServer is Samba per default niet beschikbaar net zoals de SSD drive waarop *
# * ook de gedeelde map /store/share staat. *
# * Deze share kunnen we gebruiken om een netwerk Windows PC te restoren met backup bestanden *
# * die opgeslagen zijn op de SSD drive. *
# * Dit script checkt of samba en de share beschikbaar zijn, zo niet dan kunnen die opgestart *
# * worden. *
# * Als de share en samba wel beschikbaar zijn dan wordt de optie geboden beide af te sluiten *
# * Om te voorkomen dat de BackupServer langere tijd niet Air-Gapped is blijft deze afsluit *
# * optie open op het scherm met als enige keuze Samba af te sluiten en de SSD te ontkoppelen *
# **********************************************************************************************
#!/bin/bash
clear;
echo;
echo " SAMBA beheer";
echo " ============";
echo;
Introductie header en de she-bang #!/bin/bash waarmee aangegeven wordt welke interpreter de shell gebruiken moet.
# check of samba aktief is systemctl status smbd | grep "running"; chk=$? if [ $chk -ne 0 ]; then yn="n" echo; # Samba is 'dead' echo -n " Samba is niet actief. Wil je Samba starten? Y/N: "; read yn; case $yn in [yY]) echo; echo " Samba wordt gestart...."; systemctl unmask smbd; wait; systemctl start smbd; wait; if mountpoint -q "/store"; then : else echo; echo " SSD wordt gekoppeld...."; # reload ivm bug systemctl daemon-reload; mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store; fi echo; echo -n " Samba is gestart en de SSD gekoppeld. Druk"; read foo; samba-share;; [nN]) echo; echo -n " Samba starten gecanceld. Druk "; read foo; exit;; esac else
Als samba niet actief is, dan wordt de optie geboden Samba al dan niet te starten, zo ja, dan wordt de maskering verwijderd en Samba opgestart:"
systemctl unmask smbd;
systemctl start smbd;
Vervolgens wordt, als dat nog niet het geval is, de SSD gemount:
mount UUID=138d237d-dae1-4c0f-8246-b766b1d33737 /store;
Samba sharing is nu beschikbaar op /store/share. Het script wordt opnieuw gestart met samba-share;;
# samba is running echo; echo " SAMBA IS AKTIEF!."; echo " ********************************************************************************"; echo " * De BackupServer is per default air-gapped ter bescherming tegen ransomware. *"; echo " * De Samba connectie is alleen bedoeld om met een ransomvrije Windows PC *"; echo " * de backup image van deze PC op te halen uit de 'Share' op de Backupserver. *"; echo " * STOP vervolgens SAMBA zo snel mogelijk!!!! *"; echo " * Dit scherm blijft terug komen totdat Samba gestopt en SSD ontkoppeld is. *"; echo " ********************************************************************************"; echo -n " STOP SAMBA NU? Y/N: "; read yn; case $yn in [Yy]) echo; systemctl stop smbd; wait; systemctl mask smbd; wait; umount -l /store; wait; echo; echo -n " Samba is gestopt en SSD ontkoppeld. Druk"; read foo; exit;; [Nn]) echo; echo -n " Actie gecanceld. Druk "; read foo; samba-share;; esac fi
Als Samba wel geactiveerd is volgt er een mededeling dat Samba zo snel mogelijk weer gedeactiveerd moet worden.
Zolang niet verkozen wordt te stoppen, zal dit bericht op het scherm blijven staan.
Als er aan de commandlijn gewerkt moet worden om bijvoorbeeld een bestand in /store/share te plaatsen, zal een andere console geopend moeten worden.
Als de optie te stoppen gekozen wordt wordt Samba gedeactiveerd en gemaskeerd:
systemctl stop smbd;
systemctl mask smbd;
En wordt de SSD ontkoppeld
umount -l /store;