Продовжуємо налаштовувати домашній NAS на FreeBSD.
Власне, NAS – Network System, і хочеться мати до нього доступ з інших девайсів – з Linux та Windows хостів, з телефонів, телевізорів.
Тут у нас на вибір дві основні опції – Samba та NFS. Можна, звісно, згадати і sshfs – але це рішення точно не для домашньої мережі (хоча простіше).
Я для себе вирішив для Windows (на ігровому ПК), Android телефонів та Android TV зробити доступ з Samba share – а NFS буде чисто для Linux систем для бекапів.
В цьому пості налаштуємо Samba на FreeBSD, а в наступному – додамо NFS.
Попередні пости цієї серії:
- FreeBSD: Home NAS, part 1 – налаштування ZFS mirror (RAID1) (тест на віртуальній машині)
- FreeBSD: Home NAS, part 2 – знайомство з Packet Filter (PF) firewall
- FreeBSD: Home NAS, part 3 – WireGuard VPN, Linux peer та routing
- FreeBSD: Home NAS, part 4 – локальний DNS з Unbound
- FreeBSD: Home NAS, part 5 – ZFS pool, datasets, snapshots та моніторинг
- (current) FreeBSD: Home NAS, part 6 – Samba server та підключення клієнтів
- (далі буде)
UPD: випадково нагуглив свій власний пост за 2012 рік – FreeBSD: установка и быстрая настройка сервера SAMBA… Зовсім забув, що колись вже це робив.
Зміст
Установка Samba
Для Samba share створимо окремий ZFS dataset:
root@setevoy-nas:/home/setevoy # zfs create nas/share
Перевіряємо його:
root@setevoy-nas:/home/setevoy # zfs list nas/share NAME USED AVAIL REFER MOUNTPOINT nas/share 96K 3.51T 96K /nas/share
Права доступу зараз – root:wheel:
root@setevoy-nas:/home/setevoy # ls -ld /nas/share drwxr-xr-x 2 root wheel 2 Dec 26 15:46 /nas/share
Додаємо в систему нову групу:
root@setevoy-nas:/home/setevoy # pw groupadd smbshare
Додаємо нового юзера:
root@setevoy-nas:/home/setevoy # pw useradd smbshare -s /usr/sbin/nologin -g smbshare
Тут:
- без домашньої директорії
- без можливості логіна в систему –
/usr/sbin/nologin- але якщо планується виконувати локальні операції від юзера – то створюємо з
-s /bin/sh, а SSH все одно буде заблокований вsshdconfig (про SSH буде окремим постом)
- але якщо планується виконувати локальні операції від юзера – то створюємо з
- і з
-g smbshareвказуємо primary group
Перевіряємо юзера:
root@setevoy-nas:/home/setevoy # id smbshare uid=1004(smbshare) gid=1004(smbshare) groups=1004(smbshare)
Міняємо права доступу на директорію для Samba:
root@setevoy-nas:/home/setevoy # chown smbshare:smbshare /nas/share
І права доступу до каталога тепер – можна глянути розширену інформацію з getfacl, аби отримати POSIX/NFSv4 ACL, які ZFS використовує замість класичних Unix-бітів:
root@setevoy-nas:/home/setevoy # getfacl /nas/share
# file: /nas/share
# owner: smbshare
# group: smbshare
owner@:rwxp--aARWcCos:-------:allow
group@:rwxp--a-R-c--s:-------:allow
everyone@:------a-R-c--s:-------:allow
Тут для owner заданий повний доступ:
r: read data / list dirw: write data / create filex: execute / traversep: appenda: write ACLA: read ACLR: read attributesW: write attributesc: read named attributesC: write named attributeso: read ownerships: write ownership
Налаштування ZFS ACL
Samba буде встановлювати власні права доступу, тому в параметрах ZFS ACL треба переключити режими.
Samba керує правами доступу самостійно, тому для ZFS ACL потрібно увімкнути режими passthrough, щоб ZFS не змінював ACL.
Перевіряємо параметри датасету зараз:
root@setevoy-nas:/home/setevoy # zfs get acltype,aclmode,aclinherit nas/share NAME PROPERTY VALUE SOURCE nas/share acltype nfsv4 default nas/share aclmode discard default nas/share aclinherit restricted default
Задаємо aclmode та aclinherit в значення passthrough – тоді ZFS буде використовувати ті права, які задає Samba:
root@setevoy-nas:/home/setevoy # zfs set aclmode=passthrough nas/share root@setevoy-nas:/home/setevoy # zfs set aclinherit=passthrough nas/share
Перевіряємо тепер:
root@setevoy-nas:/home/setevoy # zfs get acltype,aclmode,aclinherit nas/share NAME PROPERTY VALUE SOURCE nas/share acltype nfsv4 default nas/share aclmode passthrough local nas/share aclinherit passthrough local
На відміну від acltype=off, який повністю вимикає ACL і залишає лише POSIX-права, режим passthrough дозволяє Samba керувати ACL без втручання ZFS.
Надалі зміни в директорії /nas/share краще виконувати від імені smbshare або root, а не звичайного користувача, щоб не порушувати модель прав доступу Samba.
Samba – налаштування загального доступу
Встановлюємо стабільну для FreeBSD версію 4.16:
root@setevoy-nas:~ # pkg install samba416
Додаємо до /etc/rc.conf:
root@setevoy-nas:~ # sysrc samba_server_enable=YES samba_server_enable: -> YES
Створюємо файл /usr/local/etc/smb4.conf з мінімальним конфігом:
[global] workgroup = WORKGROUP security = user [shared] path = /nas/share read only = no
Тут:
workgroup: задаємо дефолтнеWORKGROUP, тоді не треба буде вказувати на клієнтахsecurity = user: аутентифікацію та перевірку прав доступів виконує сама Samba[shared]: ім’я шари (share name), яке потім будемо використовувати для підключеньpath = /nas/share: реальний шлях на сервері
Див. smb4.conf.
Або більше детально, просто явно вказуємо деякі дефолтні опції:
[global] workgroup = WORKGROUP security = user [shared] path = /nas/share read only = no browseable = yes valid users = @smbshare create mask = 0660 directory mask = 2770
Перевіряємо синтаксис:
root@setevoy-nas:/home/setevoy # testparm
Load smb config files from /usr/local/etc/smb4.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
security = USER
idmap config * : backend = tdb
[shared]
create mask = 0660
directory mask = 02770
path = /nas/share
read only = No
valid users = @smbshare
Додаємо Samba-юзера:
root@setevoy-nas:/home/setevoy # smbpasswd -a smbshare New SMB password: Retype new SMB password: Added user smbshare.
smbpasswd збереже його пароль в /var/db/samba4/private/passdb.tdb.
Запускаємо сервіс:
root@setevoy-nas:~ # service samba_server start Performing sanity check on Samba configuration: OK Starting nmbd. Starting smbd.
Перевіряємо порт:
root@setevoy-nas:/home/setevoy # sockstat -4 | grep smb root smbd 17621 31 tcp4 *:445 *:* root smbd 17621 32 tcp4 *:139 *:*
Пробуємо підключитись локально:
root@setevoy-nas:/home/setevoy # smbclient //localhost/shared -U smbshare Password for [WORKGROUP\smbshare]: Try "help" to get a list of possible commands. smb: \>
Робимо list files – поки тут пусто:
smb: \> ls
. D 0 Fri Dec 26 15:46:55 2025
.. D 0 Fri Dec 26 15:46:55 2025
3771191492 blocks of size 1024. 3771191396 blocks available
Копіюємо щось із системи:
smb: \> put /etc/hosts hosts.test
putting file /etc/hosts as \hosts.test (252.7 kb/s) (average 252.7 kb/s)
smb: \> ls hosts.test
hosts.test A 1035 Fri Dec 26 16:14:29 2025
3771191480 blocks of size 1024. 3771191380 blocks available
І тепер маємо файл в /nas/share:
root@setevoy-nas:/home/setevoy # ls -l /nas/share total 5 -rw-rw---- 1 smbshare smbshare 1035 Dec 26 16:14 hosts.test
Відкриваємо доступ до Samba на pf firewall (див. FreeBSD: Home NAS, part 2 – знайомство з Packet Filter (PF) firewall):
...
### SMB
pass in on em0 proto tcp from { 192.168.0.0/24, 192.168.100.0/24, 10.8.0.0/24 } to any port 445 keep state
...
Перевіряємо конфіг pf, виконуємо reload:
root@setevoy-nas:/home/setevoy # pfctl -vnf /etc/pf.conf && service pf reload
Arch Linux та Samba share
Встановлюємо пакети:
[setevoy@setevoy-work ~] $ sudo pacman -S smbclient cifs-utils
smbclient: Samba CLIcifs-utils: утиліти для роботи з Samba share через CIFS:mount -t cifs- запису в
/etc/fstab systemd automount
Перевіряємо підключення з Linux до Samba на FreeBSD:
[setevoy@setevoy-work ~] $ smbclient //192.168.0.2/shared -U smbshare Can't load /etc/samba/smb.conf - run testparm to debug it Password for [WORKGROUP\smbshare]: Try "help" to get a list of possible commands. smb: \>
Ще раз list – все на місці:
smb: \> ls hosts.test
hosts.test A 1035 Fri Dec 26 16:14:29 2025
3771191480 blocks of size 1024. 3771191380 blocks available
Налаштування /etc/fstab та systemd-automount
Якщо хочемо, аби шара підключалась автоматично – налаштуємо /etc/fstab та systemd-automount.
На клієнті створюємо каталог, в який буде підключатись /nas/share з серверу:
[setevoy@setevoy-work ~] $ sudo mkdir -p /mnt/nas-shared
Створюємо файл /root/.smbcredentials з логіном та паролем:
username=smbshare password=<PASSWORD>
Задаємо доступ тільки для root:
[setevoy@setevoy-work ~] $ sudo chmod 600 /root/.smbcredentials
Отримуємо user id:
[setevoy@setevoy-work ~] $ id setevoy uid=1000(setevoy) gid=1000(setevoy) groups=1000(setevoy),998(wheel),964(ollama),962(docker)
Редагуємо /etc/fstab:
... # NAS Samba share //192.168.0.2/shared /mnt/nas-shared cifs credentials=/root/.smbcredentials,iocharset=utf8,uid=1000,gid=1000,nofail,_netdev,noauto,x-systemd.automount,serverino,noperm 0 0
Тут:
192.168.0.2/shared: адреса хоста та ім’я шари з/usr/local/etc/smb4.conf/mnt/nas-shared: куди монтуємо локальноcifs: ти файлової системиcredentials=/root/.smbcredentials: де брати логін та парольiocharset=utf8: використовувати UTF-8 для імен файлів (коректні кирилиця та спецсимволи).uid=1000: файли на клієнті відображаються як власність користувача з UID 1000 (робилиid setevoyвище)gid=1000: файли відображаються з групою GID 1000nofail: система завантажиться навіть якщо ресурс недоступний (must have для мережевих систем)_netdev: мережевий ресурс, монтується після підняття мережіnoauto: не монтувати автоматично під час bootx-systemd.automount: монтувати автоматично при першому доступі через systemd-unit (див. далі)serverino: використовувати inode-номери сервераnoperm: ігнорувати локальну перевірку прав доступу, покладаючись на сервер (Samba)
Зберігаємо зміни, виконуємо sudo systemctl daemon-reload, і тепер у нас є два нових файли в /run/systemd/generator/:
[setevoy@setevoy-work ~] $ ll /run/systemd/generator/ | grep share -rw-r--r-- 1 root root 176 Dec 27 07:41 mnt-nas\x2dshared.automount -rw-r--r-- 1 root root 342 Dec 27 07:41 mnt-nas\x2dshared.mount
Через файл mnt-nas\x2dshared.automount systemd відстежує доступ до /mnt/nas-shared, і як тільки ми виконаємо якусь дію (наприклад, cd /mnt/nas-shared) – systemd виконає mnt-nas\x2dshared.mount, який власне підключить розділ.
Див. systemd.automount та Understanding systemd Automounts: Why /dev/sda1 Becomes systemd-1 and How to Tame It.
Перевіряємо:
[setevoy@setevoy-work ~] $ ls -l /mnt/nas-shared/ total 10626126 -rwxr-xr-x 1 setevoy setevoy 1359900672 Dec 26 17:03 FreeBSD-15.0-RELEASE-amd64-disc1.iso -rwxr-xr-x 1 setevoy setevoy 9817684824 Dec 26 14:35 'Odin.doma.(1990).BDRip.1080p.[envy].[60fps].mkv' -rwxr-xr-x 1 setevoy setevoy 1035 Dec 26 16:14 hosts.test
І тепер каталог є в mounted:
[setevoy@setevoy-work ~] $ findmnt /mnt/nas-shared
TARGET SOURCE FSTYPE OPTIONS
/mnt/nas-shared systemd-1
autofs rw,relatime,fd=94,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=17332707
/mnt/nas-shared //192.168.0.2/shared
cifs rw,relatime,vers=3.1.1,cache=strict,upcall_target=app,username=smbshare,uid=1000,forceuid,gid=1000,forcegid,addr=192.168.0.2,file_mode=0755,dir_mode=0755,iocharset=utf
Перевірка швидкості запису
Робив, аби порівняти з NFS – різниці не побачив, але нехай тут буде приклад.
Самий надійний варіант – копіювати з dd, додавши oflag=direct та status=progress:
$ dd if=Downloads/FreeBSD-15.0-RELEASE-amd64-disc1.iso of=/mnt/nas-shared/FreeBSD-15.0-RELEASE-amd64-disc1.iso bs=16M oflag=direct status=progress 1325400064 bytes (1.3 GB, 1.2 GiB) copied, 23 s, 57.5 MB/s1359900672 bytes (1.4 GB, 1.3 GiB) copied, 23.5906 s, 57.6 MB/s 81+1 records in 81+1 records out 1359900672 bytes (1.4 GB, 1.3 GiB) copied, 23.7558 s, 57.2 MB/s
57.2 MB/s, тобто 457.6 Mbit/s. При тому, що ноут зараз на WiFi – цілком нормальна швидкість.
Підключення Samba клієнтів
І приклади того, як до Samba підключитись з різних девайсів.
Samba та KDE Dolphin
Взагалі, ми вже зробили automount через systemd, але можна відкрити напряму з KDE Dolphin file manager – вказуємо адресу smb://192.168.0.2, вводимо логін-пароль:
І маємо доступ до файлів на сервері:
Samba та Android phone
Спробував Solid Explorer File Manager – простий, все працює.
Додаємо в ньому нове підключення LAN/SMB:
Вказуємо адресу та порт сервера:
Вибираємо аутентифікацію по логіну-паролю:
Вказуємо їх:
Підтверджуємо:
І підключаємось:
Файли на сервері тепер доступні з телефону:
Samba та Android TV
Доступ з File Manager
Для Android TV є додаток File Manager, встановлюємо:
Вибираємо новий location, тип Remote:
Вибираємо тип SMB:
Вказуємо тільки адресу, без порта, логін та пароль:
І тепер файли доступі з телевізора:
Відео-файли можна запускати прямо звідси – або налаштувати MX Player.
Доступ з MX Player
Аналогічно – встановлюємо додаток, відкриваємо налатування, вибираємо Local network:
Вказуємо IP, логін, пароль:
І маємо доступ до відеофайлів:
Готово.
















