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:
Pro překlad NetBIOS adres na IP adresy se používá jeden z následujících způsobů:
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 install
Dostupné 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/tcp
do /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/udp
zá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