Paul Smedley's Samba/2 port voor OS/2 en eComStation



Voor Warp 4/ eCS bezitters met Netdrive is Paul Smedley's Samba port misschien interessant. Samba/2 vereist een moderne OS/2 kernel en het is belangrijk dat u alleen TCP/IP (geen NetBIOS of NETBIOS via TCP/IP) installeert.

De huidige Samba/2 port kan alleen bestanden serveren. Om zonder de hulp van OS/2 NetBIOS of NETBIOS via TCP/IP andere bronnen vanaf een Samba/2 server te benaderen hebt u Netdrive (shareware) en de Netdrive plugin voor Netdrive (vrij software) nodig. Daarom is het nut ervan voor een standaard OS/2 gebruiker beperkt.

Samba

> Top <

De Samba suite (http://www.samba.org) is een van de belangrijkste open source pakketten. Het gaat om een reeks TCP/IP applicaties waarmee Linux servers bestanden en printers delen met Windows, OS/2 en andere samba servers. Daarnaast kan Samba de gebruikersauthentificatie en de namenomzetting op een Windows netwerk verzorgen. Hiertoe bootst Samba een Windows NT domein controller na.

De communicatie vindt plaats via het Server Message Block protocol van IBM, dat later zijn intrede deed in een breed scala van Microsoft producten: Microsoft Networks/OpenNET, Microsoft Lan Manager, Microsoft Windows netwerk en het Common Internet File System (CIFS).

Om de ontwikkeling van de Microsoft netwerken bij te benen kreeg Samba ook steeds meer functies die de Active Directory van Windows 2000 servers ondersteunen. Deze laatste verbindingen verlopen via het in Windows 2000 geïntroduceerde "directe" SMB over TCP protocol op TCP poort 445, dat de traditionele binding van SMB met het NetBIOS verbrak. Dit betekende ook een breuk met de klassieke Windows en OS/2 netwerkprotocollen die nog wel met het NetBIOS werkten.

NetBIOS, NetBEUI en NetBIOS via TCP/IP

> Top <

Het NetBIOS protocol maakt gebruik van de in ethernetwerkkaarten, hubs en bruggen ingebouwde intelligentie, waarbij de ene ethernetkaart de andere kan aanroepen en herkennen. Omdat ethernetframes via hubs naar het hele lokale netwerk (de werkgroep) worden verzonden, geeft dit op grotere netwerken meer overhead ("shouting"). De ethernetkaarten zijn echter wel zo slim (en kies) om alleen de aan hun gerichte frames aan de netwerksoftware van het besturingssysteem door te geven. De rest gooien ze standaard weg. Via bruggen en de NetBIOS Extended User interface (NetBEUI) uitbreiding konden grotere netwerken ingericht worden.

Omdat de afstand die een ethernetframe over een ethernet-kabel kan afleggen maar beperkt is tot 100-500 meter, hebben lange verbindingen veel ethernetbruggen nodig om het signaal te versterken. Maar als de frames via TCP/IP verzonden worden (inkapseling), nemen de transportmogelijkheden enorm toe. TCP en UDP pakketten kunnen immers via modems, routers, telefoonlijnen, kabels en straalverbindingen de hele wereld rond. Lokale NetBIOS via TCP/IP netwerken kunnen via telefoonlijnen aan elkaar gesmeed worden tot uitgestrekte bedrijfsnetwerken.

Met het NetBIOS via TCP/IP op TCP poort 139 kan een OS/2 werkstation gekoppeld worden aan een Microsofts NT domein of een samba server. Daarnaast gebruikt NetBIOS via TCP/IP de UDP poorten 137 (NetBIOS Name Service) en 138 (de NetBIOS Datagram Service) voor broadcast functies. Maar de verbinding met een Windows 2000, XP of Vista server kan alleen tot stand komen als de Windows server NetBEUI of NetBIOS via TCP/IP geactiveerd heeft. En dat is standaard niet het geval. Om die reden werden er pogingen ondernomen om Samba naar OS/2 te porteren, zodat OS/2 Windows ook via SMB over TCP bereiken kan.

Samba/2 van Nick Kolosov

> Top <

Op Netlabs (http://www.netlabs.org) staat een van Samba/2 versie 3.0.9 server voor OS/2 van Nick Kolosov. De OS/2 samba client plugin voor Netdrive is op deze port gebaseerd.

Nick's Samba/2 server gebruikt zijn eigen Security/2 voor gebruikersauthentificatie en bestandstoegang. Security/2 (http://os2.kiev.ua/en/sses.php) maakt OS/2 geschikt voor gelijktijdig gebruik door meerdere gebruikers. Gebruikers (lees: applicaties) krijgen desgewenst een beperkte toegang tot het bestandssysteem. Wie de applicatie misbruikt beschikt dan niet meteen over een rootshell en/of het hele bestandssysteem.

Het grote voordeel van Security/2 is dat het van OS/2 een multi-user systeem maakt. Dat is niet alleen veel veiliger, maar het vereenvoudigt ook het porten van applicaties die een multi-user besturingssysteem verwachten enorm. Maar Security/2 heeft ook nadelen: het is closed source, nauwelijks gedocumenteerd, moeilijk op te zetten en kent alleen een PM of CLI login shell. U zult dus moeten afzien van de WPS. Daarom wordt Security/2 wel op "dedicated" internet servers (ssh en apache) gebruikt, maar zelden op een OS/2 werkstation.

Paul Smedley's Samba port


> Top <

Paul Smedley porteerde onlangs Samba versie v 3.0.24 naar OS/2. De OS/2 port van Paul Smedley kan wel onder de WPS lopen. Maar voordat deze samba server op een OS/2 productiesysteem ingezet wordt, is er nog veel werk te doen. Op dit moment kunnen we er grote bestanden mee uitwisselen, maar nog niet veel meer.

Het grootste probleem voor de samba porters is dat veel van de door de samba server benodigde Linux API's en utilities onder OS/2 ontbreken. Zo speelt het ontbreken van een UNIX wachtwoordsyssteem. Nick Kolosov loste dit met Security/2 op. Pauls Smedley maakte gebruik van de user/group functies van Innoteks C bibliotheek om een pseudo UNIX wachtwoord systeem aan te roepen. Maar ook de standaard interfaces voor de toegang tot de printers (CUPS) en het mounten van vreemde bestandssystemen (CIFS) ontbreken of zijn particuliere ad hoc oplossingen (Netdrive, Security/2) die geen aansluiting vinden bij wat onder Linux gangbaar is.

De stand van zaken van Samba/2

> Top <

Ik baseer mijn oordeel op de ports van Paul Smedley die ik een maand heb getest. Daarnaast heb ik internetgroepen op beide versies van Samba/2 server doorzocht.



Waarom zou u deze server dan willen installeren?

> Top <

Voor mij was het een experiment. Ik werd een alfa tester na een tip van Jacques van Leeuwen. En ik raakte onder de indruk van Paul Smedleys inspirerende gedrevenheid. Via Mensys kunt u zijn werk ondersteunen. Zijn projecten zijn beslist de moeite waard.

Maar op een OS/2 werkstation zou ik Samba/2 nog niet gebruiken. Want de huidige Samba/2 servers vervangen de OS/2 NetBIOS API zonder dat ze u voldoende compensatie bieden voor het gewone werk (betrouwbaar printen en bestanden uitwisselen). Voor het transporteren van grote bestanden kunt ook gebruik maken van FTP of de Samba client plugin van Netdrive. Het veelzijdige Netdrive voor OS/2 is voor een paar tientjes bij Mensys te koop. En in tegenstelling tot de geporteerde Samba/2 servers werkt Netdrive voor OS/2 goed samen met alle OS/2 netwerk utilities die u heeft.

Maar toch is de port van Samba/2 een goede zaak. Want Samba is een typische UNIX applicatie. Bij mijn weten is er nog geen Windows port van. Ondanks de vele Windows testers en ontwikkelaars. En dat verbaast mij, gezien de restricties die Microsoft aan Windows servers stelt (betalen per gebruiker!). De gein is dat er nu wel een premature OS/2 port van is. Kosten per gebruiker: $ 0,-.

Maar wat belangrijker is: mocht dit project slagen - en hiermee bedoel ik dat er een open source oplossing komt voor de hierboven gesignaleerde problemen - dan opent dit ook de weg voor het porten van veel andere multi-user applicaties naar OS/2.

Op hulp van Microsoft of IBM hoeven OS/2 gebruikers niet te rekenen. Want die verdienen hier natuurlijk niets aan. Maar met Nick's OS/2 port kunnen we wel een goedkoop OS/2/eCS werkstation op een afgedankte Windows PC als een sjieke (lees: dure) Windows domein controller inzetten. En met Paul Smedley' Samba/2 port lukt dit binnenkort ook.

Het enige dat porters als Paul nodig hebben is voldoende sponsers (tijd) en de intelligente feedback van redelijk bekwame bèta testers. De voor Samba benodigde "intelligentie" is al in de Samba debug modus inbegrepen. Gelukkig maar, want geen enkele SMB gebruiker kan het eens door IBM ontketende SMB wiel nog in zijn eentje uitvinden. Kortom: voelt u zich geroepen, experimenteer er dan maar mee. En huiver niet om uw bevindingen mede te delen.

Installatie

> Top <

U hebt de volgende bestanden nodig:

ftp://ftp.netlabs.org/pub/gcc/alpha/baselayout.zip 
ftp://ftp.netlabs.org/incoming/samba-3.0.25pre2-os2-20070323.zip

Voor de recentste versies en ontwikkelingen zie http://smedley.info/os2ports/samba.html. Het door mij gebruikte Samba pakket bevatte libc062x.dll. Ze staan op: ftp://ftp.netlabs.org/pub/samba/


De OS/2 installatie moet TCP/IP bevatten, zonder de stuurbestanden voor NetBIOS via TCP/IP in de CONFIG.SYS. Probeer deze prille port daarom liever niet uit op uw hoofd PC.


Om te beginnen moet OS/2 een minimaal UNIX bestandssysteem emuleren. Pak hiervoor het bestand ftp://ftp.netlabs.org/pub/gcc/alpha/baselayout.zip uit. Plaats in de CONFIG.SYS een opdracht die naar deze UNIX root directory (de map waarin /etc staat) verwijst: "SET UNIXROOT=C:\ baselayout" of beter: "SET UNIXROOT=U:\".

Met LVM een partitie U als dedicated UNIXROOT is zeker de moeite waard, als u van plan bent met Paul Smedleys fameuze GCC Build environment aan de slag te gaan. Zie: http://smedley.info/os2ports/buildenv.html.

Pak de map \samba van het actuele port samba*.zip uit op een map naar goeddunken. De map samba mag overal staan zolang er maar een punt-verwijzing naar de huidige directory (.) in het LIBPATH van de config.sys staat. De map samba\etc\samba en zijn subdirectories kopieert u naar uw %ETC% map (in de regel \MPTN\ETC). De bestanden \MPTN\ETC\samba\smb.conf en \MPTN\ETC\samba\lm.host moet u nog configureren (zie later).


Reboot.


Opmerking: Het is enigzins verwarrend dat u nu twee mappen \etc in gebruik hebt. Maar de map %UNIXROOT%\etc bevat alleen de UNIX wachtwoordbestanden. Alle andere configuratiebestanden behoren in de map SET ETC= van de CONFIG.SYS te staan !

Een UNIX wachtwoordbestand aanmaken

> Top <

Samba is een typische cliënt server applicatie die de mappen van vele UNIX gebruikers op het netwerk serveert. Anders dan onder OS/2 heeft iedere gewone UNIX/Linux gebruiker met bestandspermissies te maken. Als ik als root een bestand naar /home/sjoerd kopieer, kan ik het als gebruiker sjoerd vaak nog wel zien, maar meestal niet bewerken. Omdat ik niet de eigenaar van het bestand ben.


Om de veiligheid van de bestandenserver niet in gevaar te brengen zal Samba de gebruikersrechten op het bestandssysteem van de server moeten respecteren. De smbd server zelf draait onder het root account en zou dus alles aan iedereen kunnen serveren. Maar omdat Samba voortdurend in contact staat met het UNIX wachtwoordsysteem zal het een foutmelding afgeven als een gebruiker een bestand van een ander verandert of wist.


Omdat Samba bij iedere bestandsbenadering de gebruikersrechten navraagt, moet de OS/2 API een minimaal UNIX gebruikers- en wachtwoordsysteem emuleren. Als de server geen root account aantreft, zal hij niet eens opstarten. Maar hoe doe je dat op OS/2?


De hack vindt plaats met behulp van de gebruiker- en groepfuncties van Innoteks libc. Ze werken samen met enige bestanden uit baselayout.zip. U moet deze nep UNIX omgeving nog configureren. Om te beginnen moet u een UNIX wachtwoordbestand aanmaken.


Maak in de map %UNIXROOT%\etc een nieuw master.passwd aan. Het oude kunt u naar master.passwd.oud hernoemen. Het formaat van FreeBSD master.passwd is als volgt:


# $FreeBSD master.passwd. Zie: man passwd(5)
# loginnaam:passwd:uid:gid:class:change:expire:info:home_dir:shell
# loginnaam:*:uid:gid:::info:home_dir:shell
root:*:0:0::::root:/home/root:/bin/geen
sjoerd:*:1000:100::::Sjoerd Visser:/home/sjoerd:/bin/bash
bouke:*:1001:100::::Bouke Visser:/home/bouke:/bin/bash
guest::1500:100::::gast:/tmp:/bin/geen
# En laat de hierop volgende laatste regel leeg!


Maak in ieder geval een gebruiker root aan. De server start op onder het rootaccount en smbd.exe geeft een foutmelding als dat ontbreekt. Daarnaast maakt u ingangen zonder wachtwoord aan voor gewone gebruikers (hier sjoerd, bouke en quest), dus voor degenen die de server zullen benaderen. Want net als onder Linux hebt u deze gebruikersaccounts nodig om met smbpasswd wachtwoorden voor Samba gebruikers aan te maken en om hen toegang tot de bestanden te geven.

Uw user-id (uid) onder Linux is op te vragen met de opdracht id:

zolder:/home/sjoerd # id root
uid=0(root) gid=0(root) groepen=0(root)

Root heeft traditioneel een uid en gid van 0. De waarden voor de rest mag u zelf verzinnen.

Tussen de separators(:) staat dan een lege string. Een home directory zou ik nog wel aanmaken (klassiek onder \home\username op het vaste schijf).


Onder BSD bevat de tweede ingang van het wachtwoordbestand geen versleuteld wachtwoord meer, maar een * of ander betekenisloos teken.

sjoerd:*:1000:100::::Sjoerd Visser:/home/sjoerd:/bin/bash

Het bestand /etc/passwd moet namelijk leesbaar zijn voor iedereen. Bijvoorbeeld om een antwoord te geven op de vraag aan wie de map van user-id 1000 toebehoort. Maar ook een versleuteld wachtwoord dat in \etc\passwd staat, is te lezen en dus te kraken. Om die reden worden de echte versleutelde wachtwoorden in een alleen door root te lezen schaduw-wachtwoordbestand apart gezet.


BSD 4.4 introduceerde hiervoor een met de kenmerken class, change en expire uitgebreid master.passwd bestand, dat alleen door root te lezen is. Het was met de vi password interface vipw te bewerken, en maakte via pwd_mkdb het gewone /etc/passwd tekstbestand aan, evenals twee snel toegankelijke binaire schaduwwachtwoordbestanden. Het gaat om de bestanden pwd.db en spw.db die evenals het master.passwd bestand in %UNIXROOT%\etc komen te staan. Ze zijn onder OS/2 door iedereen te lezen.

U maakt dit door libc te gebruiken binaire schaduwwachtwoordbestand onder OS/2 aan met de opdracht:

U(NIXROOT):\USR\SBIN\PWD_MKDB.EXE U:\ETC\master.passwd


U ziet vaak foutmeldingen. Ze kunnen wijzen op syntaxisfouten in master.passwd (handmatig herstellen, neem als uitgangspunt het voorbeeld hierboven), ontbrekende login shells (de "warning, unknown root shell" kunt u negeren) of op een nog aanwezig tussenbestand. De laatste: "PWD_MKDB.EXE: /@unixroot/etc/pwd.db.tmp: File exists" lost u op door pwd.db.tmp eerst te wissen. Ook als u later gebruikers aan master.passwd toevoegt, moet pwd.db, spw.db en hun tijdelijke tmp-bestanden eerst wissen.

Besef dat in deze (Smedley's) OS/2 implementatie zelfs root nog geen UNIX wachtwoord bezit. Een goed werkend mechanisme om UNIX wachtwoorden te maken onder OS/2 hebben we nog niet (behalve dan Nick's Security/2, dat het op zijn eigen manier doet). Gelukkig hoeft uw root geen geldige UNIX shell op te geven. En de gewone Samba/2 gebruikers ook niet, tenzij u ze een login script geeft. Maar dat kan alleen onder Security/2.

Samba wachtwoorden aanmaken

> Top <

Samba heeft bovendien een eigen wachtwoordsyssteem. Samba moet immers samenwerken met Windows clients die hun Windows wachtwoord versleuteld over het netwerk naar een Linux server versturen. Voor de uitwendige communicatie met Windows en OS/2 worden door Samba verschillende versleutelingsprotocollen gebruikt, maar intern (bijv. voor bestandstoegang op de server) gebruikt Samba natuurlijk het Linux/Unix wachtwoordsyssteem.

Daarom zal uw versleutelde Samba wachtwoord (uw wachtwoord onder Samba, Windows of OS/2) nooit hetzelfde zijn als uw Linux wachtwoord. De wachtwoorden zijn meestal gelijk, maar de versleuteling verschilt. Daarom is het ook mogelijk om gebruiker sjoerd die onder de gebrekkige UNIX wachtwoordemulatie van OS/2 geen wachtwoord (lege string) kreeg, toch een Samba wachtwoord mee te geven! Als u voor uw gebruiker maar een UNIX account hebt aangemaakt, want anders krijgt u een foutmelding:

zolder:/home/sjoerd # smbpasswd bestaat_niet
New SMB password:
Retype new SMB password:
Failed to find entry for user bestaat_niet.
Failed to modify password entry for user bestaat_niet

Onder Windows en OS/2 is de situatie niet anders. Zonder een geldig gebruikersaccount op de server krijgt u geen toegang tot de bestanden. Alleen onder het "Eenvoudig delen" van Windows en OS/2 kunnen "gasten" uw met Iedereen gedeelde mappen inzien.

U maakt een samba wachtwoord voor een nieuwe Samba server gebruiker aan met smbpasswd.exe -a(dd) gebruikersnaam.

[U:\USR\LOCAL\samba]smbpasswd -a guest
New SMB password:
Retype new SMB password:
Added user guest.

U kunt ook gebruik maken van het /etc/samba/smbpasswd van uw Linux distributie. Een smbpasswd is een tekstbestand dat u geheel of gedeeltelijk (een regel per gebruiker) overnemen kunt. En daarna kunt u zich zelfs met een NT Lan Manager 01 wachtwoord bij Samba/2 aanmelden:

waiting for a connection
Allowed connection from (192.168.1.5)
netbios connect: name1=OS2SERVER name2=MULTIBOOT
netbios connect: local=os2server remote=multiboot, name type = 0
check_ntlm_password: authentication for user [sjoerd] -> [sjoerd] -> [sjoerd] succeeded
Allowed connection from (192.168.1.5)
multiboot (192.168.1.5) connect to service werk initially as user sjoerd (uid=100, gid=0) (pid 46)

Wilt u dergelijke processen tot in de puntjes bestuderen (uid en gid kloppen hier niet!), start de samba server dan in de interactieve modus op met een verhoogde debug waarde (1-9) via een script:

U:
CD \
CD USR\LOCAL\samba
call mode co100,43
SMBD.EXE -i -d2 

Het voordeel van de interactieve modus is dat u fouten snel kunt opsporen. Daarnaast bleek ze soms beter (of misschien wel fouttoleranter) te werken dan de standaard modus zonder -i.

De samba bronnen beschikbaar stellen

> Top <

De samba configuratiebestanden bevinden zich in \MPTN\ETC\samba. Het gaat om smb.conf en lm.host. Ik toon hier mijn smb.conf.

[global]
workgroup = THUIS
netbios name = os2server
interfaces = 192.168.1.6/255.255.255.0
bind interfaces only = Yes
hosts allow = 192.168.1.0/255.255.255.0
hosts deny = 0.0.0.0/0
os level = 20
lm announce = Yes
name resolve order = hosts bcast
preferred master = no
local master = No
domain master = no
printing = bsd
printcap name = f:/mptn/etc/printcap
print command = lpr
printer name = HPColorL
load printers = no
guest account = guest
security = USER 
encrypt passwords = Yes
unix password sync = no
# log level = 5 voor debugging
log level = 2
dos charset = CP850
unix charset = CP850
display charset = LOCALE
ea support = Yes
log file = log.%m

[homes]
comment = Home Directories
browseable = yes
read only = no
create mode = 0750

[werk]
comment = werk
read only = no
path = u:/werk

De sectie [global] geeft de globale serverinstellingen weer. [homes] en [werk] zijn shares zoals net view laat zien:

[F:\]net view \\os2server
Gemeenschappelijke resources bij \\os2server
samba 3.0.24

naam resource Type Gebruikt als Commentaar
--------------------------------------
homes Schijf Home Directories
sjoerd Schijf Home Directories
werk Schijf werk
De opdracht is uitgevoerd.

Hierbij hebben de bronnen homes en sjoerd dezelfde inhoud. Homes is namelijk een alias voor de home_dir van de ingelogde gebruiker (hier u:/home/sjoerd).

Het lmhost bestand

> Top <

Het lm.host bestand wordt in principe vooral gebruikt door de samba namenserver nmbd.exe. Deze probeert een zogenaamde WINS server te emuleren, waar een OS/2 NetBIOS naamserver niets aan heeft. Een voorbeeld van een lm.host bestand:

127.0.0.1 localhost
192.168.1.2 zolder
192.168.1.5 multiboot
192.168.1.10 laptop

Nuttiger voor OS/2 is de lm announce = Yes aanwijzing in smb.conf. Hiermee meldt de samba server zich tevens als OS/2 LanManager server aan. De nmbd deamon speelt hierbij een rol, want "net view \\os2server" bleek alleen te werken als zowel de namenserver (nmbd.exe) als de sambaserver (smbd.exe) actief was.

Conclusie

> Top <

Aan deze port moet nog veel verbeterd worden, maar voor wie van het oplossen van netwerkproblemen houdt is het de Samba voor OS/2 wel het neusje van de zalm.

Referenties


> Top <



Unix Ports for OS/2 & eCS

Samba server for OS/2

NetDrive voor OS/2

ftp://ftp.netlabs.org/pub/samba/



Er is meer informatie over samba en OS/2 in de Linux netwerk sectie: Een TCP/IP netwerk aan huis .