Linux mint laten samenwerken met W10 of andere linux-PC’s in het lokaal netwerk (thuis).
Linux heeft een handige tool om netwerk-shares te maken, namelijk samba.
Bij een nieuwe Linux-Mint installatie is “Samba” niet standaard geïnstalleerd, maar kan dit eenvoudig via de programmabeheerder.
Installeer Samba en Nemo-Share om bestanden te delen.
Na de installatie dient er een aanpassing te gebeuren aan de smb.conf file.
Maak eerst een veiligheidskopie.
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
open het bestand met de xed tekstbewerker.
sudo xed /etc/samba/smb.conf
voeg volgende zaken toe onder de [GLOBAL] sectie waar je de WORKGROUP ziet staan.
workgroup = WORKGROUP
server min protocol = SMB2_10
client min protocol = SMB2
client max protocol = SMB3
netbios name = PCNAS
workroup moet bij alle aangesloten computers in het netwerk dezelfde zijn en voor W10 is dit de standaard.
De protocollen worden daaronder bepaald.
netbiosname = de naam die je zal zien in het netwerk (lokaal), en mag max 15 tekens lang zijn.(geen speciale tekens).
Sla het bestand op en controleer via volgende code:
cat /etc/samba/smb.conf
Samba herstarten:
sudo systemctl restart smbd
Unix users
Vooraleer je een USER toegang kan geven tot de samba share dient deze USER aangemaakt te worden op de UNIX server PC maw enkel de administrator kan dit doen door eerst een nieuwe unix USER aan te maken. Deze nieuwe users hebben enkel een unix account en geen home directory in de admin pc, maar dit is voor deze toepassing niet nodig. voor verdere info zie useradd –help of man useradd. Onderstaand de code om een unix user aan te maken. Let op onthoud goed de username en paswoorden, want die kunnen in een unix systeem door de encrytpie nooit achterhaald worden! Het paswoord kan altijd verandert worden met passwd.
In sommige situaties willen we om veiligheidsredenen geen homedirectory’s aan een gebruiker toewijzen. In een dergelijke situatie, wanneer een gebruiker inlogt op een systeem dat net opnieuw is opgestart, is de homedirectory root. Wanneer zo’n gebruiker het su-commando gebruikt, is zijn inlogmap de thuismap van de gebruiker, en kan die het systeem benaderen, en dat is net wat we niet willen.
Om gebruikers aan te maken zonder hun homedirectory’s, wordt ‘-M’ gebruikt. De volgende opdracht maakt bijvoorbeeld een gebruiker ’test’ aan zonder een thuismap. Users die niet inloggen op de pc en enkel via samba shares aanloggen moeten geen home directory hebben !!
sudo useradd -M test
#of
sudo useradd -gM sambashare test
De laatste code zal de user ook toewijzen aan de group sambashare.
Samba Users
Samba heeft aparte username’s los van het linux systeem maw, voor iedere gebruiker dien je een apparte username en paswoord aan te maken. Na het invoeren van de usernaam zal er gevraagd worden een paswoord aan te maken. Na deze stap is Samba geconfigureerd.
sudo smbpasswd -a usernaam
Wil je een samba user verwijderen uit het systeem:
sudo smbpasswd -x username
Samba herstarten:
sudo systemctl restart smbd
eventueel de naamserver ook heropstarten=
sudo systemctl restart nmbd
controle van gemaakte samba users.
sudo pdbedit -L
test samba server op fouten:
testparm
Maak nu een map aan in uw homefolder bv. “share” en rechtsklik om het bestands-delen in te schakelen
Zoek nu je eigen lokaal ip adres om straks te weten waar de verbinding zich bevindt.
ip addr | grep inet
de lokatie om uw map te benaderen met een W10 pc zal dan ongeveer er zo moeten uitzien:
\\192.168.0.123\share
om via een andere linux pc te benaderen via de nemo bestandsverkenner =
smb://192.168.0.123/share
iedereen met het toegezegde username en paswoord en die zich in de groep sambashare bevindt zal de map kunnen benaderen, schrijven, lezen en deleten, dus voor specifieke toegangen kan je de vinkjes aanpassen ivm de bestandsrechter per gebruiker.
zie voorbeeld:
Multishares
Om meerdere mensen aan te loggen en een multishare te maken dienen deze users elk een unix en smb username en paswoord aan te maken op de admin pc, maw de admin kan dit enkel doen. (zie voorgaande) Let op : het folder path kan je kiezen maar moet eerst aangemaakt worden !! De adminuser is de user naam van degene die de share maakt. Nu kunnen alle toegewezen users de folder benaderen, schrijven enz, maw dit kan werken als een soort van NAS drive voor thuis of kantoor. De onderstaande code dient op het einde van de smb.conf file bijgevoegd te worden en aangepast naar uw keuze. De group naam van samba kan teruggevonden worden bij systeeminstelling “gebruikers en groepen”. De onderstaande code kan dus aangepast of gekopieerd worden zodat verschillende users verschillende mappen hebben bv algemeen een gemeenschappelijke map. De mogelijkheden zijn dus groot en moeten dus weldoordacht overwogen worden wie wat waar mag zien en doen.
[localsharefolder]
path = /home/$USER/sharedfolder/
comment = nas_drive
browseable = yes
writable = yes
guest ok = no
valid users=user1,user2,user3, @sambashare
force group = sambashare
write mode = 775
directory mode = 775
Voor een goede beschrijving ivm file permissions zie volgende link of in volgende link
Op deze manier kan je een eigen netwerk share opmaken voor thuis en op kantoor. Dus als je nog ergens een oudere pc hebt , installeer er een linux OS op en samba share en maak er een soort van NAS of eigen lokale CLOUD van. Nadeel hiervan is dat je die pc 24/24h moet laten draaien en regelmatig wel eens een backup zal moeten maken van de sharefolder zodat er niets verloren gaat. Dit kan dus heel eenvoudig met zelfs een 10 jaar oude laptop, die verbruiken weinig energie (+-50€/jaar) en zijn dan nog ergens nuttig voor. Onderstaand nog een filmpje hoe je de folder kan bereiken via W10.
Om het iets gemakkelijker te maken is er een script geschreven om het beheren van de samba shares en voor het maken en verwijderen van users. De software houd rekening met wat type of user er aangemaakt of verwijderd wordt, de admin user kan dus niet verwijderd worden. Ook werd er een tool voorzien om gemakkelijk het configuratie bestand aan te passen en er wordt steeds een backup gemaakt vooraleer de wijzigingen doorgevoerd worden zodat je altijd kan terugkeren naar een vorige situatie.
onderstaand kan je het script “sambamanager” downloaden en uitvoeren. Voor het uitvoeren dien je het bestand uitvooerbaar te maken via de filemanager of via de terminal met volgende commando sudo chmod +x sambamanager.sh
#! /bin/bash
#use set -x to debug with no execution of commands use set -xn
#set -x
#----------------------------------------------------------------------------
#vars
sambalocation="/etc/samba/smb.conf"
sambabackup="/etc/samba/smb.conf.bak"
#functions
#----------------------------------------------------------------------------
program_exit(){
cd "/home/$USER"
echo "--------------------------"
echo "program will exit"
$SHELL
exit
}
userprofiles(){
#userprofiles standaard------------------------------------------------------
echo "add following lines to the end of the smb.conf file"
echo "change the parrameters as desired , close te file and restart samba"
echo "first we will make a backup of your conf file"
timestamp=$(date +%s)
bufile="/etc/samba/smb.conf"$timestamp".bak"
sudo cp $sambalocation $bufile
echo "backup file created in /etc/samba/"
read -p "give the profilename :" profilename
dirpath=$(zenity --file-selection --directory --title="share directory")
read -p "give the username (muliple user seperated with , and space) or groupname with @ :" shareusername
sleep 1
sudo xdg-open $sambalocation
echo "
[$profilename]
path = $dirpath
comment = $profilename
browseable = yes
writable = yes
guest ok = no
valid users=$shareusername, @sambashare
force group = sambashare
write mode = 775
directory mode = 775
"
}
#----------------------------------------------------------------------------
check_install(){
if (dpkg -s samba | grep "install ok installed"); then
echo "----------------------------------------------------------------------------"
echo "samba is installed and ready to use"
echo "checking if backup config file is made"
if [ -f $sambabackup ]; then
echo "backupfile already exists = ok"
else
sudo cp $sambalocation "/etc/samba/smb.conf.bak"
echo "backup file created in /etc/samba/"
xdg-open /etc/samba/
fi
else
echo "----------------------------------------------------------------------------"
echo "you need to install samba trough the repositories in order to run this tool"
program_exit
fi
}
#----------------------------------------------------------------------------
addsmbuser(){
setusername
checkunixuser
if (getent passwd {1000..1500} | grep $usname); then
if (sudo pdbedit -L | grep -w $usname) ; then
echo "samba user $usname already exist"
else
echo "samba user $usname doen't exist and will be created"
sudo smbpasswd -a "$usname"
echo "$usname = added to sambashares"
restartsamba
fi
else
echo "smb user can't be created because he's not a unix user'"
fi
listusers
}
#----------------------------------------------------------------------------
removesmbuser(){
listusers
echo "wich user you want to delete"
setusername
if (sudo pdbedit -L | grep -w $usname) ; then
echo "samba user $usname exist and will be deleted"
sudo smbpasswd -x "$usname"
echo $usname " = removed from smb"
restartsamba
read -p "do you want to delete also the unix account $usname (y/n)" answer2
reply2="y"
if test $answer1 = $reply1 ; then
checkuserid=$(id -u $usname)
if test $checkuserid = "1000"; then
echo "this user is the admin user and can't be deleted as unix user"
else
sudo userdel $usname
echo $usname " = removed from the system"
fi
else
echo "the unix user $usname is not removed"
fi
else
echo "samba user $usname doen't exist"
fi
listusers
}
#----------------------------------------------------------------------------
listusers(){
echo "-------------------------"
echo "regular unix users"
sudo getent passwd {1000..1500}
echo "-------------------------"
echo "smb users"
sudo pdbedit -L
echo "-------------------------"
echo "user active in group sambashare"
sudo getent group sambashare
echo "-------------------------"
}
#----------------------------------------------------------------------------
openconffile(){
echo "to use smb with windows computers you need to add some lines to the global section of the config file"
echo "you can change WORKGROUP to the group you want"
echo "the netbiosname is max 15 characters and show up on the network of other computers"
echo "replace : 'workgroup = WORKGROUP' with following lines and save the file and close it "
echo "restart samba after closing the file to implement the changed values"
echo "------------------------------------------------------------------------------------------------------"
echo "
workgroup = WORKGROUP
server min protocol = SMB2_10
client min protocol = SMB2
client max protocol = SMB3
netbios name = PCNAME
"
timestamp=$(date +%s)
bufile="/etc/samba/smb.conf"$timestamp".bak"
sudo cp $sambalocation $bufile
echo "backup file created in /etc/samba/"
sleep 1
sudo xdg-open $sambalocation
}
#----------------------------------------------------------------------------
makebackupfile(){
timestamp=$(date +%s)
bufile="/etc/samba/smb.conf"$timestamp".bak"
sudo cp $sambalocation $bufile
echo "backup file created in /etc/samba/"
sudo xdg-open /etc/samba/
}
#----------------------------------------------------------------------------
setusername(){
echo " specify the username"
read -p "username ? " usname
echo "username = " $usname
}
#check and make unix users-------------------------------------------------------------
checkunixuser(){
if (getent passwd {1000..1500} | grep $usname); then
echo "unix user $usname already exist"
else
echo "unix user $usname doens't exist"
echo "to add a user to the samba share, you need to make a unix user"
echo "this program can made a unix user whitout a user home folder just for samba share acces"
echo "if you need a new user with the home folder you need to make it with the system"
echo "this is not provided in this scope"
read -p "do you want to make a new unix user (y/n)" answer1
reply1="y"
if test $answer1 = $reply1 ; then
echo "making new unix user and give it the sambashare group"
sudo useradd -M $usname
if (groups $usname | grep -w sambashare) ; then
echo "$usname belongs already to sambashare"
else
echo "$usname doen't belong to group sambashare and will be added to the group"
sudo usermod -aG sambashare $usname
groups $usname
fi
else
echo "no new unix user will be made"
fi
fi
}
#restart samba services----------------------------------------------------
restartsamba(){
echo " restart samba services"
sudo systemctl restart smbd
sudo systemctl restart nmbd
}
#----------------------------------------------------------------------------
choisepattern(){
clear
echo "-------------------------------------------"
echo " make your choise ?
1= add smb user
2= remove smb user
3= list smb and unix users
4= change smb config file --WARNING BE CAREFULL--
5= restart samba
6= show smb conf file READ ONLY
7= open samba folder
8= find your ip adress for connection with windows computer
9= make backupfile
10= making special userprofiles
e= exit program"
read -p "choise ? " keuze
echo $keuze
case "$keuze" in
1) echo "add new samba user"
addsmbuser
;;
2) echo "remove samba user"
removesmbuser
;;
3) echo " list smb and unix users"
listusers
;;
4) echo " CHANGE config file"
openconffile
;;
5) restartsamba
echo " samba service restarted"
;;
6) echo " show samba conf file"
clear
cat $sambalocation
#testparm
;;
7) echo " open smb folder"
sudo xdg-open /etc/samba/
;;
8) echo " ip adress of this computer for connection with windows computers"
ip addr | grep inet
;;
9) makebackupfile
;;
10) echo "making special user profiles"
userprofiles
;;
e) echo " exit program"
program_exit
;;
esac
vraagexit
}
#----------------------------------------------------------------------------
main(){
echo "------------------------------------------------"
#choisepattern
vraagexit
}
#----------------------------------------------------------------------------
vraagexit(){
read -p "do you wish to continue (y/n) " keuze2
echo $keuze2
if test $keuze2 = "y" ; then
choisepattern
else
program_exit
fi
}
#----------------------------------------------------------------------------
#program start from here
#info
echo "information----------------------------------------------"
echo "this program is tested for Linux mint 21.3 and 22"
echo "program for configure samba shares"
echo "this program is free for use and modifications"
echo "we are not responsible for any form of system damage"
echo "copyright @2024 sitecsolutions"
echo "---------------------------------------------------------"
check_install
main
$SHELL
Als samba share niet te bereiken is, kan het zijn dat de firewall roet in het eten gooit, test eerst door de firewall uit te zetten, als dit werkt dan moet er een rule toegevoegd worden aan de firewall de status toont de status van de firewaal, enable or disable zet de firewall aan of uit, allow maakt de samba rule aan, app list toont de apps die toegang krijgen, en show added toon de rules die vrijgemaakt zijn in de firewall
sudo ufw status
sudo ufw disable
sudo ufw allow Samba
sudo ufw
enable
sudo ufw app list
sudo ufw added
Men kan deze configuratie ook eenvoudig doen via de GUI in linux mint “firewall”
om een samba locatie te openen via de terminal tik volgende code en geef het paswoord
smbclient //ipadres/share_map_naam