Даже в небольшом офисе хочется иметь централизованную возможность управлять всеми компонентами сети, или хотя бы небольшой ее части. На этом примере я хочу рассказать как это можно сделать используя бесплатное программное обеспечение.
Немного о том чего я хочу получить в итоге:
- Файловое хранилище
- Централизованное управления учетными записями
- Возможность использовать групповые политики
Кто-то здесь может сказать что для решения данных проблем достаточно иметь сервер под управлением M$ Server*, и он будет прав. Но есть одна существенная проблема - стоимость лицензии, не все мелкие предприятия могут выложить N-ную сумму даже на физический сервер, а тут еще и лицензию покупай. Поэтому считаю данное замечание неуместным.
Итак, я буду ставить "самбу" из портов на своем сервачке под управлением FreeBSD.
root@hsrv:~ # uname -sr
FreeBSD 10.0-STABLE
Первым делом обновим порты, так как я не хочу поставить устаревшый или драный софт.
root@hsrv:~ # portsnap fetch extract
...
root@hsrv:~ # portsnap update
...
У меня процесс занял где-то тридцать минут, дальше настроим опции сборки.
root@hsrv:~ # cd /usr/ports/net/samba41
root@hsrv:~ # make config
Мой выбор был простым, что не знаю то не включаю :-), на удивления такой метод меня пока еще никогда не подводил. Итого я оставил включенными такие опции:
[X] ACL_SUPPORT File system ACL support
# Включаем поддержку acl что бы можно была с под "винды" галочки раставлять.
[X] ADS Active Directory support
# Включаем поддержку актив директори.
[X] AIO_SUPPORT Asyncronous IO support
# пишут что прилично ускоряет файловые операции, включим и протестируем.
[X] DNSUPDATE Dynamic DNS update(require ADS)
# Включаем возможность автоматически обновлять DNS(как же актив директори без этого).
[X] QUOTAS Disk quota support
# Включаем поддержку квот
[X] SYSLOG Syslog logging support
# Пихание логов в Syslog
(*) BIND99 Use bind99 as a DNS server frontend
# У меня уже был ранее установлен BIND 9.9.5-P1, по этому мне показалось глупым не ткнуть здесь галочку
(*) AVAHI Zeroconf support via Avahi
Запускаем сборку и идем пить чай, курить и плевать в потолок :-)
root@hsrv:~ # make && make install
Когда Если все закончилось и поставилось без ошибок попытаемся настроить самбу:
root@hsrv:~ # samba-tool domain provision --domain=office --host-name=hsrv.local --use-rfc2307 \
--realm=office.local --targetdir=/usr/home/samba --server-role=dc --dns-backend=BIND9_DLZ \
--adminpass=password --use-ntvfs --function-level=2008_R2 --quiet
Пробежусь немного по параметрам:
- --domain=office указываем имя домена для NetBIOS.
- --host-name=hsrv.local имя сервера.
- --use-rfc2307 этот параметр добавляет POSIX атрибуты (UID / GID) к схеме AD. Эта штука понадобится нам если мы решим добавить невалидных клиентов(тазики с NIX* осями)
- --realm=office.local FQDN для нашего домена.
- --targetdir=/usr/home/samba мне удобней хранить все в хомяке, по этому указываю самбе куда все нужно разворачивать.
- --server-role=dc ну здесь все просто, объясняем самбе что она будет контроллером домена.
- --dns-backend=BIND9_DLZ говорим что нужно использовать BIND 9.9.5-P1 в качестве dns сервера
- --adminpass=password как не странно но здесь должен быть админский пароль
- --use-ntvfs
- --function-level=2008_R2 Уровень работы домена(Windows server 2008 R2)
- --quiet указываем самбе сделать все по тихому
Если все прошло без ошибок, то нам осталась самая малость - отшлифовать конфигурацию до нужного блеска. А наконфигурить нам нужно одну шару для документов предприятия, назовем ее "Documments". В шаре подключим модуль аудита и корзину (на будущее было бы не плохо прицепить модуль теневого копирования, но к сожалению он во FreeBSD на текущий момент не работает)
root@hsrv:~ # ee /usr/local/etc/smb4.conf
[global]
# Глобальная секция
# Нужные нам кодировки, что бы работал русский язык.
dos charset = cp1251
unix charset = cp1251
# имя домена, в нашем случае OFFICE
workgroup = OFFICE
# FQDN нашего домена
realm = office.local
# NetBIOS-имя нашего сервера
netbios name = HSRV.LOCAL
# Роль нашего сервера
server role = active directory domain controller
# Директории самбы
private dir = /usr/home/samba/private
lock directory = /usr/home/samba
state directory = /usr/home/samba/state
cache directory = /usr/home/samba/cache
# Задействованные сервисы
server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate
idmap_ldb:use rfc2307 = yes
# Так как у нас нет сетевых принтеров, то и их поддержка нам особо не нужна, отрубаем.
load printers = no
disable spoolss = Yes
show add printer wizard = No
# Вот здесь мы и побалуемся с обещанной производительностью (Asyncronous IO support)
socket options=SO_RCVBUF=131072 SO_SNDBUF=131072 TCP_NODELAY
min receivefile size = 16384
use sendfile = true
aio read size = 16384
aio write size = 16384
[netlogon]
path = /usr/home/samba/state/sysvol/office.local/scripts
read only = No
[sysvol]
path = /usr/home/samba/state/sysvol
read only = No
[documments]
# абсолютный путь к папке на сервере
comment = Documments
path = /home/samba/shares/documments/
read only = no
browseable = yes
writable = yes
# По скольку у нас в шаре должны быть документы то музыка и фильмы а так же екзешники идут лесом
veto files = /*.avi/*.mp3/*.mkv/*.wav/*.wma/*.fly/*.mpg/*.mpeg/*.vob/*.3gp/* \
.exe/*.reg/*.src/*.pif/*.cmd/*.bat/*.inf/*.ini/*.com/*.dll/
# Но вдруг они каким-то образом здесь оказались то разрешим их удалить
delete veto files = yes
# Подключаем модуль аудита "full_audit".
vfs object = full_audit
# Уровни логирования:
# 0 - создание -удаление директорий и удаление файлов
# 1 открытие директорий, переименование файлов, изменение прав/списков_доступа ,
# 2 открытие и закрытие файлов
# 10 максимальный уровень.
# log level = 1 vfs:1
# syslog = 7
# Может принимать любые значения из набора: %u, %I, %U, %m, %s, %S, %a, %h, %H.
full_audit:prefix = %u|%I
full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename, pwrite
full_audit:failure = none
full_audit:facility = local5
full_audit:priority = notice
# подключаем vfs модуль корзины
vfs object = recycle
# относительный путь к каталогу корзины
recycle:repository = .recycle/%U
recycle:mode = KEEP_DIRECTORIES|VERSIONS|TOUCH
# максимальный размер файла для помещения в корзину, 0 - без ограничения.
recycle:maxsize = 0
# файлы с такими расширениями не будут помещены в корзину
recycle:exclude = *.tmp|*.temp|*.o|*.obj|~$*|*.~??|*.trace
# директории с такими именами не будут помещены в корзину
recycle:excludedir = /tmp|/temp|/cache
# исключения для новых версий (эти файлы не будут сохранены при удалении нескольких копий)
recycle:noversions = *.doc|*.ppt|*.dat|*.ini
# сохранять каталоги?
recycle:keeptree = Yes
# делать версификацию файлов, если имена одинаковы
recycle:versions = Yes
Теперь настроим syslog для логирования нашего "аудита". Добавим в конец файла syslog.conf строчку показанную ниже:
root@hsrv:/etc # ee /etc/syslog.conf
...
local5.notice /var/log/samba4/audit.log
Еще бы было не плохо ротацию логов устроить, так и делаем:
root@hsrv:/etc # ee /etc/newsyslog.conf
...
/var/log/samba4/audit.log 644 30 500 * JC
Теперь прикрутим это все к нашему DNS серверу, который BIND 9.9.5-P1. Как сказано в мануале нам нужно в конфигурационный файл добавить только одну строчку:
root@hsrv:/etc # ee /usr/local/etc/namedb/named.conf
...
include "/usr/home/samba/private/named.conf";