Samba / SMB

Ny bruker

Først legg til en system bruker som vil bli brukt som eier av filene på filsystemet

useradd -M -s /usr/sbin/nologin smbuser

Sett passord på denne brukeren. Dette passordet er kun på systemet, og har ingenting med pålogging via samba å gjøre.

passwd smbuser

Legg brukeren til i relevant gruppe for filsystemet

usermod -aG smbgroup smbuser

Legg til brukeres i samba og sett et passord med smbpasswd. Dette passordet blir brukt til pålogging via samba.

smbpasswd -a smbuser

Lag en ny mappe og sett riktige tillatelser/eierskap på mappe for denne brukeren

mkdir /path/to/share
chown smbuser:smbgroup -R /path/to/share

Automatisk mount av samba share ved VPN tilkobling

Eksempel på å auto-mounte og demounte en sambashare når man kobler til/fra VPN via wiregard med NetworkManager.
Script for NetworkManager legges i mapppen /etc/NetworkManager/dispatcher.d, med syntax 10-navn-på-script. Scriptet med laveste tall kjører først.

Scriptet sjekker om man kobler til eller fra VPN. Deretter sjekker om porten er åpen, hvis den er, prøv å mounte sharen.

For feilsøking kan man se logg med journalctl -t SMB_Mount_Script -f.


#!/bin/bash

INTERFACE="wg2"
SHARE="//i.p.addr"
HOST="i.p.addr"
MOUNT_POINT="/nas"
USERNAME_T="smbusername"
PASSWORD_T="smbpassword"
LOG_TAG="SMB_Mount_Script"

# sudo journalctl -t SMB_Mount_Script -f
log_message() {
    logger -t "$LOG_TAG" "$1"
}

if [ "$1" == "$INTERFACE" ] && [ "$2" == "up" ]; then

    log_message "Network interface $INTERFACE is up. Starting SMB mount process."

    sleep 10

    if nc -z -w 5 "$HOST" 445; then

        log_message "SMB port 445 is open on host $HOST. Proceeding with mount operations."

        if [ ! -d "$MOUNT_POINT" ]; then
            log_message "Mount point $MOUNT_POINT does not exist. Creating mount directories."
            mkdir -p "$MOUNT_POINT/Backup"
        fi

        mountpoint -q "${MOUNT_POINT}/Backup" || {
            log_message "Attempting to mount Backup share."
            mount -t cifs "${SHARE}/Backup" "${MOUNT_POINT}/Backup" -o username="$USERNAME_T",password="$PASSWORD_T",iocharset=utf8,uid=1000,gid=1000,vers=3.1.1
            if [ $? -eq 0 ]; then
                log_message "Backup share mounted successfully."
            else
                log_message "Error: Failed to mount Backup share."
            fi
        }

    else
        log_message "Error: SMB port 445 is not open on host $HOST. Aborting mount operation."
    fi

fi

if [ "$1" == "$INTERFACE" ] && [ "$2" == "down" ]; then

    log_message "Network interface $INTERFACE is down. Unmounting SMB shares."

    # Close all dolphin windows and ensure all pending writes gets finished
    pkill -f "dolphin .*${MOUNT_POINT}"
    sync

    umount -l "${MOUNT_POINT}/Backup" && log_message "Backup share unmounted successfully." || log_message "Error: Failed to unmount Backup share."

fi