|
Samba staat voor een groep open source netwerktoepassingen (server- en cliënt toepassingen) die de integratie verzorgt van Unix en Linux machines in DOS, Windows, OS/2 en NT netwerken. De samba middleware communiceert via het Server Message Block (SMB) netwerkprotocol. Een onder Linux, Unix of BSD draaiende computer kan hiermee bestanden en printers delen met bovengenoemde besturingssystemen. Hierbij wordt door DOS, Windows, OS/2 en NT gebruik gemaakt van de routerbare TCPBEUI (NetBIOS via TCP/IP) variant over poort 139.
Overigens bestaan er vele versies van het NetBIOS protocol. Het feit dat een SMB verbinding mogelijk is, betekent nog niet dat u een verbinding krijgt. De authentificatie procedures kunnen sterk verschillen, evenals de methode waarin het SMB protocol gebruikt is. De door Microsoft "verbeterde" uitvoeringen van het server Mesage Block protocol zijn daarom tevens pogingen om de concurrentie op achterstand te zetten. Zo maken Windows 2000 en XP bij voorkeur gebruik van poort 445 (SMB over TCP) in plaats van originele SMB over NBT (NetBIOS over TCP/IP) met de poorten 137, 138 (UDP) and 139 (TCP). Om dit bij te benen werd samba 3 ontwikkeld.
SMB Protocol |
Kenmerken |
Besturingssystemen |
---|---|---|
NetBIOS |
Door vrijwel alle netwerkkaarten ondersteund niet routerbaar evenknie (peer to peer) netwerkprotocol. De diensten (messenger, bestands- en printerdeling, onder OS/2 ook modemdeling) zijn bedoeld voor een broadcast werkgroep van op dezelfde hub/switch aangesloten Windows en OS/2 PC's. Dit zuivere NetBIOS protocol is nooit op het internet te zien. |
Alle Windows versies vanaf 3.11. Windows XP verstopte dit netwerkprotocol onder \Valueadd\msft\net\netbeui op de Windows CD). Zie: Windows XP en het NetBEUI protocol. OS/2 LAN manager, OS/2 Warp Connect, OS/2 Warp 4 en opvolger eComStation. |
NetBIOS via TCP/IP, TCPBEUI, SMB over NBT |
Routerbaar netwerkprotocol. De in principe op het internet zichtbare shares dienen via netwerkadresvertaling door een firewall beschermd te zijn. |
Alle Windows versies vanaf 3.11 en OS/2; OS/2 vanaf Warp 3 Connect. Voor het aanzetten van poort 139 op Windows XP zie NetBIOS via TCPIP inschakelen in de XP Home sectie. |
SMB over TCP |
Routerbaar netwerkprotocol. De in principe op het internet zichtbare shares dienen via netwerkadresvertaling door een firewall beschermd te zijn. |
Windows 2000 en XP gebruiken bij voorkeur poort 445 voor hun SMB via TCP communicatie. |
Samba's primaire taak is het verzorgen van bestands- en printerdeling, maar samba 2.0 (1999) kan ook andere diensten van Microsoft Windows NT 4 servers overnemen: authenticatie op het NT domein en emulatie van de Windows Internet Naming Service (WINS). Hiermee functioneert Samba 2 als Primaire Domein Controller (PDC) en serveerdienst voor Netbiosnamen van Windows NT 4 domeinen.
WINS zet NetBIOS-namen om in IP adressen. De DNS regelt dit voor IP hostnamen. DNS (IP) en NetBIOSnamen (NetBIOS via TCP/IP of NetBEUI) kunnen verschillen, maar het gemakkelijker om een netwerkaart dezelfde host- en netbiosnaam te geven. Zonder WINS server kunt u de NetBIOSnamen van uw sambaservers in Windows Lan Manager hostbestanden (\lmhosts.txt of winnt\system32\drivers\etc\lmhosts) kwijt. Zie: Host bestanden onder Windows.
Samba 2.2 is nog niet in staat om als Backup Domain Controller (BDC) te werken of als primaire domeincontroller gebruikerswachtwoorden in een backup domeincontroller te plaatsen. Maar hier zijn ook Linux (rsync) oplossingen voor. Microsofts NT's Security Accounts Manager (SAM) database kan niet worden geëmuleerd. Begrijpelijk, want Microsoft geeft absoluut geen medewerking aan het samba team. Omdat recente Windows cliënten en NT diensten zich ook niet aan het SMB protocol houden(!) moeten alle procedures via bestudering van hun uitwendig gedrag worden afgeleid. En aangezien reverse engineering verboden is maken de ontwikkelaars gebruik van het zwarte doos model.
Samba 3 zal Windows' 2000 Active Directory ondersteunen met de open protocollen Kerberos (authenticatie) en OpenLDAP .
Samba's hardware vereisten zijn laag. Een Windows 2000 Pentium VI beschouwt een 386 PC met samba als zijn NT server. Een zwaar uitgevoerd Linux/UNIX systeem kan met samba vele tienduizenden desktop gebruikers toegang geven tot een centrale bestand- en printer dienstverlening - iets dat onder andere netwerkbesturingssystemen nog wel eens tot eens crash kan voeren.
Ik gebruikte samba op een Pentium 75 op zolder. De P75 server serveert de bestanden die ik op onder ieder OS (OS/2, Linux, Windows 2000, Windows XP) wil lezen. Dankzij de goede beveiliging en multitasking van Linux is het geen probleem als mijn zoontje op de server speelt (zolang hij maar van de CAD toetsen afblijft).
Samba werkt met DEC Pathworks, MS-NET (later 3COM 3+Open), Microsoft OS/2 LAN Manager, MS DOS LAN Manager, IBM LAN Server, OS/2 Connect, OS/2 Warp 4, eComStation, Windows for Workgroups 3.11, Windows 9x, Windows NT, 2000 en XP. Er zijn ook samba servers voor OS/2 en andere besturingssystemen. Samba 2.2. shares kunnen tevens als NFS geëxporteerd worden (integratie van file-locking) en/of NFS gedeeltelijk vervangen.
Allereerst moet u Samba installeren. Het hoofdkwartier van Samba is de Samba organisatie (http://www.samba.org). Hier kunt u recente versies sponsen, maar doorgaans zal uw Linux distributie al met een handig Samba rpm-pakket komen. Samba draait als daemon (achtergrondproces). Met ps -ax kunt u de lijst van actieve (hulp)programma's opvragen. In het volgende zoekopdracht (met grep) zit de samba daemon (smbd) er niet bij. Met whereis wordt hij ook niet op de harde schijf gevonden.
[root@localhost sjoerd]# ps -ax | grep smbd 664 pts/2 S 0:00 grep smbd [root@localhost sjoerd]# [root@localhost sjoerd]# whereis smbd smbd:
In het volgende voorbeeld zit hij er wel bij (evenals de man documentatie):
sjoerd@visser:~ > ps -ax | grep smbd 221 ? S 0:00 /usr/sbin/smbd -D 780 pts/0 S 0:00 grep smbd sjoerd@visser:~ > whereis smbd smbd: /usr/sbin/smbd /usr/man/man8/smbd.8.gz
Onder Linux kunt u op vele manieren softwarepakketten installeren, maar onder Suse gebruikt u bij voorkeur Yast2. Zo behoudt u het overzicht. Met dit programma kunt de software ook deïnstalleren en patchen (Yast Online Update).
Voor samba installeert u de pakketten samba (het serverdeel) en samba-client (het deel waarmee u bronnen kunt benaderen). Ze werken onafhankelijk van elkaar. Na de installatie van het samba pakket werd de smbd daemon automatisch door Yast2 gestart.
Onder SuSE wordt de samba daemon (smbd) via een init script geactiveerd. Vroeger moest u dit in een centraal configuratiebestand /etc/rc.config instellen.
# start samba? ("yes" or "no") # Windows 95 / NT - File- and Printservices START_SMB="yes"
Daarna moest u de shares instellen en opnieuw activeren. Een reboot was niet nodig. Een "rcsmb restart" in een root console volstond.
De grafische Yast2 van Suse 8 gebruikt niet meer een centraal configuratiebestand, maar een reeks configuratiebestanden in de map /etc/sysconfig/. Deze bepalen welke scripts uit /etc/rc.d in welke runlevel worden gedraaid. Voor details zie: Init en de deamonen.
Omdat het instellen van runlevels vrij ingewikkeld is, adviseer ik u om de installatie van samba in eerste instantie aan YAST2 over te laten. YAST plaatst de symbolische links van de smbfs (client) en smb (deamon) scripts automatisch in runlevel 3 en herstart de netwerkdiensten.
Het originele /etc/smb.conf configuratiebestand van SuSE 6 was vrij simpel. Ik laat u er een deel van zien. Tegenwoordig gaat het om /etc/samba/smb.conf.
# Samba config file created using SWAT # from zolder.thuis (192.168.1.20) # Date: 2000/08/14 22:53:16 # Global parameters [global] workgroup = THUIS interfaces = 192.168.1.20/255.255.255.0 security = USER encrypt passwords = No [homes] comment = home read only = No create mask = 0750 browseable = No [doc] comment = Linux Documentatie path = /usr/doc locking = No [samba] comment = Bestanden path = /samba read only = No [cd] comment = Linux CD-ROM path = /cd locking = No [printers] comment = All Printers path = /tmp create mask = 0700 print ok = Yes browseable = No
Vanaf versie 2.0 kent Samba een officiële Samba Web Administation Tool (swat) die onder Apache (of een andere webserver) loopt. Zie : Samba Web Administation Tool. Hiermee kunt u samba vanaf iedere werkplek op het netwerk met een webbrowser configureren. Swats online hulp is uitstekend.
De globale sectie
[global] workgroup = THUIS
De "werkgroepnaam" is een verplicht nummer. Ik zou niet voor de Windows standaardnaam "werkgroep" kiezen, omdat die al zoveel in de netwerkomgeving van uw kabelboer opduikt. Hoe dan ook: de werkgroepnamen van Windows en Linux moeten overeenstemmen. Onder OS/2 heet een werkgroep een domein (en het is inderdaad wel handig de domeinnaam van het LAN als werkgroepnaam te gebruiken en ook hostnamen en netbiosnamen te laten overeenstemmen).
interfaces = 192.168.1.20/255.255.255.0
De samba server \\zolder.thuis bevindt zich op IP adres 192.168.1.20. Hij accepteert verbindingen in het 255.255.255.0 netwerkbereik. Dus van samba clients met IP adres 192.168.1.n (met n=1 t/m 254).
security = USER
U moet als UNIX gebruiker inloggen.
Een onveilig alternatief is security = SHARE waarbij gebruikers geen UNIX account op de samba server hoeven te hebben (print server)
encrypt passwords = No
Dit is de default, maar moderne Windows clients versleutelen hun wachtwoorden. Zie: Versleutelde wachtwoorden.
[homes] comment = home read only = No create mask = 0750
Deze ingang exporteert de /home/gebruiker map aan de Windows gebruiker. Ziet u hier veel met punt beginnende configuratiebestanden staan, dan zet u in de map opties Toon verborgen bestanden uit (Windows default). De instelling create mask = 0750 maakt door groepsleden leesbare bestanden aan waarvan alleen de eigenaar de inhoud mag veranderen. Zie: Octale getallen gebruiken met chmod en umask in Werken met bestanden.
browseable = No
De share verschijnt niet in de netwerkomgeving van clients in uw werkgroep. Net opdrachten (type "net ?" en "net view?") zullen echter wel werken.
Ik gebruik gebruik samba voor Linux, OS/2 LAN Manager, OS/2 Warp, eComStation, Windows 95, Windows 2000 en Windows XP cliënten.
Bij het benaderen van de samba server moeten gebruikers die de bestanden en printers op de samba server willen gebruiken zich authentificeren. Standaard gaat het om de gebruikersnaam op het Linux systeem en het wachtwoord.
Om het u gemakkelijk te maken kunt u op de server en de cliënt dezelfde user-ID's en wachtwoorden gebruiken. Als u op de client al onder uw UNIX naam en wachtwoord inlogt gaat het aanmelden op uw HOMES share (/home/userid) op de samba server vanzelf.
Toch ligt er een addertje onder het gras. Verschillende samba clients zullen verschillend met wachtwoordversleuteling omgaan. In het ergste geval gebruiken ze de Unix plain text wachtwoorden van de BSD utilities (telnet, ftp) die onversleuteld over het netwerk gaan. Als u dan dezelfde gebruikersnamen en wachtwoorden op uw servers gebruikt, zijn ook de servers met wachtwoordversleuteling snel gekraakt.
Het door samba gebruikte Server Message Block protocol werd voor IBM's PC network program ontworpen. Het liep eerst op PC DOS, later op OS/2 en Windows. In de loop der tijd werden de LAN Manager (LM) authentificatie methoden aangepast, maar de meeste samba servers zullen ook de verouderde LM protocollen spreken. Via een "roll-back" mechanisme konden ze ook op onversleutelde wachtwoorden terugvallen als een verouderde SMB client daarom vroeg.
Voor een overzicht van de SMB protocollen zie: Just what is SMB? van Richard Sharpe. In de praktijk zijn alleen nog de twee laatste Lan Manager authentificatie protocollen nog van belang.
1. De door Microsoft ontwikkelde SMB clients OS/2 Connect, OS/2 Warp 4, WfWG 3.11 en Windows 95 en Windows NT (< Service Pack 3) versleutelen hun wachtwoorden eenzijdig met het LanManager 2.1 protocol uit 1992 (smb-lm21.doc).
2. Opgewaardeerde MS DOS en Windows 95 en NT clients, Windows 98, ME, 2000 en XP gebruiken het in Windows NT Fixpack 3 (1997) geïntroduceerde NT LM 0.12 protocol. Dit laatste protocol kent een tweezijdige versleuteling waardoor het veel moeilijker te kraken is.
De eerste Samba servers konden nog geen wachtwoorden versleutelen. Het voor bestandsuitwisseling benodigde SMB protocol was weliswaar bekend, maar Microsofts LanManager 2.1 authentificatieprotcol was een gesloten gebied. Daarom vroegen de eerste samba serves "plain text passwords", wachtwoorden die onversleuteld over het netwerk werden verzonden. De Windows en OS/2 clients probeerden in eerste instantie - van geavanceerd naar primitief - een reeks Lan Manager authentificatieprotocollen uit. Maar als hun versleutelde wachtwoorden niet door de server werden herkend gingen ze over naar tekstwachtwoorden. Op een afgeschermd lokaal netwerk (werkgroep) was geavanceerde versleuteling natuurlijk ook niet nodig.
Maar met de introductie van de tweezijdige encryptie van het NT LM 0.12 protocol (1977), besloot Microsoft dat zijn samba clients (Windows werkstations) geen platte tekstwachtwoorden meer over het netwerk moesten verzenden. Daar zat wel enige logica in:
Het samba team moest dus aan de slag gaan om snel de Lan Manager protocollen te ondersteunen. Deels (LanManager 2.1) konden ze dit al, maar deels (NT LM 0.12) nog niet. Maar de clients die het NT LM 0.12 protocol gebruikten, accepteerden verbindingen met samba authentifictieservers (domein controllers) die ook platte tekstwachtwoorden accepteerden niet meer.
U kunt de samba server (192.168.0.2) zo instellen dat hij onversleutelde wachtwoorden van het lokale 192.168.0 ethernetwerk accepteert.
[global] workgroup = THUIS interfaces = 192.168.0.2/255.255.255.0 security = USER encrypt passwords = No
Nu versleutelen Windows NT (SP3), 95 (OSR2), 98, ME, 2000 en XP clients hun wachtwoorden wel. Met als gevolg dat ze in een onherkenbare vorm op de samba server aankomen (die ze in bovenstaande configuratie zal weigeren). Daarnaast weigeren Windows clients een verbinding te maken met een SMB server die zowel versleutelde als onversleutelde wachtwoorden accepteert. Met als gevolg dat ze niet met de samba server kunnen verbinden.
Onder eComStation (OS/2 Warp 4.5) zag ik dit probleem niet. eComStation kan met iedere samba server en client overweg, maar het verbinden met oude en nieuwe Microsoft clients in een netwerk geeft vaak problemen. Niet alleen met Linux, maar ook onder elkaar.
Het Samba team bedacht bedacht een truc waarmee zowel oude als nieuwe SMB clienten zich met de server kunnen verbinden. Het gaat om een wachtwoordsysteem dat bij moderne Windows clients de indruk wekt dat de server alleen versleutelde wachtwoorden accepteert.
security = USER encrypt passwords = Yes
Voor de wat oudere samba clients maakt Samba zelf de versleutelde wachtwoorden aan. De versleutelde samba wachtwoorden worden bewaard in: /etc/samba/smbpasswd. Een gewone gebruiker kan dit bestand niet inzien.
Hierdoor ontstaan er twee wachtwoordsystemen. Eentje voor de toegang tot Linux en eentje voor de toegang tot het samba systeem.
Met useradd gebruiker -p password -m maakt u op de server een nieuwe Unix gebruiker met home map aan.
zolder:/ # useradd gebruiker -p password -m
Hiermee krijgt u het recht om op de Linux machine te loggen.
Daarna voegt u met smbpasswd -a(dd) [gebruikersnaam] een samba wachtwoord toe.
zolder:/ # smbpasswd -a gebruiker New SMB password: Retype new SMB password: Added user gebruiker.
Het veranderen van een wachtwoord gaat met een eenvoudig : smbpasswd gebruikersnaam.
zolder:/home/sjoerd # smbpasswd sjoerd New SMB password: Retype new SMB password:
U moet hiervoor root zijn, in tegenstelling tot de relatief eenvoudige passwd opdracht van het UNIX wachtwoord waarbij iedere ingelogde gebruiker zijn eigen wachtwoord kan veranderen. Maar het aantal opties van smbpasswd (hier van samba 3) is ook veel groter.
sjoerd@zolder:~> smbpasswd sjoerd When run by root: smbpasswd [options] [username] otherwise: smbpasswd [options] options: -L local mode (must be first option) -h print this usage message -s use stdin for password prompt -c smb.conf file Use the given path to the smb.conf file -D LEVEL debug level -r MACHINE remote machine -U USER remote username extra options when run by root or in local mode: -a add user -d disable user -e enable user -i interdomain trust account -m machine trust account -n set no password -w PASSWORD ldap admin password -x delete user -R ORDER name resolve order
Het toevoegen of wijzigen van samba-gebruikers met de versleutelde wachtwoorden gaat ook prima met swats Client/Server Password Management. Deze webinterface is onder ieder OS te gebruiken. Ga hiervoor naar: PASSWORD / Server Password Management en voeg voor iedere Linux gebruiker (user) en het samba wachtwoord (password) toe.
Daarnaast kent swat ook een Client/Server Password Management. Deze is voor beheer op afstand bedoeld.
Als de Windows, UNIX en samba gebruikersnamen en wachtwoorden dezelfde zijn kunnen Windows gebruikers na inloggen hun UNIX homedirectory met net use Z: \\server\homes onder drive Z: benaderen.
C:\>net use Z: \\192.168.1.2\homes The command completed successfully.
Loggen de gebruikers niet lokaal in dan kan de smb daemon gebruikers op hun NT server authenticeren.
security = server
Zijn de gebruikersnamen verschillend dan kunt u van /etc/samba/smbusers gebruik maken:
# This file allows you to map usernames from the clients to the server. # Unix_name = SMB_name1 SMB_name2 ... # Cf. section 'username map' in the manual page of smb.conf for more information. ;root = administrator admin ;nobody = guest pcguest smbguest
Daarnaast kunt u onder Windows of OS/2 van de onvolprezen net opdrachten gebruik maken.
C:\>net ? The syntax of this command is: NET [ ACCOUNTS | COMPUTER | CONFIG | CONTINUE | FILE | GROUP | HELP | HELPMSG | LOCALGROUP | NAME | PAUSE | PRINT | SEND | SESSION | SHARE | START | STATISTICS | STOP | TIME | USE | USER | VIEW ]
In dit geval gaat het om net use (een SMB netwerk gebruiken).
C:\>net use ? The syntax of this command is: NET USE [devicename | *] [\\computername\sharename[\volume] [password | *]] [/USER:[domainname\]username] [/USER:[dotted domain name\]username] Example: mycompany.com/myname [/USER:[username@dotted domain name] Example: myname@mycompany.com [[/DELETE] | [/PERSISTENT:{YES | NO}]] NET USE {devicename | *} [password | *] /HOME NET USE [/PERSISTENT:{YES | NO}]
Om de home directory van zoon bouke (/home/bouke) als R: te mounten:
C:\>net use R: \\zolder\homes password /user:bouke System error 1326 has occurred. Logon failure: unknown user name or bad password.
En nu met het goede wachtwoord (of na smbpasswd -a bouke):
C:\>net use R: \\zolder\homes geheim /user:bouke The command completed successfully.
Dit lukt met Windows 98, ME, NT (SP3), 2000 en XP alleen met :
encrypt passwords = Yes
Of als de gebruikers niet lokaal inloggen, maar op een aan de smbd bekende NT authenticatieserver:
security = authenticatieserver
Wilt u van een samba account af, dan gebruikt u de volgende d(isable) commando's.
zolder:/ # smbpasswd -d gebruiker Disabled user gebruiker. zolder:/ # userdel gebruiker
Userdel gebruiker -r(emove) zal tevens de /home/gebruiker map verwijderen.
De omgekeerde volgorde werkt niet.
zolder:/ # userdel gebruiker zolder:/ # smbpasswd -d gebruiker build_sam_account: smbpasswd database is corrupt! username gebruiker not in unix passwd database! Failed to find entry for user gebruiker. Failed to modify password entry for user gebruiker
Maar met het gebruik van versleutelde wachtwoorden hebben OS/2 Warp 4 en Windows 95 weer een probleem. Gelukkig levert Samba een mooie oplossing voor een "gemengde" wachtwoordomgeving.
encrypt passwords = Yes update encrypted = Yes
De optie "update encrypted" staat ook benadering zonder wachtwoordversleuteling toe. Ik moest hiervoor wel in de swat's Client/Server Password Management (http://server:901/passwd) mijn wachtwoorden updaten. Met smbpasswd -a gebruikersnaam gaat dit natuurlijk ook. Daarna zien Windows 2000 en 95 de Linux server op zolder.
De "update encrypted" variabele laat een gemengde omgeving m.b.t. de versleuteling van wachtwoorden toe.
update encrypted (G) This boolean parameter allows a user logging on with a plaintext password to have their encrypted (hashed) password in the smbpasswd file to be updated automatically as they log on. This option allows a site to migrate from plaintext password authentication (users authenticate with plaintext password over the wire, and are checked against a UNIX account database) to encrypted password authentication (the SMB challenge/response authentication mechanism) without forcing all users to re-enter their passwords via smbpasswd at the time the change is made. This is a convenience option to allow the change over to encrypted passwords to be made over a longer period. Once all users have encrypted representations of their passwords in the smbpasswd file this parameter should be set to "off". In order for this parameter to work correctly the "encrypt passwords" parameter must be set to "no" when this parameter is set to "yes". Note that even when this parameter is set a user authenticating to smbd must still enter a valid password in order to connect correctly, and to update their hashed (smbpasswd) passwords. Default: update encrypted = no Example: update encrypted = yes
Mocht u om wat voor reden nog behoefte hebben om de wachtwoord encryptie in Windows 2000 uit te willen zetten: Start/run regedit. Zoek naar de string "EnablePlainTextPassword".
Ik kwam hem drie keer tegen (ook in ControlSet 1 en 2):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SeCEdit\RegValues\MACHINE/System/CurrentControlSet/Services/LanmanWorkstation/Parameters/EnablePlainTextPassword
Verander de instelling in een "1" (hij was leeg). Het werkte eerst niet (en een restart van W2000 duurt al zo lang). Daarna werkte het en dook de Linux samba server in de netwerkomgeving van de bèta Windows 2000 op.
Of mooier: Start / Settings / Control Panel / Administrative tools / Local Security Policy : "Send unencrypted password to third party SMB servers".
Voor Windows 98 geldt iets soortgelijks. De Windows 98 CD bevat de registry scrips /tools/mtsutil/ptxt_on.inf en ptxt_off.inf om de versleuteling van wachtwoorden resp. aan en uit te zetten. Zie anders de Samba FAQ.
Bij Windows XP Professional: Local security settings/Security Options/Domain member: Digitally encrypt or sign secure channel data (always) op uit zetten.
Configuratiescherm / Prestaties en Onderhoud / Systeembeheer. Lokaal beveiligingsbeleid / Lokaal beleid / Beveiligingsopties: Lid van Domein: Gegevens in beveiligd kanaal digitaal coderen of ondertekenen (altijd) om dit te openen. Kies hier voor Uitschakelen en bevestig dit met OK (Kbd 318266).
In de Windows XP Home editie kunt u de registry bewerken als u problemen hebt met het herkennen van een samba domein:
HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\SignOrSeal van 1 (aan) op 0 (uit).
Dit is een globale instelling (Windows XP Home kan immers niet inloggen als een formeel lid van een domein)
Ik gebruik meestal een Linux PC met samba als bestandsserver op het Windows en OS/2 netwerk. Maar het is ook mogelijk om de vrijgegeven mappen van OS/2 en Windows met Linux te delen. Linux is dan de client en OS/2 of Windows de server. Onder Windows moet TCP/IP gekoppeld zijn aan NETBEUI. Dat is standaard het geval. Onder OS/2 moet NetBIOS over TCP/IP geïnstalleerd zijn.
Hier wat voorbeelden van de prompt. Ik zit op ECS (OS/2) en werk op Linux via de OS/2 Secure Shell (geeft ook mooie kleurtjes op de prompt). Ik laat u met opzet ook de "foute" opdrachten zien. De foutmeldingen geven u vrij snel een indicatie van wat er aan de hand kan zijn. Natuurlijk moeten er ook shares zijn.
Maak een mountpoint aan:
root@zolder:/mnt > mkdir test
Zorg ervoor dat de gebruiker die /mnt/mkdir test gebruikt, de map ook mag lezen en beschrijven!
Geef de opdracht smbmount met de juiste parameters:
smbmount //server/share mountpoint -U gebruiker
Bij //server/share gaat het om standaard UNC namen (Universal Naming Convention). Het IP adres van //server moet op het systeem bekend zijn (hosts, DNS), anders moet u het IP adres gebruiken
Zonder -U gebruiker logt u op de server in onder uw gebruikersnaam op de SMB gast.
Gebruikt u de opdracht in een script gebruik dan aanhalingstekens zoals hieronder.
root@zolder:/mnt > smbmount '//visser/gdrive' '/mnt/test' -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 Password:
Daarna bekijken we het resultaat met ls- l.
root@zolder:/mnt > cd test root@zolder:/mnt/test > ls -l ... drwxr-xr-x 1 root root 512 Nov 28 16:40 download -rwxr-xr-x 1 root root 1007 Nov 26 11:48 fc2tree.dat drwxr-xr-x 1 root root 512 Oct 7 09:45 home drwxr-xr-x 1 root root 512 Sep 10 02:43 var root@zolder:/mnt/test >
Maar dat is niet wat we willen. De bestanden blijven in bezit van root. Zo kun je ze als gebruiker niet benaderen. De -U sjoerd betekent niets anders dan dat root als "sjoerd" op de OS/2 SMB server inlogt (wachtwoord vereist).
We moeten het anders doen. Eerst umounten:
root@zolder:/mnt/test > smbumount /mnt/test Could not umount /mnt/test: Device or resource busy
Dat klopt, het is nog mijn actieve dir (;-). Gebruikte mappen worden gelukkig ook niet door umount -a losgekoppeld. We gaan naar de onderliggende directory met cd .. (werkt trouwens ook op de OS/2 prompt en is handig in batches).
root@zolder:/mnt/test > cd .. root@zolder:/mnt > smbumount /mnt/test root@zolder:/mnt >
Dat is gelukt. Geen foutmelding. Nu eens als sjoerd proberen:
root@zolder:/mnt > exit exit sjoerd@zolder:~ > smbmount '//visser/gdrive' '/mnt/test' -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 smbmnt must be installed suid root mount failed
De foutmelding is duidelijk. Eerst de permissies veranderen (suid bit aanmaken) in het hulpprogramma smbmnt (niet smbmount!). Dat kan alleen als root.
sjoerd@zolder:~ > su Password: root@zolder:/home/sjoerd > chmod +s /usr/bin/smbmnt root@zolder:/home/sjoerd > exit exit
Gebruik "whereis smbmnt" om de lokatie van smbmnt op uw systeem te achterhalen.
Let er op dat een update het suid bit er weer uithaalt. KDE geeft dan:
Kon het bestandssysteem niet aankoppelen. De foutmelding luidde: smbmnt must be installed suid root for direct user mounts (500,500) smbmnt failed: 1
Het kan wel handig zijn ook smbumount het SUID bit te geven. Maar houdt de andere gebruikers van het systeem dan wel in de gaten!
root@zolder:/home/sjoerd > chmod +s /usr/bin/smbumount
Nu eens zien of we als gebruiker kunnen mounten.
sjoerd@zolder:~ > smbmount //visser/gdrive /mnt/test -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 cannot mount on /mnt/test: Operation not permitted mount failed
De oorzaak? Natuurlijk heeft het met permissies te maken ("not permitted"). Ik kan niet zomaar een mogelijk door een ander gebruikte map (multi-user systeem!!!) als gebruiker overschrijven. Ik ga dus naar mijn home directory en maak daar een map aan. Daarvoor ben ik zelf verantwoordelijk.
sjoerd@zolder:/mnt > cd De tilde werkt niet met ssh/os2. sjoerd@zolder:~ > cd /home/sjoerd sjoerd@zolder:~ > md data sjoerd@zolder:~ > smbmount //visser/gdrive /home/sjoerd/data -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 Password:
Hij doet het. Nu controleren.
sjoerd@zolder:~ > cd data sjoerd@zolder:~/data > ls drwxr-xr-x 1 sjoerd users 512 Oct 8 09:53 Office51 drwxr-xr-x 1 sjoerd users 512 Nov 11 21:06 Sslurp drwxr-xr-x 1 sjoerd users 512 Oct 7 09:43 Temp drwxr-xr-x 1 sjoerd users 512 Nov 28 16:40 download -rwxr-xr-x 1 sjoerd users 1007 Nov 26 11:48 fc2tree.dat drwxr-xr-x 1 sjoerd users 512 Oct 7 09:45 home drwxr-xr-x 1 sjoerd users 512 Sep 10 02:43 var sjoerd@zolder:~/data >
En nu met de juiste permissies! Grappig is dat Linux de /home/sjoerd/data map ook weer exporteert naar OS/2. Ik kan er in browsen, maar haal nu geen gekke dingen uit, want anders moet ik deze tekst misschien opnieuw schrijven.
Zorg ervoor dat de share als user te gebruiken is (server kant). Maar vergeet de wachtwoorden niet. Dit omdat de share ook vanaf het internet te benaderen is.
Zet de SETUID permissies voor smbmnt (en eventueel smbumount) : chmod +s /usr/bin/smbmnt .
Gebruik een firewall op de met het internet verbonden computers.
Mount de share in een map waarvan u de eigenaar bent (bijv. in uw home directory of in een submap van /temp).
Gebruik aanhalingstekens als u het mounten door een shell script laat doen: smbmount '//server/share' 'mountpoint' -U gebruiker
sjoerd@zolder:~ > smbmount //visser/gdrive /home/sjoerd/data -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 Password: session setup failed: ERRDOS - ERRnoaccess (Access denied.) smbmount: login failed Could not umount /home/sjoerd/data: Device or resource busy smbmount: exit
sjoerd@zolder:~ > smbmount //visser/gdrive /home/sjoerd/data -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 Password: sjoerd@zolder:~ > smbumount /home/sjoerd/data
sjoerd@zolder:~ > smbmount //visser/gdrive /home/ -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 cannot mount on /home: Operation not permitted mount failed sjoerd@zolder:~ >
Ook met SETUID bit op smbmnt kunt alleen maar mappen waarop u schrijfrechten hebt als mountpunt gebruiken.
Let op: de meeste applicaties geven iedereen met het SETUID bit vrij spel! Wees hier dus bijzonder zuinig mee.
root@zolder:/ > smbmount '//visser/gdrive' '/home/sjoerd/' -U sjoerd Added interface ip=192.168.0.2 bcast=192.168.0.255 nmask=255.255.255.0 Password: root@zolder:/ > exit exit root@zolder:/mnt >
Doe dit niet met /etc!
Uitloggen als superuser lukt niet meer. Ik kan nog wel een telnet sessie openen.
Welcome to SuSE Linux 6.3 (i386) - Kernel 2.2.13 (pts/2). zolder login: sjoerd Password: Last login: Sun Dec 3 00:28:54 from visser.thuis Have a lot of fun... sjoerd@zolder:~ > ls ACROBAT3 BACKMAST Folder Office51 Sslurp home var Actueel Data NETSCAPE PKG Temp lost+found sjoerd@zolder:~ > sjoerd@zolder:~ > cd .. sjoerd@zolder:/home > smbumount /home/sjoerd You are not allowed to umount /home/sjoerd
En de situatie als root ongedaan maken (nadat de map via cd .. nergens meer in gebruik is).
sjoerd@zolder:~ > su Password: root@zolder:/home/sjoerd > umount /home/sjoerd/ umount: /home/sjoerd: device is busy root@zolder:/home/sjoerd > cd .. root@zolder:/home > umount /home/sjoerd/ umount: /home/sjoerd: device is busy root@zolder:/home > umount /home/sjoerd/ umount: /home/sjoerd: device is busy root@zolder:/home > umount /home/sjoerd/ root@zolder:/home > cd sjoerd root@zolder:/home/sjoerd > ls
En die zag er vertrouwd uit.
Dat kan via de fstab. De optie auto is hier niet toegevoegd, omdat dit bij het opstarten problemen kan geven.
//ecs/data /mnt/data smbfs user,username=sjoerd,password=passw,rw,uid=sjoerd, 0 0 //ecs/in /mnt/in smbfs user,username=sjoerd,password=passsjoerd,rw,uid=sjoerd 0 0 //zolder/samba /mnt/samba smbfs user,username=sjoerd,password=passsjoerd,rw,uid=sjoerd 0 0 //zolder/homes /mnt/sjoerd smbfs user,username=sjoerd,password=passsjoerd,rw,uid=sjoerd 0 0 //zolder/homes /mnt/bouke smbfs user,username=bouke,password=passbouke,rw,uid=bouke 0 0
Dit is al weer een verouderde tabel. Tegenwoordig is smbfs door cifs vervangen!!!
//ecs/data /mnt/data cifs user,username=sjoerd,password=passw,rw,uid=sjoerd, 0 0
U kunt uw inloggegevens (username en password) in fstab bewaren. Zorg er dan wel voor dat alleen root \etc\fstab kan lezen! Schakel "lezen door anderen" dus uit. Lezen door groep mag omdat eigenaar root tot de groep root behoort.
Rechten [ ] zet gebruikers-ID(UID) bij uitvoer [ ] zet groeps-ID(GID) bij uitvoer [ ] plak bit [x] lezen door eigenaar [x] schrijven door eigenaar [ ] uitvoeren/zoeken door eigenaar [x] lezen door eigen groep [ ] schrijven door eigen groep [ ] uitvoeren/lezen door eigen groep [ ] lezen door anderen [ ] schrijven door anderen [ ] uitvoeren/zoeken door anderen
NB \etc\mtab liet de wachtwoorden niet zien.
Onderstaande informatie komt uit de samba handleiding (man smbmount).
smbmount opties: smbmount {service} {mount-point} [-o options]
smbmount mounts a Linux SMB filesystem. It is usually invoked as mount.smbfs by the mount(8) command when using the "-t smbfs" option. This command only works in Linux, and the kernel must support the smbfs filesystem.
Options to smbmount are specified as a comma-separated list of key=value pairs. It is possible to send options other than those listed here, assuming that smbfs supports them. If you get mount failures, check your kernel log for errors on unknown options.
smbmount is a daemon. After mounting it keeps running until the mounted smbfs is umounted. It will log things that happen when in daemon mode using the "machine name" smbmount, so typically this output will end up in log.smbmount. The smbmount process may also be called mount.smbfs.
NOTE: smbmount calls smbmnt(8) to do the actual mount. You must make sure that smbmnt is in the path so that it can be found.
-r |
mount the filesystem read-only |
-u |
specify the uid that the files will be owned by |
-g |
specify the gid that the files will be owned by |
-f |
specify the octal file mask applied |
-d |
specify the octal directory mask applied |
-o |
list of options that are passed as-is to smbfs, if this command is run on a 2.4 or higher Linux kernel. |
username=<arg> |
specifies the username to connect as. If this is not given, then the environment variable USER is used. This option can also take the form "user%password" or "user/workgroup" or "user/workgroup%password" to allow the password and workgroup to be specified as part of the username. |
password=<arg> |
specifies the SMB password. If this option is not given then the environment variable PASSWD is used. If it can find no password smbmount will prompt for a passeword, unless the guest option is given. Note that password which contain the arguement delimiter character (i.e. a comma ',') will failed to be parsed correctly on the command line. However, the same password defined in the PASSWD environment variable or a credentials file (see below) will be read correctly. |
credentials=<filename> |
specifies a file that contains a username and/or password. The format of the file is: username = <value>, password = <value> This is preferred over having passwords in plaintext in a shared file, such as /etc/fstab. Be sure to protect any credentials file properly. |
netbiosname=<arg> |
sets the source NetBIOS name. It defaults to the local hostname. |
uid=<arg> |
sets the uid that will own all files on the mounted filesystem. It may be specified as either a username or a numeric uid. |
gid=<arg> |
sets the gid that will own all files on the mounted filesystem. It may be specified as either a groupname or a numeric gid. |
port=<arg> |
sets the remote SMB port number. The default is 139. |
fmask=<arg> |
sets the file mask. This determines the permissions that remote files have in the local filesystem. The default is based on the current umask. |
dmask=<arg> |
sets the directory mask. This determines the permissions that remote directories have in the local filesystem. The default is based on the current umask. |
debug=<arg> |
sets the debug level. This is useful for tracking down SMB connection problems. A suggested value to start with is 4. If set too high there will be a lot of output, possibly hiding the useful output. |
ip=<arg> |
sets the destination host or IP address. |
workgroup=<arg> |
sets the workgroup on the destination |
sockopt=<arg> |
sets the TCP socket options. See the smb.conf socket options option. |
scope=<arg> |
sets the NetBIOS scope |
guest |
don't prompt for a password |
ro |
mount read-only |
rw |
mount read-write |
iocharset=<arg> |
sets the charset used by the Linux side for codepage to charset translations (NLS). Argument should be the name of a charset, like iso8859-1. (Note: only kernel 2.4.0 or later) |
codepage=<arg> |
sets the codepage the server uses. See the iocharset option. Example value cp850. (Note: only kernel 2.4.0 or later) |
ttl=<arg> |
how long a directory listing is cached in milliseconds (also affects visibility of file size and date changes). A higher value means that changes on the server take longer to be noticed but it can give better performance on large directories, especially over long distances. Default is 1000ms but something like 10000ms (10 seconds) is probably more reasonable in many cases. (Note: only kernel 2.4.2 or later) |
U kunt ook van omgevingsvariabelen gebruik maken.
USER |
The variable USER may contain the username of the person using the client. This information is used only if the protocol level is high enough to support session-level passwords. The variable can be used to set both username and password by using the format username%password |
PASSWD |
The variable PASSWD may contain the password of the person using the client. This information is used only if the protocol level is high enough to support session-level passwords. |
PASSWD_FILE |
The variable PASSWD_FILE may contain the pathname of a file to read the password from. A single line of input is read and used as the password. |
Maak een backup van /etc/samba/smb.conf.
Bestudeer de speed.txt in de documentatie.
Op een LAN: socket options = IPTOS_LOWDELAY TCP_NODELAY
Voor help zie Swat Global Variables in de Advanced View.
Bij een samba server kunt u de datum en tijd opvragen. Die functie moet in /etc/inetd.conf open staan.
# daytime stream tcp nowait root internal # daytime dgram udp wait root internal time stream tcp nowait root internal time dgram udp wait root internal
Een linux computer kan op het internet de tijd opvragen. In dit geval worden drie tijdservers ondervraagt en als hun opgaven minder dan 10 seconden verschillen, wordt de systeemtijd van de Linux computer aangepast.
root@zolder:/home/sjoerd > netdate -l 10 tcp 129.6.15.28 131.107.1.10 132.163.4.101
Connection with udp to 129.6.15.28 failed. 131.107.1.10 +0.321 Sun Oct 28 13:56:05.000 132.163.4.101 +1.299 Sun Oct 28 13:56:08.000
129.6.15.28 wil een TCP verbinding.
root@zolder:/home/sjoerd > netdate -l 10 tcp 129.6.15.28 131.107.1.10 132.163.4.101 129.6.15.28 -0.748 Sun Oct 28 14:13:53.000 131.107.1.10 -0.726 Sun Oct 28 14:14:04.000 132.163.4.101 +1.661 Sun Oct 28 14:14:10.000
Hier vraagt de OS/2 computer visser bij Linux de tijd op zolder op.
[H:\]net time \\zolder The current time at \\zolder is 28-10-01 13:57:40. The command completed successfully.
De tijd op de OS/2 computer kan met de zolder worden gesynchroniseerd (hier wel nodig).
[H:\]net time \\zolder /set The current time at \\zolder is 28-10-01 13:59:05. The current local clock is 30-03-01 15:12:31. Do you want to set the time on the local workstation to match the time at \\zolder? (Y/N) [Y]: Y The command completed successfully.
U kunt het bovenstaande ook in een batch zetten:
[H:\]net time \\zolder /set /yes The current time at \\zolder is 28-10-01 14:00:51. The command completed successfully.
Bij het benaderen van samba 2.2.10 vanuit Windows 2000 geeft Windows:
C:\Documents and Settings\Administrator.DESKPRO>net view \\zolder System error 53 has occurred. The network path was not found.
Het IP adres van zolder is in het hostbestand opgeven. Zolder is ook te pingen. Dat was het niet.
C:\Documents and Settings\Administrator.DESKPRO>net view \\192.168.1.2 System error 53 has occurred. The network path was not found.
De shares zijn met Browsable = Yes ook niet in de netwerkomgeving te zien. "The network path was not found" duidt vrijwel altijd op een probleem bij de client. In dit geval had een Windows firewall poort 445 geblokkeerd. Na het openstellen van poort 445 komt er een nieuwe foutmelding:
C:\Documents and Settings\Administrator.DESKPRO>net view \\zolder System error 5 has occurred. Access is denied.
Deze komt niet van de firewall, maar van de Samba server. De gebruiker Administrator is niet op mijn samba server bekend. Vandaar dat de toegang geweigerd wordt. Log ik via de netwerkomgeving in als Unix gebruiker sjoerd, dan komen de voor browsen vrijgegeven shares in beeld.
SAMBA Web Pages: verwijzing naar de vele samba.org mirrors.
World of Windows Networking: Veel informatie over het Windows netwerk.
How to Write an LMHOSTS File : het zit verstopt in winnt\system32\drivers\etc\lmhosts.
Webmin : een Grafische User Interface die naast swat te gebruiken is.
Connecting to a samba server (dangra) - CNS: vanuit diverse Windows clients gezien.
Linux Headquarters: Samba Configuration - Linux/Windows Connectivity
Using Samba : By Robert Eckstein, David Collier-Brown, Peter Kelly (November 1999).
Slashdot | Jeremy Allison Answers Samba Questions
Linux Magazine | July 2001 | FEATURES | Samba Lessons : Andrew Tridgell's Ten-Year-Old Side Project Is One of Linux's Most Important Apps by Robert McMillan
linux.oreillynet.com: Samba Pushes the Boundaries Again [Dec. 05, 2002]
The use of TCP port 445 in Windows 2000
Implementing CIFS - The Common Internet FileSystem : een standaard werk.
SAMBA for OS/2 and eCS Homepage
VOICE Newsletter 04/2005 - Samba server for OS/2
Implementing CIFS (Christopher R Hertel) : een zeer goed overzicht van IBM's SMB/CIFS protocol (AKA "Microsoft Windows Networking")
Deze tekst mag niet worden gewijzigd, vermenigvuldigd of voor commerciële doeleinden gebruikt worden zonder toestemming van de auteur. © Sjoerd Visser (2000).