Установка и настройка samba сервера

Передо мной стояла задача предоставить доступ к файловым ресурсам пользователей и базам 1С, также должен был нормально функционировать ключ защиты 1С - HASP, естественно проводиться резервное архивирование и предоставление общего доступа к ресурсам internet.


Небольшой опыт работы с Linux'ом у меня уже был, но если кто заметит ошибки просьба сильно не пинать, но на любую критику постараюсь отреагировать. Итак приступим.


Первый этап - выбор дистрибутива. Почему Debian? На этот вопрос нет ответа. Выбор дистрибутива - это как религия. Мне более близок оказался именно этот вариант.


Считаем, что Linux уже установлен, теперь необходимо установить Samba, вот она и будет отвечать за предоставление ресурсов машинам под управлением windows.
Я остановился на Samba 2.2.8, к сожалению Samba 2.2.2 идущая с
дистрибутивом, я не смог нормально заставить работать с базами 1С. Если у Вас такая же ситуация то немедленно шествуем на www.samba.org
и берем 2.2.8, уже существует бета-версия 3.0, но я решил не искушать судьбу и остановиться на последнем стабильном релизе. Хотя нововведений и “вкусностей” у 3.0 очень много. (на момент написания статьи - вышел стабильный релиз samba 3.0)


Если у Вас Samba в пакете то -

dpkg -i samba-common

dpkg -i samba

dpkg -i smbclient

dpkg -i samba-doc - пакет не обязательный, но очень рекомендую.


либо


apt-get install
samba-common samba smbclient samba-doc


и т.д


Для redhat – rpm
-Uvh samba - точное наименование пакетов не помню


Более детально установка
samba описана у Voland'a

Но не спешите сразу
кидаться на настройку smb-сервера, сперва проверьте настройки сети на
Вашем сервере. Если Вы правильно ответили на все вопросы при
установке Linux и у Вас нет “экзотческих” сетевых карт –
то, как правило, все будет работать. Но лишний раз убедиться не
мешает.

Все работает? Но все
равно, еще рано стучать по клавиатуре. Определитесь с структурой
вашей сети, т.е. распределением IP-адресов, если сеть большая –
желательно использовать DHCP, у меня всего 1,5 десятка машин, поэтому
я раз и навсегда выделил каждой машине статичный адрес и всех их
прописал в /etc/hosts. (см. man hosts и не забывайте эту команду ;).
Определитесь с необходимыми ресурсами и правами доступа. Все эти
мероприятия могут весьма облегчить жизнь на следующих этапах.


Итак все работает, Вы
уже знаете чего хотите от сервера приступим к установке. Если у Вас
на машине установлены принтеры,например у меня их два – Еpson
LX1770 (LPT) и HP1200(USB), то самое время подключить и настроить их
сейчас. Я подключал с помощью lprng, но существуют и другие методы,
например - CUPS (в последних версиях samba он поддерживается), lpr и
др. Возникли проблемы? Облегчит установку использование frontend 'а -
lprngtools, хотя лично я считаю наличие X'ов на сервере лишней тратой
ресурсов. Но, если вам ближе графические методы настройки, могу
предложить webmin – Web-ориентированный набор утилит, очень
хорош для удаленного администрирования, хотя на меня так ничего лучше
нет ssh-сессии ;)


Вы конечно знаете количество пользователей, их имена и разбили их на группы. Самое время их внести.


Создаем новые группы пользователей, например бухгалтерия:


server:/# addgroup buh


и вносим в нее пользователей:


server:/# adduser -group buh пользователь


Также добавим группу machines, в которую будем помещать имена машин входящих в домен


server:/# addgroup machines


и создадим учетную запись для машины buh$ символ $ обозначает, что данная учетная запись является клиентской машиной


server:/# useradd -g machines -d /dev/null -s /bin/false buh$ пользователь


подробнее man adduser.


А вот теперь дошла очередь и до Samba.


Берем smb.conf и перекраиваем его под себя, наверное проще будет объяснить по
реальному примеру, поэтому предоставляю свою конфигурацию, опять же
оговорюсь, этот пример не является идеальным, но покрайней мере он
работает.

[global]


# Имя сервера, как
комментарий

server string = Server


#Имя машины в сети

netbios name = server


#Имя нашей рабочей группы

workgroup = ASPUP


#Месторасположение файла
паролей

smb passwd file = /etc/samba/smbpasswd

pam password change =
yes


#Будет ли наша машина
использоваться в качестве контролера домена

domain master = yes

#Используем шифрованные
пароли

encrypt passwords = yes


#Разрешается ли
пользователям иметь нулевые пароли


null passwords = yes

# Будет ли сервер при
запуске производить перевыборы и стараться стать мастер-броузером
нашего домена

preferred master = yes


#Становимся
WINS-сервером, для небольших сетей данный параметр избыточен

wins support = yes

#Список разрешенных узлов
и сетей

hosts allow = 192.168.0.127.


obey pam restrictions =
yes

#Метод авторизации
пользователей, права определяются на уровне пользователей

security = user


# Будет ли наша машина
мастер-броузером для нашего домена

local master = yes


#Программа используемая
для задания пароля

passwd program = /usr/bin/passwd %u

socket options =
TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

passwd chat =
*New*password* %n\n *Retype*new*password* %n\n
*passwd:*all*authentication*tokens*updated*successfully*

#Становимся сервером
хранения паролей домена

domain logons = yes


#Требуется ли синхронизировать пароли Linux и Samba

unix password sync = Yes

#Местонахождение и имя
лог-файла

log file = /var/log/samba/samba.log


# Приоритет нашего
сервера в сети, устанавливаем максимальный

os level = 255


#Скрипт запускаемый при
входе пользователя

logon script = %U.bat

#Профайлы пользователей
будут находиться в:

logon path = \\%L\profiles\%u\%m


#Будет ли сервер
использоваться для синхронизации времени

time server = yes


#Уровень ведения логов,
для начала лучше поставить повыше

log level = 0


# Группа пользователей с
правами администратора

domain admin group = @admin


add user script =
/usr/sbin/useradd -d /dev/null -g machine -s /bin/false -M %u



#Параметры печати и
работы спринтером

printing = lprng #у меня используется lprng,


load printers = yes


printcap name =
/etc/printcap


#Вывод задания на печать


print command =
/usr/bin/lpr -r -P%p %s


#Запуск принтера


queueresume command =
/usr/bin/lpc -P%p start


#Удаление заданя из
очереди


lprm command =
/usr/bin/lprm -P%p %j


#Остановка принтера


queuepause command =
/usr/bin/lpc -P%p stop


#Состояние очереди печати
принтера


lpq command =
/usr/bin/lpq -P%p


#Приостановка печати


lppause command =
/usr/bin/lpc hold %p %j


#Продолжение печати


lpresume command =
/usr/bin/lpc release %p %j


#Кодовые страницы
используемая на сервере и клиентом


character set = koi8-r


client code page = 866

#Ресурс необходимый для
работы PDC


[netlogon]


path =
/usr/local/samba/lib/netlogon


guest ok = yes


writable = no


write list = @admin


#Здесь храняться профайлы
пользователей


[profiles]


path =
/var/lib/samba/profiles


browseable = no


writable = yes


create mask = 0600

#Домашние директории
пользователей


[homes]


comment = Home
Directories


printable = no


browseable = no


writeable = yes


valid users = %S


create mode = 0664


directory mode = 0775

#Здесь хранятся базы 1С


[1C]


path = /1C


writeable = yes


create mode = 0666


directory mode = 0777


printable = no


public = yes





#А здесь исполняемые
файлы


[1Cv77.ADM]


path = /1C/adm


writeable = yes


create mode = 0666


directory mode = 0777


printable = no


public = yes

#Ресурс группы
пользователей бухгалтерии


[buh]


path = /mnt/buh


public = yes


printable = no


writeable = yes


create mode = 0666


directory mode = 0777


valid users = @buh
@admin


comment = Ресурсы
бухгалтерии

#Здесь хранятся резервные
копи


[Backup]


path =
/mnt/backup/backup


valid users = @admin


public = yes


printable = no


writeable = yes


create mode = 0666


directory mode = 0777


comment = ежедневный
архив





#Здесь располагаются
драйвера принтеров


[printer$]


path =
/usr/local/samba/printdrivers


guest ok = yes


read only = yes







#Даем доступ к HP1200


[HPLaserJ]


printer = lp0


printing = BSD


printable = yes


guest ok = yes


read only = yes


path = /var/spool/samba





# И к Epson FX11-70


[Epson]


printable = yes


printer = lp1


printing = BSD


read only = yes


guest ok = yes


path =
/var/spool/samba








Также полезно иметь под
рукой список используемых переменных






























































































































Имя



Значение



%a



Client's architecture (one of Samba, WfWg,
WinNT, Win95, or UNKNOWN)



%d



Current server process's processID



%f



Print-spool file as a relative path (printing
only)



%f



User from which a message was sent (messages
only)



%G



Primary group name of %U (requested username)



%g



Primary group name of %u (actual username)



%H



Home directory of %u (actual username)



%h



Samba server's (Internet) hostname



%I



Client's IP address



%j



Print job number (printing only)



%L



Samba server's NetBIOS name (virtual servers
have multiple names)



%M



Client's (Internet) hostname



%m



Client's NetBIOS name



%n



New password (password change only)



%N



Name of the NIS home directory server (without
NIS, same as %L)



%o



Old password (password change only)



%P



Current share's root directory (actual)



%p



Current share's root directory (in an NIS
homedir map)



%p



Print filename (printing only)



%R



Protocol level in use (one of CORE, COREPLUS,
LANMAN1, LANMAN2, or NT1)



%S



Current share's name



%s



Filename the message is in (messages only)



%s



Print-spool file name (printing only)



%T



Current date and time



%t



Destination machine (messages only)



%u



Current share's username



%U



Requested username for current share



%v



Samba version






На просторах Internet
есть много хорошей документации по Samba, и пакет samba сам не плохо
документирован.




Закончили
эксперементировать с конфигурацией samba, проверяем:


server:/#
/etc/init.d/samba restart, на будущее – совсем не обязательно
при внесении изменений в конфигурацию рестартовать smb-сервер,
периодически он сам обновляет свои параметры. Для того чтобы
проверить – настраиваем windows-клиенты:


- присваиваем IP-адрес,
в моем случае он статичный, если используете DHCP – получайте
адрес автоматически








    • указываем способ
      входа в сеть:





(рис
1)







    • переходим на
      закладку идентификация и заполняем указанные поля.





(рис
2)










    • Теперь самое
      главное – указать принадлежность к созданному нами домену:











Если после всего этого
вы не можете с клиентской машины войти в сеть – это тоже
нормально, сервер ведь не знает о наличии пользователя buh, пора
создать его.


smbpasswd -a buh


и активируем его


smbpasswd -е buh





Все замечательно, можно
создавать стартовые скрипты:





создаем файл buh.bat, в
него прописываем:


NET TIME \\SERVER /SET
/YES


NET USE Y: \\SERVER\buh
/YES


Лучше писать этот скрипт
в win – машине





В первой строке
синхронизируем время, во второй подключаем сетевой диск с ресурсом
buh


теперь очередь дошла до
1С. Вот на этом этапе можно оценить прелесть Samba 2.2.8 –
решается простым переносом баз конфигурации на ресурс сервера,
следует отметить, что если у вас 1С базируется на MSSQL, то никакие
пляски с бубном вам не помогут и придется мириться с продуктами MS.
Но нам повезло, у нас обычные bdf'ники. Стартуем 1С, и ..., конечно
не видим ключа защиты, у нас же, лицензионная версия. Ничего и это
решаемо идем на http://ealaddin.com и берем следующие пакеты:


ftp://ftp.ealaddin.com/pub/hasp/new_releases/linux/HDD_Linux.tar.gz


ftp://ftp.ealaddin.com/pub/hasp/new_releases/linux/LM_Setup_Linux.tar.gz


Возможно сейчас их
наименование изменились, в любом случае стоит зайти на основную
страничку


сперва нам необходимо
включить в ядро модуль aksparlnx.o, его выбираем из пакета
HDD_Linux. Для этого ложим модуль на положенное ему место -
/lib/modules/2.4.XX/kernel/drivers/parport/ и подключаем его. Для
этого очень удобно использовать modconf, либо insmod <путь к
драйверу>/aksparlnx.o


Создаем устройство


mknod /dev/Hardlock c 42
0


chmod 666 /dev/Hardlock





далее modprobe parport_pc





Настройка и подключение
демона aksusbd





Запускаем aksusbd, в
первый раз можно указать ключ -l 3 – подробный уровень ведения
логов. Смотрим на выдаваемые сообщения, если вы видите, подобное
этому:





поздравляю – пол
дела сделано, если нет – возможные причины:


посмотрите в
/proc/bus/usb Ничего не видно? Включите в ядро поддержку USB.


Открываем /etc/fstab –
должны увидеть строчку:


none /proc/bus/usb usbdevfs defaults 00


если ее нет –
добавляем и проверяем mount -a, если вас обругали – включаем
поддержку USB device filesystem в ядре.





Запускаем
/etc/init.d/Hasplm start (скрипт запуска находится в
LM_Setup_Linux.tar.gz)
и пробуем зайти еще раз – поздравляю.





Но расслабляться рановато
– люди хотят пользоваться прелестями Internet, необходимо
предоставить им такую возможность. Для этого используем маскарадинг
на базе iptables:





Создаем несложный скрипт:





#!/bin/sh


IPTABLES=/sbin/iptables





# Наш внешний интерфейс
(у нас используется модемное соединение)


EXTIF="ppp0"


#Внутренний


INTIF="eth0"


#Внутренний адрес сервера


LAN_IP="192.168.0.1"


#Адрес локальной сети


LAN_IP_RANGE="192.168.0.0/16"


#Широковещательный запрос


LAN_BCAST_ADRESS="192.168.0.255"


#Локальный интерфейс


LO_IFACE="lo"


#Адрес localhost


LO_IP="127.0.0.1"


# Здесь подключаем модули
iptables, если видим сообщение об ошибке, значит Ваше ядро собрано
без поддержки iptables


/sbin/depmod -a


/sbin/insmod ip_tables


/sbin/insmod ip_conntrack


/sbin/insmod
ip_conntrack_ftp


/sbin/insmod iptable_nat


/sbin/insmod ip_nat_ftp





#Включаем поддержку
динамических адресов и форвардинга


echo "1" >
/proc/sys/net/ipv4/ip_dynaddr # мне провайдер выделяет динамический
IP адрес


echo "1" >
/proc/sys/net/ipv4/ip_forward





#Очищаем все цепочки и
назначаем политики по умолчанию


$IPTABLES -P INPUT DROP


$IPTABLES -F INPUT


$IPTABLES -P OUTPUT DROP


$IPTABLES -F OUTPUT


$IPTABLES -P FORWARD DROP


$IPTABLES -t nat -F





#Включаем маскарадинг


$IPTABLES -t nat -A
POSTROUTING -o $EXTIF -j MASQUERADE





Надо
заметить, что при запуске данного скрипта ничего работать не будет –
это не шутка. Дело в том, что, как вы уже заметили, все цепочки
сбрасываются, можно конечно заменить все политики DROP на ACCEPT, в
этом случае будет все работать, но безопасность ужасно пострадает.
Лучший совет взять Iptables Tutorial на http://www.opennet.ru,
и построить безопасную систему, вышеприведенный пример взят именно
там.





Осталось настроить
клиентов :









Еще раз убедительно
рекомендую прочесть документацию по iptables и заняться безопасностью
поднятого вами сервера. В завершение, если у вас запущена только
samba, следует обратить внимание на порты – TCP:139 и
UDP:137,138





Вот, кажется и все, ан
нет – а как же резервное копирование? Вариантов создания
системы резервного копирования очень и очень много. Я остановился на
самом простом из них – использование tar и gzip


Я создал несколько
простых скриптов и запускаю их по Cron'у, но о нем чуть позже. Итак
опять привожу пример скрипта:





#!/bin/bash


cd /


echo "Bigin
archiving"


echo "archiving base
of 1c"


#Создаем временный
каталог для монтирования ресурса.


mkdir /mnt/tmp/1c


#подключаем его к нашему
каталогу. Зачем я это делаю? Просто в силу моих умений, я не знаю как
создать архив в кодировке cp1251, а locale у меня koi8-r. Конечно,
если нет необходимости открывать архивы пользователям windows, все
это не нужно.


mount -t smbfs -o ro,
uid=1000, gid=1000, iocharset=cp1251, codepage=cp866,
username=backup, password=password_backup //server/1c /mnt/tmp/1c


#Естественно пользователь
backup должен быть зарегестрирован в Samba.


#Создем архив с именем
1С<текущая дата>.tar.gz, чтобы нас не смущали бегущие по экрану
строки – отправляем их в /dev/null


tar -cvvzf
./mnt/backup/1c/1c`date -I`.tar.gz /mnt/tmp/1c >> /dev/null


#Отключаем ресурс и
удаляем временый каталог


umount /mnt/tmp/1c &&
rmdir /mnt/tmp/1c





По аналогии архивируем и
прочие документы. Теперь пришло время сказать Linux, самостоятельно
проводить архивацию. Создаем файл в /etc/cron.d/backserver (имя можно
выбрать произвольно)


30 22 * *
* root /mnt/backserver ,где 30 – минуты, 22- часы, * - дни
месяца, *-дни недели root – имя пользователя (root – не
самый лучший вариант) /mnt/backserver – скрипт который
необходимо выполнить


Другими словами
/mnt/backserver будет выполняться ежедневно в 22:30.


2003г. Никитин Владислав


nklug.org.ua