Лекция 9
Конфигуриране на системата. Стартиране и конфигурация на SAMBA сървър. Достъп до споделени Windows ресурси под Линукс и обратно.
В много случаи мрежата в която работи вашата Линукс машина е хетерогенна, т.е. освен Линукс машини има и множество Windows базирани такива. Ако се налага споделяне на файлове или принтери, които да са видими за всички компютри в такава мрежа се налага използването на протокола Server Message Block(SMB). Този протокол се използва от Windows базирани компютри за организиране на достъп до файлове и принтери (това са т.нар. споделени файлове (shared files) и споделени принтери (shared printers)). Използвайки набора от помагала Samba на Андрю Тридгел, UNIX™ - машини могат да организират достъп до дисковете и принтерите за Windows машини.
Това което може да правите със Samba e :
да се дава достъп до дисковете на Linux Windows-машини.
да се получава достъп до дисковете на Windows за машини под Linux.
да се дава достъп до принтерите под Linux за Windows-машини.
да се получава достъп да принтерите под Windows от Linux-системи.
Преди да може да работите със Samba трябва вашата локална мрежа да работи с TCP/IP протокол, тъй като тя работи само с този протокол. Освен това Samba може да работи само в рамките на един сегмент от мрежата, тъй като използва броудкаст за разпращането на пакетите. Това не позволява на Samba да работи с маршрутизатори, освен ако не е настроено тунелно IP. И накрая... за да работите със Samba, то вие трябва да я имате инсталирана. Можете да проверите дали имате инсталирана Samba със следната команда:
#whereis smbd
smbd: /usr/sbin/smbd /usr/man/man8/smbd.8.gz /usr/share/man/man8/smbd.8.gz
Ако изхода е подобен на показания, то вие имате инсталиран Samba пакета. В противен случай ще трябва да го инсталирате. Това може да стане както от предоставяните от дистрибуцията пакети, така и от изходен код. В момента на писане на лекцията последната версия на Samba е 3.0.2а и може да бъде изтеглена от http://www.samba.org.
Основните файлове в Samba са:
smbd – това е демона който осигурява работата със SMB
nmbd – демон осигуряващ NetBIOS имената
smbclient – клиент за SMB за UNIX™ машини
smbprint – скрипт за печатане на принтер на SMB машина
smbstatus – показва информация за осъществените SMB връзки
smbmount и smbumount – монтират отдалечените SMB ресурси на локалната файлова система
smb.conf – конфигурационния файла на Samba сървъра
Двата основни демона може да работят както като автономни процеси, така и като процеси контролирани от inetd. Принципна разлика в конфигурацията няма, с изключение на това, че Samba ще работи малко по-бързо ако е пусната като автономен процес. Преди да пуснете Samba уверете се, че следните редове съществуват във файла /etc/services и ако не съществуват ги добавете:
netbios-ns 137/tcp nbns
netbios-ns 137/udp nbns
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
netbios-ssn 139/tcp nbssn
Ако сте инсталирали Samba от пакета на Slackware, то сървъра може да се пусне по следния начин:
#/etc/rc.d/rc.samba start – пускане на сървъра
#/etc/rc.d/rc.samba stop – спиране на сървъра
# etc/rc.d/rc.samba restart – рестартира сървъра (при промяна на конфигурационния файла се налага рестартиране)
Ако използвате Red Hat скрипта се намира в /etc/rc.d/init.d/ и се нарича smb.
За да може да използвате пълноценно Samba, то тя трябва да се настрои. Настройката се извърша в един единствен файла smb.conf, който в Slackware се намира в директорията /etc/samba. В други дистрибуции местоположението на файла може да е различно, като най-вероятно е да се намира в директорията /etc/.
Чрез файла smb.conf вие определяте към какви системни ресурси искате да дадете достъп за външния свят и какви ограничения искате да определите при използването на тези ресурси. Този файл е разделен на раздели, като всеки раздел започва с определено име – например [global], [homes], [printers] и т.н.
Секцията [global] определя някой променливи, които Samba ще използва за определяне на достъпа до всички ресурси.
Раздела [homes] позволява на отдалечените потребители да имат достъп до своите (и само до тях) домашни директории на локалната Linux-машина. Така че, ако потребителите на Windows се пробват да се включат към този раздел от своите Windows машини, то те ще бъдат включени към своите персонални домашни директории. Ще отбележим, че за да могат да направят това те трябва да са регистрирани на Linux-машината.
Нека сега започнем с прост smb.conf файла, който ще позволява на отдалечените потребители да имат достъп към техните домашни директории на локалната машина и да пишат във временна директория.
;/etc/smb.conf
[global]
; Разкоментирайте този ред , ако вие искате да дадете достъп на потребителя "гост"
; guest account = nobody
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
workgroup = Class514
netbios name = Server514
server string = Class 514 - server resources
[homes]
comment = Home Directories
browseable = no
read only = no
create mode = 0750
[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
Нека разгледаме секциите една по една.
Секцията [global] съдържа шест реда, първият от които е коментиран. Вторият указва къде ще се пази журналния файла на Samba сървъра, а третия - файла, който заключва Samba от повторно стартиране. Четвъртия ред задава групата в която ще работи сървъра и петия – неговото име. Последният ред задава кратко обяснение на сървъра. Секцията [global] може да съдържа и още параметри по-важните от които са:
interfaces – задава на кой мрежови интерфейс ще работи Samba сървъра. Например interfaces = 192.168.0.1/24 127.0.0.1/24
bind interfaces only – ако стойността на този параметър е yes, то заявките идващи от броадкаст адреси различни от тези на интерфейсите описани в interfaces, ще бъдат отказвани. Това, в комбинация с параметъра interfaces повишава сигурността на сървъра.
time server – ако стойността е yes, то nmbd се идентифицира като time сървър на Windows машините.
encrypt passwords – ако стойността е no, се деактивира криптирането на паролите. Трябва да имате в предвид, че Windows 98/NT и по-нови използват криптирани пароли.
socket option – задава специални параметри към сокета на който работи Samba сървъра. Чрез тях се контролира мрежовото ниво от ISO/OSI модела. Параметъра се използва за ускоряване работата на сървъра. Препоръчителни опции са TCP_NODELAY и SO_SNDBUF=8192.
preferred master – ако стойността на параметъра е yes, то Samba сървъра ще стане MASTER BROWSER за дадената работна група (workgroup). Това означава, че останалите компютри в групата ще се свързват към него, за да получат информация за другите компютри в групата.
security – задава как клиентите да отвръщат на Samba сървъра и е един от най-важните параметри. Възможните стойности са:
USER – използва се ако потребителите, които ще се свързват към сървъра имат същите потребителски имена под Windows, както тези под Линукс. Ако някое име не съвпадне, то достъпа му се отказва. Това е стойността по подразбиране.
SHARE – сървъра не изисква валидно потребителско име и парола, за да позволи на клиента да осъществи връзка.
DOMAIN – тази стойност на параметъра security трябва да се използва само ако машината е добавена в Windows NT Domain (чрез програмата net идваща с пакета Samba). Освен това тя изисква параметъра encrypt passwords да има стойност yes. За да може Линукс да свърже потребителя е необходимо той да присъства като валиден потребител и в Линукс машината.
SERVER – в този режим Samba ще се опита да валидира потребителското име и паролата от друг SMB сървър, например NT машина. Ако това пропадне, Samba превключва на security = USER. Изисква се encrypt passwords да има стойност yes, с изключение в случаите когато другата машина не поддържа криптирани пароли.
ADS – в този режим Samba ще работи като член на домейн в ADS (Active Directory Service)област . Този режим изисква инсталиран и конфигуриран Kerberos. Освен това Линукс машината трябва да се добави към ADS областта чрез помощната програма net (man net).
В секцията [homes] се описват параметрите на достъп до домашните директории на потребителите. Първият ред указва коментара, който се появява срещу директорията. Вторият ред задава дали дадения споделен ресурс ще се вижда в списъка с достъпни споделени ресурси. Третия ред задава режим на достъп до ресурса, а последния ред – позволенията с които ще се създават файловете.
В секцията [tmp] параметъра public показва, че за достъп до този ресурс не се изисква парола, а параметъра path, задава пътя до директорията, която се споделя.
След промяна на файла е добре той да се провери за валидност. Това става с командата testparm. Ако тя не върне грешка, конфигурацията е валидна. За да влезе новата конфигурация в сила трябва да рестартирате сървъра с командите:
#/etc/rc.d/rc.samba restart – за Slackware
#/etc/rc.d/init.d/smb stop
# /etc/rc.d/init.d/smb start – за Red Hat
Ето още един пример за споделяне на директория:
[Music]
comment = Music folder
path = /mnt/storage/Music
guest only = Yes
guest ok = Yes
Параметъра guesk ok е синоним на public. Параметъра guest only задава достъпа до споделения ресурс, като в случая никой освен guest потребителите нямат достъп до ресурса.
Това е най-основната конфигурация за осигуряване достъп на Windows машини до Линукс чрез SMB протокола.
Конфигурирането на smb.conf може да се улесни ако се използва помощното приложение SWAT (Samba Web Administration Tool). SWAT работи като сървър и очаква връзка към порт 901. За връзка се използва обикновен браузър. SWAT позволява цялостно конфигуриране на Samba сървъра чрез удобен и лесен WEB интерфейс. Освен SWAT може да се използва и специален плъгин за KDE наречен ksambaplugin (http://ksambakdeplugin.sourceforge.net/), който се интегрира в Контролния панел на KDE и в неговите менюта.
Когато искате да осъществите достъп до Windows споделени ресурси от Линукс трябва да използвате програмата smbclient, която се разпространява с пакета Samba. Тя ви предоставя FTP подобен конзолен интерфейс. Достъпа до ресурса \\server514\shared се осъществява така:
#/usr/sbin/smbclient \\\\server514\\shared – ако ресурса е споделен без парола
#/usr/sbin/smbclient \\\\server514\\shared mypasswd – ако ресурса е споделен с парола
След като попаднете в обвивката на командата може да използвате help, за да видите възможните команди. Друга начин за достъп до споделени ресурси е възможността на тяхното прикачане към локалната файлова система. Това става с командата smbmount:
#smbmount \\\\server514\\shared /mnt/smb
#smbumount /mnt/smb
Друг начин за монтиране на споделен SMB ресурс е чрез командата mount:
#mount -t smbfs \\\\server514\\shared /mnt/smb
#umount /mnt/smb
За да e възможно монтирането на SMB споделена директория към локалната файлова система е необходимо ядрото да е компилирано с поддръжка на SMBFS. Това може да проветите с командата:
#cat /proc/filesystems
Ако списъка, който тя връща включва smbfs, то ядрото ви е компилирано с тази поддръжка. В противен случай ще е необходимо за използвате програмата smbclient за достъп до споделените ресурси.
Освен файлове, чрез Samba може да се споделят и принтери. Ето примерна конфигурация за споделяне на принтер от Линукс:
[global]
printing = bsd
load printers = yes
printcap name = /etc/printcap
max print jobs = 100
[printers]
comment = All printers
printable = yes
path = /var/spool/samba
browseable = no
guest ok = yes
public = yes
read only = yes
writable = no
Значението на отделните параметри е следното:
[global]
printing = bsd – казва на Samba да използва BSD стил на принтиране. В новите дистрибуции се предпочита използването на CUPS.
load printers = yes – при използването на този параметър се избягва дефинирането на секция за всеки отделен принтер. Споделят се всички принтери описани в /etc/printcap.
max print jobs = 100 – задава максималния брой едновременни задачи.
printcap name = /etc/printcap – задава пътя на файла където са описани достъпните принтери. Ако се използва CUPS този файла трябва да има права за писане.
[printers]
printable = yes – ако този параметър не е със стойност yes, smbd ще откаже да се стартира.
path = /var/spool/samba – трябва да сочи към директория където Samba да съхранява пристигащите файлове. Тази директория трябва да е различна от тази зададена на системата за принтиране на Линукс.
browseable = no
Ако вашата дистрибуция използва CUPS (Common UNIX Print System), то параметрите printing и printcap name трябва да са със стойности cups. За да може да използвате CUPS, то Samba трябва да е компилирана с такава поддръжка.
Сега ще разгледаме случая на принтиране от Линукс машина на споделен принтер работещ на Windows. За да може да правите това трябва да отговаряте на следните условия:
Вие трябва да имате правилни записи във файла /etc/printcap (те трябва да съответстват на локалната структура на директориите за буферна директория и т.н.)
Трябва да имате скрипт /usr/bin/smbprint. Той се доставя заедно с изходните кодове на Samba, но не със всички двоични дистрибутиви на Samba (например в пакета на Slackware, smbprint не присъства). В по-новите дистрибутиви на Samba e заменен с smbspool.
Ако вие искате да преобразувате ASCII файлове в Postscript вие трябва да имате програмата nenscript, или неин еквивалент. nenscript това е конвертор на Postscript и той обикновено се разполага в директорията /usr/bin.
Нека разгледаме един примерен /etc/printcap, като файла е за принтер HP 5MP нa сървър Windows 2000. Използват се следните полета на файла /etc/printcap:
cm – коментар
lp -име на устройството, отворено за въвеждане
sd - spool директория на принтера (на локалната машина)
af - файл за отчет за използването на принтера
mx - максималния размер на файла (нула - без ограничения)
if - име на входния филтър (скрипта)
# /etc/printcap
lp:\
:cm=HP 5MP Postscript Printer on Server514:\
:lp=/dev/lp1:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/acct:\
:mx#0:\
:if=/usr/bin/smbprint:
Убедете се, че буферните директории и директорията използвана за отчет за ползването, съществуват и са с права за запис. Убедете се, че реда 'if' съдържа правилния път към скрипта smbprint (даден по-долу) и убедете се, че записите сочат към правилното устройство за въвеждане (специалния файл /dev).
След това може да използвате програмата smbspool за печат на споделени принтери през SMB протокола. Формата за използване на програмата е:
smbspool {job} {user} {title} {copies} {options} [filename] , където:
job – съдържа идентификационния номер на задачата и за момента не се използва от smbspool.
user – съдържа името на потребителя и за момента не се използва от smbspool.
title – съдържа името на задачата, което се интерпретира като име на отдалечения файл
copies – брой копия на принтирания файл.
options – задава различни опции. Не се използва от smbspool.
filename – задава името на файла, който ще се изпрати на отдалечения принтер. Този файл трябва да се създаден чрез „Print as file“ от съответната програма и трябва да бъде в Postscript формат. Повечето програми на KDE може да печат във файл с Postscript формат.