Backup Server::Samba

Naar index

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/

Naar index

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

Installeer Samba

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

Configureer Samba

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

Naar index

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.

Naar index

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.

Deactiveer en maskeer Samba

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.

Naar index

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

Reset Maskering na crash

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

Naar index

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.

Naar index

# 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;;

Naar index

# 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;

Naar index