Freebsd подключение к сетевым папкам windows

В типичной офисной сети стандартным протоколом совместного использования файлов в сети является общая межсетевая файловая система (Common Internet File Sharing), или CIFS. (Некогда CIFS была известна как блок сообщений сервера (Server Message Block), или SMB.) Это то самое «Сетевое окружение» («Network Neighborhood»), доступ к которому имеют пользователи Windows. Изначально этот протокол поддерживался только операционной системой

smbВ типичной офисной сети стандартным протоколом совместного использования файлов в сети является общая межсетевая файловая система (Common Internet File Sharing), или CIFS. (Некогда CIFS была известна как блок сообщений сервера (Server Message Block), или SMB.) Это то самое «Сетевое окружение» («Network Neighborhood»), доступ к которому имеют пользователи Windows. Изначально этот протокол поддерживался только операционной системой Windows, но позднее он стал чем-то вроде стандарта. К счастью, в настоящее время имеется реализация сервера CIFS с открытыми исходными текстами под названием Samba.

Многие коммерческие продукты предоставляют свои услуги через этот протокол. Система FreeBSD также включает в себя модули ядра, обеспечивающие поддержку файловой системы и программ для поиска, монтирования и использования разделяемых ресурсов CIFS.

Подготовительные операции

Прежде чем использовать сетевую файловую систему компании Microsoft, необходимо собрать следующую информацию о сети Windows:

  • Название рабочей группы или домена
  • Имя пользователя Windows и пароль
  • IP-адрес Windows-сервера DNS

Поддержка в ядре

Поддержка CIFS в операционной системе FreeBSD осуществляется несколькими модулями ядра. Базовые операции CIFS поддерживаются модулем smbfs.ko. Модули libmchain.ko и libiconv.ko предоставляют функции поддержки и загружаются автоматически вместе с модулем smbfs.ko. Вы можете скомпилировать эти модули в ядре статически:

options NETSMB
options LIBMCHAIN
options LIBICONV
options SMBFS

Безусловно, эти модули можно загружать во время загрузки системы, поместив соответствующие записи в файл /boot/loader.conf.

Настройки CIFS могут находиться в конфигурационном файле $НОМЕ/.nsmbrc или /etc/nsmb.conf. Параметры настройки в файле /etc/nsmb.conf имеют приоритет перед настройками, которые размещаются в домашних каталогах. Конфигурационный файл делится на разделы с помощью меток, заключенных в квадратные скобки. Например, настройки, которые применяются к каждому соединению CIFS, находятся в разделе

[default]

. Создайте свои собственные разделы с указанием серверов, пользователей и разделяемых ресурсов в следующих форматах:

[servername]
[servername:username]
[servername:username:sharename]

Информация, которая применяется ко всему серверу, помещается в раздел, который следует сразу за именем сервера. Информация, которая применяется к конкретному пользователю, помещается в раздел с именем этого пользователя, а информация, применяемая к конкретному разделяемому ресурсу, вставляется в раздел, заголовок которого включает имя разделяемого ресурса. Если у вас нет информации, конкретной для каждого пользователя или разделяемого ресурса, тогда все сведения можно поместить в один большой раздел

[servername]

.

В конфигурационных записях используются значения из системы CIFS, например, моя учетная запись во FreeBSD имеет имя mwlucas, а в Windows — lucas_m, поэтому я использую имя lucas_m в файле nsmb.conf.

Ключевые слова в nsmb.conf

Параметры настройки в файле nsmb.conf определяются с помощью ключевых слов и значений в соответствующих разделах. Например, серверы имеют IP-адреса, а пользователи — нет, поэтому параметр, определяющий IP-адрес, должен находиться только в разделе описания сервера. Чтобы использовать ключевое слово, ему нужно присвоить значение через знак равенства: keyword=value. Далее перечисляются наиболее часто употребляемые — полный список можно найти в странице руководства nsmb.conf(5).

workgroup=string

Ключевое слово

workgroup

определяет имя домена Windows или рабочей группы, доступ к которой требуется получить. Это типичная настройка по умолчанию, используемая для всех серверов.

addr=a.b.c.d

Ключевое слово

addr

определяет IP-адрес сервера CIFS. Данное ключевое слово может находиться только в разделе с меткой

[servername]

.

nbns=a.b.c.d

Ключевое слово

nbns

определяет IP-адрес сервера имен NetBIOS (WINS). Вы можете добавить эту строку в раздел по умолчанию или в раздел с конкретным сервером. Если у вас имеется служба ActiveDirectory (которая основана на DNS), можно использовать имена хостов в DNS. Добавление сервера WINS не повредит вашей конфигурации и поможет проверить базовые настройки CIFS.

password=string

Ключевое слово

password

определяет пароль в открытом текстовом виде для пользователя или разделяемого ресурса. Если вам придется хранить пароли в /etc/nsmb.conf, вы должны обеспечить доступность этого файла на чтение только для пользователя root. Хранение паролей в многопользовательских системах в файле $НОМЕ/.nsmbrc вообще недопустимо.

Пароли Windows можно зашифровать с помощью команды

smbutil crypt

. Она сгенерирует строку, которую можно использовать как значение этого ключевого слова. Зашифрованная строка начинается с двух символов доллара ($$). Шифрование предотвращает случайное раскрытие пароля, но злонамеренный пользователь легко может расшифровать его.

Разрешение имен CIFS

Давайте создадим типичный файл nsmb.conf. Для начала нам необходимо как минимум иметь возможность находить хосты в сети, а это означает, что нам необходимо знать имя рабочей группы. У нас имеется контроллер домена в виде сервера WINS. Кроме того, у меня имеется учетная запись на серверах Windows, предоставляющих доступ к разделяемым ресурсам, поэтому я буду использовать их как настройки по умолчанию в nsmb.conf.

[default]
workgroup=BIGLOSER
nbns=192.168.1.66
username=unix

Взяв эту информацию на вооружение, мы сможем производить базовые запросы на получение имен SMB.

# smbutil lookup ntserv1

Got response from 192.168.1.66
IP address of ntserv1: 192.168.1.4

Если все получилось, значит в вашем распоряжении имеется базовая функциональность CIFS.

Прочие функции smbutil(1)

Прежде чем можно будет монтировать разделяемые ресурсы Windows, необходимо иметь возможность зарегистрироваться на компьютере Windows. Эта операция доступна только пользователю root.

# smbutil login //unix@ntserv1

Password:

Итак, наша конфигурация правильная. Давайте с помощью команды

smbutil view

посмотрим, какие ресурсы предлагает этот сервер.

# smbutil view //unix@ntserv1

Password:
Share







Type






Comment

——————————-
IPC$










pipe






Remote IPC

ADMIN$







disk






Remote Admin

C$











disk






Default share

unix






disk
4 shares listed from 4 available

Вы получите список всех разделяемых ресурсов на сервере CIFS. Теперь предположим, что мы завершили работу с сервером, и выходим из него.

# smbutil logout //unix@ntserv1

Монтирование разделяемого ресурса

Теперь, закончив исследования, можно выполнить монтирование ресурса с помощью mount_smbfs(8). Эта команда имеет следующий синтаксис:

# mount_smbfs //username@servername/share /mount/point

У меня имеется разделяемый ресурс МРЗ на компьютере, работающем под управлением Windows, к которому я хочу получить доступ из системы FreeBSD. Чтобы смонтировать его в каталог /home/mwlucas/smbmount, я мог бы запустить следующую команду:

# mount_smbfs //unix@ntserv1/MP3 /home/mwlucas/smbmount

mount(8) и df(1) показывают, что этот ресурс подключен к системе и теперь можно обращаться к документам на этом сервере, как к файлам в любой другой файловой системе.

Другие параметры mount_smbfs

Утилита mount_smbfs поддерживает несколько ключей, влияющих на поведение монтируемых файловых систем CIFS. Ключ

-f

используется для выбора другого режима назначения прав доступа к файлам, а ключ

-d

— для выбора другого режима назначения прав доступа к каталогам. Например, чтобы определить права доступа к монтируемому каталогу, которые позволят обращаться к нему только мне, я мог бы запустить команду

mount_smbfs -d 700

. Это позволило бы сделать права доступа из системы FreeBSD более строгими, чем привилегии в Windows, и в моем случае это было бы именно то, что нужно. Владельца файла можно изменить с помощью ключа

-u

, а группу — с помощью ключа

-g

Имена файлов в файловых системах корпорации Microsoft не чувствительны к регистру символов, а в системах UNIX — наоборот. Файловая система CIFS по умолчанию оставляет регистр символов в именах файлов без изменений, но это может оказаться нежелательно. Ключ

-c

вынуждает mount_smbfs(8) менять регистр символов в именах файлов и каталогов:

-c l

изменяет регистр всех символов на нижний, а

-c u

на верхний.

Примеры записей в nsmb.conf

Ниже приводятся примеры записей в файле nsmb.conf для различных ситуаций. В этих примерах предполагается, что все представленные записи являются частью конфигурации, в которой уже определены рабочая группа, сервер имен NetBIOS и имя пользователя с привилегиями доступа к разделяемым ресурсам CIFS.

Уникальный пароль на отдельной системе

Если предположить, что имеется некоторый компьютер с сетевым именем desktop, на котором открыт разделяемый ресурс, защищенный паролем, то можно использовать запись, аналогичную приведенной ниже. Многие системы Windows 9x используют такую возможность.

[desktop:shareusername]
password=$$1789324874ea87

Доступ ко второму домену

В этом примере описывается доступ ко второму домену с именем development. В этом домене используются имя пользователя и пароль, которые отличаются от тех, что используются в домене по умолчанию.

[development]
workgroup=development
username=support

Принадлежность файлов в CIFS

Различия в определении принадлежности файлов в UNIX-подобных операционных системах и в Windows могут порождать проблемы. Начнем с того, что имена пользователей FreeBSD, возможно, не получится отобразить в имена пользователей Windows, а кроме того, в UNIX и в Windows используются совершенно непохожие схемы назначения прав доступа.

Если в Windows вы используете отдельную учетную запись для доступа к разделяемому ресурсу, вы обладаете теми правами доступа, которые имеет эта учетная запись в Windows, однако в FreeBSD для этого монтируемого ресурса вам необходимо назначить права доступа, используемые системой FreeBSD. По умолчанию утилита mount_smbfs(8) определяет те же самые права доступа для нового разделяемого ресурса, какие указаны для точки монтирования. В предыдущем примере владельцем каталога /home/mwlucas/smbmount был пользователь mwlucas, а для каталога были определены права 755. Эти права доступа говорят, что пользователь mwlucas обладает возможностью редактировать все, что находится в этом каталоге, но все остальные лишены такого права. Но даже когда FreeBSD позволяет данному пользователю редактирование указанных файлов, Windows может не позволить ему изменять файлы, находящиеся на разделяемом ресурсе.

Статья описывает настройку подключения к папкам общего доступа Windows Server в консоли FreeBSD.

Задача следующая: на машине Windows Server с IP-адресом 192.168.1.251 есть общая папка Files, её необходимо примонтировать на машину с FreeBSD в /mnt/backup, а также монтировать каждый раз при загрузке системы.

Все действия выполняются пользователем root.

Создадим папку /mnt/backup:

# mkdir /mnt/backup

и примонтируем к ней папку общего доступа Files:

# mount_smbfs -I 192.168.1.251 //gooduser@SERVER/Files /mnt/backup
  • 192.168.1.251 — IP-адрес сервера
  • gooduser — имя пользователя на сервере
  • SERVER — NetBIOS-имя сервера
  • Files — папка общего доступа на сервере Windows Server
  • /mnt/backup — точка монтирования папки общего доступа

Система попросит ввести пароль пользователя gooduser. Вводим. После этого мы сможем видеть файлы и папки, находящиеся на сервере, в папке Files.

Чтобы размонтировать, вводим команду:

# umount /mnt/backup

Открываем файл /etc/nsmb.conf

# vi /etc/nsmb.conf

и в самом конце допишем следующие строчки:

[SERVER:GOODUSER]
password=sOMePaS$woRD
  • SERVER — NETBIOS-имя сервера (только заглавные буквы)
  • GOODUSER — имя пользователя на сервере (только заглавные буквы)

После этого открываем файл /etc/fstab

# vi /etc/fstab

и в самом конце допишем:

//gooduser@SERVER/Files   /mnt/backup     smbfs   rw,-I192.168.1.251      0      0

Перезагружаем машину:

# shutdown -r now

и проверяем.

После перезагрузки папка общего доступа Files должна автоматически монтироваться в /mnt/backup.

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

Обновлено и опубликовано Опубликовано: 06.10.2016

Что такое CIFS простыми словами.

Монтирование выполняется простой командой:

# mount_smbfs //username@192.168.0.20/cifs_share /mnt/

* данная команда примонтирует общую папку cifs_share на сервере с IP 192.168.0.20 в каталог /mnt от учетной записи username.

После ввода система запросит пароль для учетной записи username. Если для подключения к серверу пароль не требуется, имя учетной записи можно не использовать, а при запросе пароля просто нажать Enter.

Монтирование без запроса пароля

Для этого нужно сохранить хэш-пароль и настроить систему на его использование.

Сначала сгенерируем хэш для пароля пользователя:

# smbutil crypt

* после нажатия Enter, будет запрошен пароль. Вводим тот, под которым идет подключение к серверу.

Теперь открываем на редактирование следующий файл:

# ee /etc/nsmb.conf

и в самый низ добавляем следующее:

[SERVER:USERNAME]
password=$$1725b710d76322b1f

* в данном примере, SERVER — имя сервера с CIFS; USERNAME — учетная запись, под которой идет подключение; $$1725b710d76322b1f — хэш, который мы получили командой smbutil.

Автоматическое монтирование CIFS через fstab

Открываем на редактирование fstab:

# ee /etc/fstab

и добавляем в него следующее:

//192.168.0.20/cifs_share  /mnt/   smbfs    rw,-U=username      2       2

Чтобы проверить, работает ли настройка, вводим команду:

# mount -a

и смотрим, появился ли примонтированный диск:

# df -h

Распространенные ошибки

mount_smbfs: can’t get server address: syserr = Operation timed out

Причина: утилита не может найти хост по NetBIOS имени.

Решение: использовать параметр -I:

# mount_smbfs -I 192.168.0.20 //username@192.168.0.20/cifs_share /mnt/

Дмитрий Моск — частный мастер

Была ли полезна вам эта инструкция?

Да            Нет

If you use FreeBSD/Illumos/Linux (or other UNIX/Unix-like system) there is big chance that you do not like – to say the least – the Windows world, but sometimes there is need to share some files with the Windows world. This is where Samba project comes handy. Today I would like to share minimalistic and simple Samba configuration and also a way to access SMB/CIFS shares from a FreeBSD machine.

samba_logo.png

On the naming side CIFS (Common Internet File System) is just particular version/dialect of the SMB (Server Message Block) protocol.

As usual I will use FreeBSD as a server. For the setup I used FreeBSD 12.0-RELEASE virtual machine image available from the project location:

  • https://download.freebsd.org/ftp/releases/VM-IMAGES/12.0-RELEASE/

There are several formats available – qcow2/raw/vhd/vmdk – but as I will be using VirtualBox I used the VMDK one.

The main FreeBSD configuration file on the server can be as small and simple as the one bellow.

# cat /etc/rc.conf
hostname="samba"
ifconfig_em0="inet 10.0.10.40/24"
defaultrouter="10.0.10.1"
sshd_enable="YES"

You of course do not need SSH to server SMB/CIFS shares with Samba.

Serve SMB/CIFS Share on FreeBSD with Samba

There are several versions of Samba available on FreeBSD, but if you do not have exact reason to use the older version then just go ahead with the latest one.

# pkg search samba
p5-Samba-LDAP-0.05_2           Manage a Samba PDC with an LDAP Backend
p5-Samba-SIDhelper-0.0.0_3     Create SIDs based on G/UIDs
samba-nsupdate-9.13.3_1        nsupdate utility with GSS-TSIG support
samba46-4.6.16_1               Free SMB/CIFS and AD/DC server and client for Unix
samba47-4.7.12                 Free SMB/CIFS and AD/DC server and client for Unix
samba48-4.8.7                  Free SMB/CIFS and AD/DC server and client for Unix

First You will need to add Samba package.

# pkg install samba48

Then we need to create configuration file for Samba. I will assume here that you would like to share two things as examples. The /data directory with write permissions only to my vermaden user and also my home directory /home/vermaden with read permissions for me and all people on my vermaden group. The so called public read is disabled entirely. Only after passing user and password the access will be possible to these shares. I also added several performance related options. Below is the /usr/local/etc/smb4.conf configuration file.

# cat /usr/local/etc/smb4.conf
[global]
workgroup          = workgroup
netbios name       = smb
server string      = samba
security           = user
max smbd processes = 3
encrypt passwords  = yes
socket options     = TCP_NODELAY IPTOS_LOWDELAY IPTOS_THROUGHPUT SO_KEEPALIVE SO_RCVBUF=65536 SO_SNDBUF=65536
aio read size      = 16384
aio write size     = 16384
strict locking     = no
strict sync        = no

# DISABLE PRINTING
load printers           = no
disable spoolss         = yes
show add printer wizard = no

[data]
  path       = /data
  public     = no
  writable   = yes
  browsable  = no
  write list = vermaden

[vermaden]
  path       = /home/vermaden
  public     = no
  writable   = no
  browsable  = no
  write list = @vermaden

We will also need vermaden user, let’s create one with pw(8) command.

First the vermaden group with GID of 1000. The -N flag just shows what will be done instead of doing actual changes to the system. Let’s try that and then execute the command without the -N flag to actually add the group.

# pw groupadd -n vermaden -g 1000 -N
vermaden:*:1000:
# pw groupadd -n vermaden -g 1000
# pw groupshow vermaden
vermaden:*:1000:

As we have the group its time to create vermaden user with UID of 1000. Like with group let’s first try with -N flag to check what will be made.

# pw useradd -n vermaden -c '' -u 1000 -g 1000 -m -N
vermaden:*:1000:1000::0:0::/home/vermaden:/bin/sh
# pw useradd -n vermaden -c '' -u 1000 -g 1000 -m
# pw usershow vermaden
vermaden:*:1000:1000::0:0::/home/vermaden:/bin/sh

Let’s verify our vermaden user again.

# id vermaden
uid=1000(vermaden) gid=1000(vermaden) groups=1000(vermaden)
# su - vermaden
By pressing "Scroll Lock" you can use the arrow keys to scroll backward
through the console output.  Press "Scroll Lock" again to turn it off.
Don't have a "Scroll Lock" key? The "Pause / Break" key acts alike.

Now let’s create password for this new vermaden user.

# passwd vermaden
Changing local password for vermaden
New Password:
Retype New Password:

Now we need to add the vermaden user with pdbedit command from the Samba package.

# which pdbedit
/usr/local/bin/pdbedit

# pkg which `which pdbedit`
/usr/local/bin/pdbedit was installed by package samba48-4.8.7

# pdbedit -a -u vermaden
new password:
retype new password:
Unix username:        vermaden
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-1751207453-560213463-1759912891-1000
Primary Group SID:    S-1-5-21-1751207453-560213463-1759912891-513
Full Name:
Home Directory:       \smbvermaden
HomeDir Drive:
Logon Script:
Profile Path:         \smbvermadenprofile
Domain:               SMB
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          9223372036854775807 seconds since the Epoch
Kickoff time:         9223372036854775807 seconds since the Epoch
Password last set:    Fri, 21 Dec 2018 16:49:29 UTC
Password can change:  Fri, 21 Dec 2018 16:49:29 UTC
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

To list all users with the pdbedit command use the -L argument.

# pdbedit -L
vermaden:1000:

We now need to add Samba to the FreeBSD system services automatic startup.

# sysrc samba_server_enable=YES
samba_server_enable:  -> YES

# sysrc samba_server_enable
samba_server_enable: YES

# cat /etc/rc.conf
hostname="samba"
ifconfig_em0="inet 10.0.10.40/24"
defaultrouter="10.0.10.1"
sshd_enable="YES"
samba_server_enable="YES"

Now we can start the Samba service.

# service samba_server start
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.

Let’s check which Samba daemons listen on which ports.

# sockstat -l -4
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     smbd       599   33 tcp4   *:445                 *:*
root     smbd       599   34 tcp4   *:139                 *:*
root     nmbd       595   15 udp4   *:137                 *:*
root     nmbd       595   16 udp4   *:138                 *:*
(...)

Now let’s try to access the /data share from the Windows system.

Open explorer.exe on Windows machine and type //smb/data into location field and then type smbvermaden as username.

bsd-share-01

You should be able to access the share now as shown below.

bsd-share-02

Let’s put some text into that test.txt file.

bsd-share-03.png

Let’s verify that it works on the FreeBSD side.

# cat /data/test.txt
Input from Windows.

So we are able to access/modify files from FreeBSD machine on the Windows world.

Access SMB/CIFS Share from FreeBSD

Let’s try the other way around.

By default there are several shares already served on Windows.

C:>net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
C$           C:                             Default share
IPC$                                         Remote IPC
ADMIN$       C:Windows                      Remote Admin
Users        C:Users
The command completed successfully.


C:>

You can share a directory from Windows by using graphical interface as shown below.

win-share-01

… or by using CLI interface within cmd.exe interpreter with net commands.

win-share-02

win-share-03

win-share-04

The test share is now exported for vuser user with FULL access rights which means read/write in the Windows world.

Here are the same commands in text so you may copy/paste them as needed.

C:Windowssystem32>cd 

C:>mkdir asd

C:>net share test=C:asd /grant:vuser,FULL
test was shared successfully.


C:>net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
C$           C:                             Default share
IPC$                                         Remote IPC
ADMIN$       C:Windows                      Remote Admin
test         C:asd
Users        C:Users
The command completed successfully.


C:>

Let’s try to mount it using the mount_smbfs command on FreeBSD system. The 10.0.10.4 address is the IP of the Windows machine.

# mount_smbfs -I 10.0.10.4 //vuser@vbox/test /mnt
Password:
#

# mount
/dev/gpt/rootfs on / (ufs, local, soft-updates)
devfs on /dev (devfs, local, multilabel)
//VUSER@VBOX/TEST on /mnt (smbfs)

It also works the other way.

After your job is done you may remove the test share also with net command as shown below.

win-share-05.png

… and also the same commands in text so you may copy/paste them as needed.

C:>net share test /delete
test was deleted successfully.


C:>net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
C$           C:                             Default share
IPC$                                         Remote IPC
ADMIN$       C:Windows                      Remote Admin
Users        C:Users
The command completed successfully.


C:>

This sentence concludes this article 😉

UPDATE 1

The SMB/CIFS on FreeBSD article was featured in the BSD Now 279 – Future of ZFS episode.

Thanks for mentioning!

EOF

What I am trying to accomplish:

  • I have (at home) a PC with Windows 7 installed
  • I would like to run a Unix in Virtual Box, because I am more used to developing / scripting on it

I settled on Freebsd at the moment, and I managed to install it and configure the network. The next step is sharing a folder from Windows to Freebsd so that I can easily edit files on Windows and on Freebsd both. Unfortunately it seems a though thing to do.

I rummaged on the net and found two different ways:

  • mounting a vboxsf
  • using samba

I installed the guest additions in freebsd using pkg_add -r virtualbox-ose-additions, the install proceeded switfly enough, and I edited /etc/rc.conf to add the two suggested lines: vboxguest_enable="YES" and vboxservice_enable="YES" and rebooted.

It did not work. The command to mount the system ends up in an error:

# mount -t vboxsf shared /home/myuser/shared
mount: shared : Operation not supported by device

where shared is the name of the folder I setup in my virtual box settings for this VM.

Is it actually possible to use a vboxsf filesystem type in freebsd ? Some comments seem to suggest it is not supported but finding up-to-date information is difficult.

Next, I moved on to the samba approach. I basically followed the guide I linked it. Unfortunately it ends up with:

# mount_smbfs -N -I 192.168.56.1 //winuser@winmachinename/Shared /mnt/shared
mount_smbfs: unable to open connection: syserr = RPC struct is bad

where Shared is the name of the shared folder I configured with windows, accessible to the winuser obviously. The ping works.

I would like to note that I have no password on the windows guest account I am trying to connect at, it seemed easier, but perhaps that it’s bothering samba somehow.

edit: working from PuTTY I had not seen that some messages were printed in the console:

smb_maperror: Unmapped error 3:31
smb_co_lock: recursive lock for object 1

both appear several times. /end of edit

If the direct filesytem sharing does not work, any idea how to get samba to do it ? The article suggest it’s already be done by some at least.

Technical information:

  • Host: Windows 7 Familial Edition (up-to-date)
  • Guest: FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:15:25 UTC 2012 root@obrian.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
  • Virtual Box: 4.1.16 r78094

I am open to new suggestions to sharing as well. I would if possible prefer avoiding transferring files back and forth: it’s not particularly efficient and always a source of confusing errors.

I am also open to changing systems. I like the philosophy of freebsd, but if it does not work, I have no qualms about moving to a linux.

EDIT:

This question is now purely of theoretical interest. I switch to using Ubuntu Server and managed to set it up without samba since vboxsf is well supported.

Like this post? Please share to your friends:
  • Free windows hyper v server 2019 скачать
  • Free windows cleaner for windows 10
  • Free windows activation key for windows 10
  • Free windows 7 game free download
  • Free windows 7 bluetooth software windows