Простая Samba (расшара для Window) на FreeBSD с авторизацией для доступа

Понадобилось подключить сетевым диском папку, в которую Пользователи складывают файлы. Для этого в портах есть samba. На момент написания этой заметки были обнаружены 3 порта: /usr/ports/net/samba36, /usr/ports/net/samba4, /usr/ports/net/samba41, я выбрал первую, т.к. для моих задач функционала этой версии более чем достаточно. Начиная с 4ой версии samba тесно интегрируется с контроллером домена, точнее заточена выступать в его роли.

Samba — это программа, позволяющая организовать обращение к сетевым дискам и принтерам с различных операционных системах,например Windows, по протоколу SMB/CIFS. Она состоит из клиентской и серверной части. Это свободное программное обеспечение, выпущенное под лицензией GPL.

Прежде всего, samba, позволит дать доступ к определенным, указанным нами каталогам, по сети. Используя протокол SMB и парольную защиту. Вы сможете копировать нужные файлы, например — для настройки, конфигурирования системы или для бэкапов.

Переходим к установке:

portmaster net/samba41
Выбираем опции:

  ┌─────────────────────────── samba41-4.1 ────────────────────────────────┐
  │ ┌────────────────────────────────────────────────────────────────────┐ │
  │ │ [...] ....       ...........                                       │ │
  │ └────────────────────────────────────────────────────────────────────┘ │
  ├────────────────────────────────────────────────────────────────────────┤
  │                             < OK  >                                   │
  └────────────────────────────────────────────────────────────────────────┘

Описание параметров:
LDAP (With LDAP support) — поддержка LDAP;
ADS (With Active Directory support) — поддержка Active Directory (для сети с доменом);
CUPS (With CUPS printing support) — поддержка сервера печати CUPS (принтсервер);
WINBIND (With WinBIND support) — необходимо для Active Directory (для сети с доменом);
SWAT (With SWAT WebGUI) — WebGui, для управления через веб;
ACL_SUPPORT (With ACL support) — поддержка ACL (Access Control List);
AIO_SUPPORT (With Asyncronous IO support) — поддержка возможности асинхронного ввода-вывода;
FAM_SUPPORT (With File Alteration Monitor) — API для мониторинга за состоянием файла или группы файлов/директорий;
SYSLOG (With Syslog support) — поддержка логирования syslog;
QUOTAS (With Disk quota support) — поддержка дисковых квот;
UTMP (With UTMP accounting support) — поддержка уникального идентификатора для каждого вновь подключенного пользователя;
PAM_SMBPASS (With PAM authentication vs passdb backends) — поддержка синхронизации системных пользователей и пользователей samba;
DNSUPDATE (With dynamic DNS update (require ADS)) — поддержка динамического обновления DNS. Необходимо для Active Directory (для сети с доменом);
AVAHI (With Bonjour service discovery support) — технология Apple, представляющая собою протокол автоматического обнаружения сервисов (служб);
PTHREADPOOL (With pthread pool) — особо не вникал что это означает;
EXP_MODULES (With experimental modules) — поддержка експериментальных модулей;
POPT (With system-wide POPT library) — поддержка системной библиотеки анализа командной строки;
IPV6 (With IPv6 support) — поддержка IPv6;
MAX_DEBUG (With maximum debugging) — включение режима максимальной отладки;
SMBTORTURE (With smbtorture) — утилита для стресс-теста.

После установки сохраняем копию дефолтного конфигурационного файла и приступаем к настройке.

cp /usr/local/etc/smb.conf /usr/local/etc/smb.conf.default
Конфигурационный файл samba, находится в /usr/local/etc/smb.conf

#======================= Global Settings =====================================
[global]

# Название рабочей группы
workgroup = WORKGROUP

# server string -комментарий к серверу, который будет виден клиентам.
server string = my.domain.com.ua

# security = user — включаем авторизацию по логину и паролю.
security = user

# hosts allow — разрешить доступ только в указаных подсетях
allow hosts = 10.0.0.,192.168.0., 127., 212.212.212.212, 121.121.121.121

# load printers = no — не показывать принтеры
load printers = no

# log file — файл журнала
log file = /var/log/samba/log.%m

# max log size — максимальный размер журнала
max log size = 500

# local master = no — говорим демону nmbd не пытаться стать
# локальным мастер-браузером. Да и вообще, домена не будет, поэтому
local master = no
domain master = no

# Запрещаем nmbd делать запросы к DNS
dns proxy = no

netbios name = MY2.DOMAIN
netbios aliases = MY
valid users = my_user

#============================ Share Definitions ==============================

[transmission] writeable = yes
write list = my_user
path = /home/transmission/downloads
guest ok = Yes

[share] writeable = yes
user = my_user
path = /home/share
only user = yes
Запускаем samba:

/usr/local/etc/rc.d/samba start
Или перезапускаем, если была запущена (перезапуск необходим после изменения конфигурации)

/usr/local/etc/rc.d/samba start
Проверить, какая в данный момент, загружена конфигурация samba, мы можем командой:

testparm
Осталось создать пользователя для самбы и пароль, которые будут использоваться для доступа к описанные выше расшарам (выполняем от root’a, добавляемый пользователь должен существовать в системе). Для этого у самбы, есть специальная утилита — smbpasswd
Сначала создаем пользователя, а затем активируем его. Делается это так:

smbpasswd -a my_user
New SMB password:
Retype new SMB password:
Вводим пароль для пользователя my_user и подтверждаем его. Теперь переходим к активации.

smbpasswd -e my_user
Enabled user my_user
Вместо ключа можно использовать: -d для отключения пользователя, -x для удаления, -a для добавления. Посмотреть активные подключения:

smbstatus
И напоследок:
1) В фаерволе для samb’ы должны быть открыты порты с 137 по 139.
2) И ещё не забываем про доступ на уровне файловой системы (права доступа к рашарам со стороны пользователей freebsd и их атрибуты). Если вы открываете через samb’у, например, /home/share на запись для пользователя my_user, то этот же пользователь должен иметь права на запись в /home/share во FreeBSD. Как вариант можнораздавать права на уровне конфига samb’ы, а для /home/share установить полное разрешение всем командной:

chmod 0777 /home/share
или же установить на папку права доступа для владельца my_user

chown -R my_user /home/share
Итак необходимый минимум для организации простой расшары, защищенной паролем без доменов и их контроллеров выполнен. Теперь в проводнике, в строке адреса набираем \\192.168.0.254 (свой адрес), вводим имя пользователя и пароль — перед нами все расшаренные папки. Также любую из них можно подключить как сетевой диск, нажав правой кнопкой мыши на Мой компьютер и выбрав подключить сетевой диск. Если что-то не получилось: проверьте конфиг командой testparm, затем убедитесь что прописанный в конфигурации пользователь действительно существует в системе и активирован smbpasswd -a my_user и smbpasswd -e my_user, а также доступны (открыты) ли порты 137 и 139 в фаерволе.

ДОПОЛНЕНО:
Пример правил ipfw для samba для всех (номера правил свои, ip доступа также можно ограничить):

# samba
add 660 allow tcp from any to me 138,139,445 setup keep-state
add 661 pass udp from any 139 to me 139 keep-state