Передо мной стояла задача предоставить доступ к файловым ресурсам пользователей и базам 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, |
%d | Current server process's processID |
%f | Print-spool file as a relative path (printing |
%f | User from which a message was sent (messages |
%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 |
%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 |
%o | Old password (password change only) |
%P | Current share's root directory (actual) |
%p | Current share's root directory (in an NIS |
%p | Print filename (printing only) |
%R | Protocol level in use (one of CORE, COREPLUS, |
%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г. Никитин Владислав