Установка и настройка 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