Передо мной стояла задача предоставить доступ к файловым ресурсам пользователей и базам 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г. Никитин Владислав
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии