|
Veilige Samba (Linux en Windows)
Op deze pagina (een onderpagina van mijn Linux
pagina's) wat aandacht over hoe de files te benaderen vanuit Linux met
behulp van Samba, on omgedraaid ook weer hoe
vanaf Linux je Windows files te benaderen...
Wat is Samba: de Linux SMB server... SMB is het
'Server Message Block' is het netwerkprotocol dat
gebruikt wordt om in Microsoft Windows bestandsuitwisseling tussen meerdere
computers mogelijk te maken (file sharing), Samba is een open
source project om dit ook vanuit Linux etc aan te kunnen bieden (al heeft
Microsoft officieel de specificaties niet vrijgegeven). Dus als je op de
linux-box een samba-server draait, kan je de files daar vanuit Windows gewoon
als disk zien.
Maar, je kan het ook vanaf andere Linux-systemen benaderen. Op deze
pagina's hier wat uitleg over, en met name over hoe je dit op een veilige
manier over het externe internet kan doen. Geen uitleg over de samba server
zelf (en de ssh-gateway daarop), maar daarover kan je wel wat lezen op mijn
NSLU2 met Debian Linux pagina.
Samba
File Server/Windows files vanuit Linux benaderen
Ik heb een mooie file server aan mijn netwerk hangen (NSLU2), maar: wel met een Windows file system (SMB
gebaseerd). Hoe kan ik hier vanuit Linux bij? Grote kans dat je zo je
netwerk- en gedeelde drives al in de verkenner ziet. Zo niet: in de
'verkenner' (bijvoorbeeld Konqueror in Knoppix, Nautilus in Ubuntu) is het
pad bijvoorbeeld 'smb://mycomputername/mydirectory' .
Windows files op dezelfde computer, maar een andere disk/partitie (fat
of ntfs), zijn gewoon vanuit Ubuntu en Knoppix te lezen (en voor nieuwere
versies ook te schrijven).
Helaas, niet alle programma's kunnen zulke smb:-paden aan. In plaats
daarvan (of er naast) kan ik zo'n drive ook 'mounten', zodat de files via
normale Linux-paden (ik kies hier voor het min of meer standaard pad
/media/smb (Ubuntu, of /mnt/smb op sommige andere
linux-systemen), bij meerdere servers kan je ze bijvoorbeeld nummeren als
smb1, smb2, of meer functionele namen geven)
bereikbaar zijn.
Let op, afhankelijk van je Linux-versie eerst
éénmalig het 'mount-punt' aanmaken:
sudo mkdir /media/smb
en evt de samba file
system driver laden:
sudo apt-get install smbfs
Voorbeeld: als de computer netdisk2 heet, en de share (map)
"DISK 1" (onderstaande is één regel, en de stukjes
tussen < en > (inclusief de < en > ) moet je vervangen door de
voor jouw systeem toepasselijke waarden):
sudo smbmount "//netdisk2/DISK 1" /media/smb -o
username=<je_username>,password="<je_wachtwoord>",uid=<je_username>,gid=<je_username>
Geef je nu 'ls /mnt/smb' (zo iets als 'dir N:'
voor de DOS prompt) dan zie je de files op die disk. De uid/gid (user id,
group id) parameters zorgen dat de files op je gemounte disk als van jou
zijn, en niet van 'root'. Meer info ook op de Nederlandse Linux
Wiki.
Ps: bij een van mijn computers met Ubuntu werd de computernaam
NetDisk niet gevonden (mogelijk omdat ik tijdens die sessie al
te veel had zitten rommelen): dan kan het ook via IP-adres, als iun de regel
hieronder. Alternatief is de naam toevoegen in de /etc/hosts
file (maar alleen bij gebruik van een vast IP
adres!).
sudo smbmount "//192.168.1.9/DISK 1" /media/smb
-o ...'
En ja, nu kan ik ook in Ubuntu met IrfanView in Wine de plaatjes op mijn netwerkdisk bekijken...
Samba
over SSH: veilig vanaf het internet
Tot zo ver werkt het goed op het interne netwerk. Ik kan het file systeem
ook veilig via het internet benaderen: via een 'SSH tunnel' waarmee alle
communicatie via sterke encryptie verloopt. Wat uitleg over SSH op mijn
SSH pagina. Naar keuze kan je dit gebruiken met een
password, of met de (naar mijn idee veiliger) aanpak met key files en pass
phrases, kijk hiervoor op uitleg over het SSH protocol.
Contact leggen met je thuisserver via het internet? Bij veel providers
heb je geen vast IP adres. Dank zij de services van DynDNS kan je een naam koppelen aan je
(wisselende) externe IP adres, en zo je server via naam benaderen (zie ook
mijn server page).
Op linux werkt deze aanpak heel eenvoudig, en kan je het filesysteem
vervolgens normaal mounten: zie ook de Samba
over SSH tunnel mini-howto. Ik pak het iets moderner aan dan in de how-to
uitgelegd, en gebruik de opvolger cifs over poort 445
in plaats van smbfs over poort 139. In Ubuntu als volgt: eerst
een ssh-verbinding opzetten in de achtergrond, vul bij ssh het goede
externe ip-adres en poortnummer in. Let wel, de -L parameter vraagt
juist niet het externe adres, maar het interne adres waar de samba-server
lokaal te vinden is (is overigens bij mij hetzelfde kastje als de ssh
gateway, de NSLU2). Onderstaande code is één regel!
ssh -2 -f -N -p <port> -L 12345:192.168.1.9:445
<ssh_username>@<ipaddress>
En vervolgens met mount de netwerk-disk mounten via het lokale einde van
de ssh-tunnel op 127.0.0.1:12345, als de aangemaakte directory
(ook weer als één regel):
sudo mount -t cifs //netdisk2/shared /media/netdisk2 -o
username=<samba username>,password=<samba
password>,ip=127.0.0.1,port=12345,rw,uid=<username>
Alternatief (met name op de MAC, die de ip= optie
blijkbaar niet kent), hier gaat wel om het wachtwoord gevraagd worden:
sudo mount -t smbfs
//<samba_username>@127.0.0.1:12345/shared /media/netdisk2 -o
rw,uid=<username>
Let op: ik gebruik lokaal een afwijkend poortnummer 12345, omdat
poort 445 (en 139) een systeempoort is, en deze alleen als root
gereserveerd kunnen worden. Maar, als ik ssh met sudo als
root draai, kan'ie weer niet bij mijn ssh-agent en dan is inloggen
met keyfiles weer lastig.
Let op: wel ooit éénmalig een keer van te voren het
mountpunt aanmaken, bijvoorbeeld sudo mkdir
/media/netdisk2
Merkwaardig genoeg werkt credentials= niet zo
maar... Je moet eerst smbfs installeren (waar blijkbaar een
vollediger cifs in zit). Dus eenmalig:
sudo apt-get update
sudo apt-get install smbfs
Je samba/cifs username en wachtwoord kan je overigens veiliger in een
credentials file opslaan (zet dan wel de rechten op user read-only); zie
man smbmount, -o
credentials=<filename>,... Door de juiste aanpassingen in
/etc/fstab is het ook mogelijk zulke shares automatisch met
booten al te laten mounten (al hebben sommige problemen, soms is het
netwerk dan nog niet voldoende actief opgestart; misschien beter in een
init.d script als een der laatsten, of met delay?), voeg de volgende
(één!) regel toe (met credentials file in /root),
bijvoorbeeld:
//netdisk2/shared /media/netdisk2 cifs
auto,credentials=/home/<user>/.smb_credentials,ip=127.0.0.1,port=12345,user
0 0
Windows vanaf het externe internet is wat lastiger: zie verderop op deze
pagina over de NetDrive aanpak, of Samba over SSH for
Windows). Maar, op windows kan je dan ook WinSCP of FileZilla/SFTP gebruiken in plaats van
Samba.
Alternatief (Linux): de SSHFS aanpak
Met dank aan Cybertinus en sverrips van het NedLinux forum (nog niet door mij
uitgetest):
Mocht je Linux gebruiken, dan moet je eens kijken naar sshfs. Daarmee kan je ook SFTP
servers mouten op bepaalde directories. Hoe sshfs werkt durf ik niet
te zeggen. Nog nooit wat mee gedaan. Maar ik weet vrij zeker dat er op
internet howto's te vinden zijn over hoe het werkt.
Installeren met apt-get install sshfs. Daarna moet je een map
kunnen mounten aan een ssh verbinding. Dat doe je als volgt:
sshfs stephan@everywheredomain.nl:/map1 map2
map1 moet de map op de server zijn en map2 een
lokale map.
NetDrive aanpak: veilig vanuit Windows
Via WinSCP of FileZilla/SFTP kan je vanuit Windows ook
bij je files via een SSH-beveiligde verbinding. Maar, wil je de drive echt op
een drive letter (als N:) kunnen mappen? Kijk hier. Met dank aan
Cybertinus van het NedLinux
forum, die onderstaand verhaal voor mij heeft ingetypt op een vraag hierover (nog
niet door mij uitgetest):
Gebruik je Windows? Kijk dan eens naar de tool NetDrive. Daar kan je FTP en WebDAV
shares mee mounten op een driveletter. Dat werkt best leuk. Ik heb het
net ff geïnstalleerd op m'n virtuele 32 bit Windows XP en ik heb gewoon
netjes een share gemaakt naar de SSH server die op de Linux Host staat.
Netdrive werkt op de volgende manier (ik heb hem in het Engels
geinstalleerd, ik hoop dat het toch duidelijk is als jij hem Nederlands hebt
geïnstalleerd):
- Als je NetDrive installeert begin je met het aanmaken van een
site. Onderaan het linker gedeelte van het scherm staan een hele hoop
grijze knopjes, de meest linker moet je hebben.
- Even een naam bedenken voor de share, dat is een kwestie van gewoon
invullen
- Dan kan je nu naar het rechter gedeelte gaan kijken. Bij "Site IP or
URL" vul je het het externe IP in van jouw thuis, dus het IP wat je nu al
gebruikt om extern verbinding te krijgen met SSH. Je kan hier natuurlijk
ook een hostname invullen als je een hostname aan je thuis-IP hebt
gehangen.
- Het "Server Type" moet je op FTP laten staan. Je zal zien dat bij
"Port" nu nog 21 staat (en niet 22, waar SSH op draait). Dat komt straks
goed.
- Bij "Drive" kies je de driveletter waar deze share voortaan op moet
gaan draaien.
- Bij "Account" vul je de gebruikersnaam in waarmee je normaal via SSH
verbind.
- Bij "Password" vul je het wachtwoord van die gebruiker in. Of je het
vinkje "Save pasword" aan laat staan moet je zelf even bepalen. Het is
natuurlijk een stuk makkelijker, maar het is ook een risico mocht iemand
anders achter de computer van je zoon terecht komen.
- "Automatic login when system starts" en "Automatic login when NetDrive
starts" zijn wel handige vinkjes om aan te zetten als je altijd toegang wil
hebben tot deze share. Als je deze 2 vinkjes aanzet wordt de share meteen
aangekoppeld als Windows start.
- Nu moet je even eerst even naar de Advanced instellingen gaan (weer in
die rij grijze knopjes, het meest rechtse knopje moet je nu hebben). Dan
zie je de de optie "SSL" staan en die staat standaard ingesteld op "No
SSL". Als je dat boxje open klikt en daar "SFTP using SSH2" van maakt, dan
ga je daarna over SFTP (dus via je SSH server) werken. Als je op OK klikt
dan zie je dat in het "Port" veldje nu ook netjes poort 22 staat.
- Klik nu op "Save" om de verbinding op te slaan en daarna op "Connect".
Als het goed is zie je nu een explorer venster verschijnen met daarin de
inhoud van de share thuis.
Hopelijk heb je wat aan mijn informatie en ik hoop dat je een verbinding
opgezet krijgt naar jouw thuis.
|