Samba je balíček aplikací, které dokáží komunikovat pomocí SMB (server message block) protokolu. Protokol SMB používají pro komunikaci mezi pracovními stanicemi a serverem Windows a OS/2. Protože UNIXové systémy používají ke stejnému účelu NFS, existuje pro ně implemetace SMB, která se jmenuje Samba a umožňuje oboustraně plnohodnotnou komunikaci se sítěmi SMB. Samba umožňuje (hlavně) následující věci:
Distribuce Samby obsahuje následující programy:
NetBIOS (Network Basic Input/Output System) pochází od firmy IBM, která ho vymyslela v roce 1985 jako API (application programming interface) pro práci ve vlastních sítích, které poskytovalo základní funkce na propojení aplikací a sdílení dat s ostatními stanicemi. Ještě téhož roku IBM vydalo následovníka NetBEUI (NetBIOS Extended User Interface), který umožňoval 15 písmené názvy a až (255) uzlů na síti.
Protože TCP/IP používá k označování strojů číselné adresy a NetBIOS jenom jména, vznikly dva dokumenty RFC ( RFC 1000 / 1002), které popisují, jak by měl NetBIOS pracovat na TCP/UDP sítích. Tyto dokumenty popisují všechny implementace, včetně Samby a nativního protokolu Windows.
[Zpátky navrch]WINS (The Windows Internet Name Service) je Microsoftí implementace NetBIOS nameserveru (NBNS). Jako takový má stejné charakteristiky jako NetBIOS. Je jednoduchý, což znamená, že lze mít pouze jednoduché názvy skupin a počítačů. Je dynamický: když se klient připojí do sítě, je po něm požadováno lokálním WINS serverem jeho síťové NetBIOS jméno, adresa a pracovní skupina. WINS klient vrací tyto informace na dotazy dokud klient tyto informace pravidleně obnovuje, z čehož WINS server usuzuje, že je stále připojen k síti. Aktivnímu serveru se říká primární WINS server. Lze nainstalovat i sekundární WINS server, který funguje zcela očekávatelným způsobem a to tak, že v případě nedostupnosti serveru primarního přebere jeho roli. To, který WINS server bude primární a který sekundární je statická informace a je potřeba ji nastavit na natvrdo na pracovních stanicích. Primární a sekundární server synchronizují záznamy periodicky. Samba může být primárním WINS serverem, ale ne sekundárním.
[Zpátky navrch]V sítích NetBIOS, když se stanice připojí k síti, pokusí se o přihlášení svým jménem. Tomu se říká registrace. Dvě stanice nemůžou mít stejný jméno a ve stejné pracovní skupině, ze zřejmého důvodu --> nebylo by možné jednoznačně identifikovat stanice se stejnými názvy. Jsou dva různé přístupy, jak se toto řeší:
Proces registrace počítače po připojení do sítě NetBIOS:
[Zpátky navrch]
Pro překlad NetBIOS adres na IP adresy se používá jeden z následujících způsobů:
[Zpátky navrch]
There are major performance and scalability increases in Samba: the code has been reorganized and nmbd (the Samba name service daemon) heavily rewritten:
Sambu lze stáhnout z oficiálních stránek http://www.samba.org . Pro většinu běžných systémů (včetně FreeBSD) existují binární distribuce. Kompilace ze zdrojových souborů probíhá obvyklým způsobem, tedy:
# cd $PREFIX # ./configure [volby] # make # make installDostupné volby se získají parametrem --help. Za povšimnutí stojí následující: --with-ssl, --with-pam, --with-ldap, --with-quotas Konfigurační soubor smb.conf se po instalaci nachází v adresáři /etc/samba (linux) nebo /usr/local/etc (FreeBSD). Společně se Sambou se nainstaluje také SWAT (Samba WEB administration tool). Pokud chcete využívat tuto službu, je třeba přidat řádek :
swat 901/tcpdo /etc/services (pokud tam už takový není). Pokud chcete startovat SWAT z (x)inetd démona, záznam může vypadat třeba takhle [Zpátky navrch]
# /usr/local/samba/bin/smbd -D # /usr/local/samba/bin/nmbd -D
netbios-ssn 139/tcp netbios-ns 137/udpzáznamy pro (x)inetd vypadají třeba takhle
[Zpátky navrch]
Konfigurační soubor je obvykle v adresáři /etc/samba (linux) nebo /usr/local/etc (FreeBSD). Zde je jeho okomentovaná ukázka, umožňující mountování UNIXových domovských adresářů uživatelů, upload a sdílení tiskové fronty LPD.
Protože UNIXové systémy používaji znakovou sadu ISO8859--2 narozdíl od Windows, které používají WIN--1250, je třeba zajistit správné ukládání jmen na discích. Slouží k tomu konfigurační volby client code page a character set
[global] workgroup = XP netbios name = bedrich netbios alias = beda bedrichus # uzitecne %: %L -- NetBIOS jmeno serveru # %v -- verze Samby # %m, %I -- NetBIOS/IP adresa klienta # %T -- čas a datum server string = Samba %v na serveru %L #sitova zarizeni na kterych bude samba naslouchat spinterfaces = 172.16.43.1 147.251.60.201 hosts allow = 147.251.60. 147.251.62 172. security = USER map to guest = Bad Password log file = /var/log/samba/log.%m max log size = 500 character set = ISO8859-2 printing = bsd print command = lpr -r -h -P %p %s load printers = yes logfile = /var/log/samba/samba-log.%m lock directory = /var/lock/samba #preklada netbios adresy na ip tak, ze se pta dns dns proxy = yes local master = yes domain master = no hide unreadable = yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 [homes] comment = Home Directories read only = no browseable = no [upload] comment = upload z windows na sambu path = /home/ftp/upload browseable = yes writeable = yes guest account = ftp guest ok = yes [printers] comment = DeskJet690C (707) security = server path = /var/spool/lpd/dj690-sit printer name = lp browseable = yes guest ok = yes create mode = 0700 writable = yes public = yes printable = yes valid user = svatoslava, kvetomila[Zpátky navrch]
Jestli běží na počítači Samba server ozkoušíme následujícím příkazem:
# smbclient -U% -L localhost Added interface ip=172.16.43.1 bcast=172.16.43.255 nmask=255.255.255.0 Added interface ip=147.251.60.68 bcast=147.251.60.255 nmask=255.255.255.0 Domain=[SIMPLE] OS=[Unix] Server=[Samba 2.0.5a] Sharename Type Comment --------- ---- ------- homes Disk Home Directories upload Disk upload z windows na sambu test Disk For testing only, please IPC$ IPC IPC Service (Samba 2.0.5a) Server Comment --------- ------ BEDRICH Samba 2.0.5a Workgroup Master --------- ------- XP BEDRICH # testparm Load smb config files from /usr/local/samba/lib/smb.conf ... load printers: Yes printcap name: /etc/printcap Default service parameters: guest account: ftp min print space: 0 print command: lpr -r -P%p %s lpq command: lpq -P%p lprm command: lprm -P%p %j lppause command: lpresume command: Service parameters [printers]: path: /tmp print ok: Yes read only: true public: true # testprns lp /etc/printcap Looking for printer lp in printcap file /etc/printcap Printer name lp is valid.[Zpátky navrch]
wait stream tcp nowait.400 root /usr/local/samba/bin/swat swat
service swat { socket_type = stream wait = no only_from = localhost user = root server = /usr/local/sbin/swat log_on_failure += USERID }
#!/bin/sh # # chkconfig: - 91 35 # description: Starts and stops the Samba smbd and nmbd daemons \ # used to provide SMB network services. # # pidfile: /var/run/samba/smbd.pid # pidfile: /var/run/samba/nmbd.pid # config: /etc/samba/smb.conf # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi # Avoid using root's TMPDIR unset TMPDIR # Source networking configuration. . /etc/sysconfig/network if [ -f /etc/sysconfig/samba ]; then . /etc/sysconfig/samba fi # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Check that smb.conf exists. [ -f /etc/samba/smb.conf ] || exit 0 # Check that we can write to it... so non-root users stop here [ -w /etc/samba/smb.conf ] || exit 0 RETVAL=0 start() { KIND="SMB" echo -n $"Starting $KIND services: " daemon smbd $SMBDOPTIONS RETVAL=$? echo KIND="NMB" echo -n $"Starting $KIND services: " daemon nmbd $NMBDOPTIONS RETVAL2=$? echo [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 return $RETVAL } stop() { KIND="SMB" echo -n $"Shutting down $KIND services: " killproc smbd RETVAL=$? echo KIND="NMB" echo -n $"Shutting down $KIND services: " killproc nmbd RETVAL2=$? [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb echo "" return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading smb.conf file: " killproc smbd -HUP RETVAL=$? echo return $RETVAL } rhstatus() { status smbd status nmbd } case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; condrestart) [ -f /var/lock/subsys/smb ] && restart || : ;; *) echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}" exit 1 esac exit $?
#!/bin/sh rc_file=${0##*/} if ! PREFIX=$(expr $0 : "\(/.*\)/etc/rc\.d/${rc_file}\$"); then echo "${rc_file}: Cannot determine PREFIX." >&2 echo "Please use the complete pathname." >&2 exit 64 fi smbspool=/var/spool/samba pidfiledir=/var/run smbd=${PREFIX}/sbin/smbd nmbd=${PREFIX}/sbin/nmbd # start if [ "x$1" = "x" -o "x$1" = "xstart" ]; then if [ -f $smbd ]; then if [ -d $smbspool ]; then rm -f $smbspool/* fi echo -n ' Samba' $smbd -D $nmbd -D fi # stop elif [ "x$1" = "xstop" ]; then kill `cat $pidfiledir/smbd.pid` kill `cat $pidfiledir/nmbd.pid` fi
service netbios-ssn { socket_type = stream protocol = tcp wait = no user = root group = root server = /usr/local/sbin/smbd }
service netbios-ns { socket_type = dgram protocol = udp wait = yes user = root group = root server = /usr/local/sbin/nmbd }
netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd