Настройка Samba: файловый сервер для macOS, Windows и телевизора
Как настроить Samba на домашнем сервере: общая папка с паролем вместо гостевого доступа, права и группы, конфиг под Finder и Проводник, корзина для удалённого, отдельная шара под бэкапы Proxmox и разбор ошибок подключения.
Домашний файловый сервер обычно рождается так: поставили Samba, открыли одну папку «чтобы просто работало», без пароля — и через год в ней лежат фотографии, бэкапы сайтов и документы, а доступ к ним есть у каждого устройства в квартире, включая телевизор и телефон гостя, который спросил вай-фай.
Ниже — как сделать нормально: пароли вместо гостя, права, при которых файл от телефона открывается на ноутбуке, конфиг, с которым Finder и Проводник не капризничают, и корзина, чтобы удалённое по сети не исчезало навсегда. Конструктор ниже соберёт команды под ваши имена папок и пользователей.
Конструктор команд: Samba
Выберите задачу и подставьте свои имена — получите готовые команды для файлового сервера в домашней сети.
Чем плоха открытая шара
Гостевой доступ выглядит удобным ровно до первой неприятности. Три довода, почему от него стоит уйти.
Доступ есть у всего, что попало в сеть. Не только у ваших устройств: у телевизора с непонятной прошивкой, у умной лампочки, у ноутбука гостя. Любая из этих железок может быть заражена, а шара без пароля не различает, кто пришёл.
Шифровальщики ищут открытые шары в первую очередь. Заражённый компьютер в сети сканирует соседей, находит папку с правом записи и шифрует всё, до чего дотянулся. Если в той же папке лежат бэкапы, вы теряете и данные, и их копию одним махом.
Ничего не разграничить. Пока доступ общий, нельзя сказать «фильмы всем, а документы только мне». А как только появляются пользователи, это решается одной строкой в конфиге.
Отдельно про SMB1: это протокол тридцатилетней давности, именно через его дыры расходились WannaCry и NotPetya. Windows 11 его по умолчанию уже не поддерживает, macOS тоже. Если старый плеер требует SMB1 — меняйте плеер, а не протокол.
Ставим Samba
sudo apt update && sudo apt install -y samba
smbd -V
sudo systemctl enable --now smbd nmbdВерсия пригодится: часть параметров в конфиге со временем переименовали, и в старых сборках они называются иначе. Если testparm потом скажет Unknown parameter encountered — дело именно в этом, параметр просто игнорируется.
Пользователи: две базы, а не одна
Главная путаница новичков. У Samba своя база паролей, отдельная от системной. Системный пароль в сетевую папку не пустит, а сетевой не подойдёт для входа по SSH.
Поэтому пользователь заводится в два приёма:
sudo useradd -M -s /usr/sbin/nologin nixlife # системная учётка без права входа
sudo smbpasswd -a nixlife # пароль для доступа по сетиКлюч -M не создаёт домашнюю папку, nologin запрещает вход в консоль и по SSH. Для файлов по сети это ничего не ограничивает, зато учётка, которую увели, не даст доступ к самому серверу.
Всех домашних удобно собрать в одну группу — тогда права на общие папки раздаются группе, а не каждому по отдельности:
sudo groupadd -f family
sudo usermod -aG family nixlife
sudo usermod -aG family homeПосмотреть, кто уже заведён в Samba: sudo pdbedit -L. Пустой вывод означает, что пользователей нет вообще и шара работает гостем.
Папки и права: из-за чего чаще всего ломается
Типичная жалоба: «с телефона файл закинул, а с ноутбука его не открыть». Причина всегда в правах и группе.
sudo mkdir -p /srv/share/media
sudo chown -R nixlife:family /srv/share/media
sudo chmod 2775 /srv/share/mediaРазберём права по цифрам:
| Цифра | Что делает |
|---|---|
2 | Бит группы (SGID): новые файлы и папки наследуют группу family, а не личную группу того, кто их создал |
7 | Владелец: чтение, запись, вход в папку |
7 | Группа family: то же самое — так домашние правят файлы друг друга |
5 | Остальные: только чтение и вход |
Та самая 2 в начале и решает проблему «файл с телефона не открывается»: без неё каждый файл достаётся личной группе автора, и остальные остаются за бортом. В конфиге её дополняют create mask = 0664 и directory mask = 0775 — маски задают права для всего, что появляется в шаре по сети.
Для личной папки логика обратная: chmod 700 и владелец без группы — внутрь не попадёт никто, кроме вас.
Конфиг под домашнюю сеть
Файл /etc/samba/smb.conf. Ниже — рабочая основа, которую останется подогнать под свою сеть: подсеть в hosts allow, имя сетевого интерфейса и пути к папкам.
[global]
workgroup = WORKGROUP
server string = Home Server
server role = standalone server
# Только своя сеть. Подсеть смотрим: ip -4 addr | grep inet
hosts allow = 192.168.1.0/24 127.0.0.1
hosts deny = 0.0.0.0/0
interfaces = lo eth0
bind interfaces only = yes
# Вход только по паролю, гостей нет
security = user
map to guest = never
restrict anonymous = 2
# SMB1 выключен
server min protocol = SMB2_10
client min protocol = SMB2_10
smb encrypt = desired
# Ссылками за пределы шары не выйти
follow symlinks = yes
wide links = no
unix extensions = no
use sendfile = yes
strict sync = no
# Сервер виден в «Сети» Windows
local master = yes
preferred master = yes
os level = 65
# macOS: Finder, метки, длинные имена
vfs objects = catia fruit streams_xattr
fruit:metadata = stream
fruit:model = MacSamba
fruit:posix_rename = yes
fruit:veto_appledouble = no
fruit:delete_empty_adfiles = yes
# Служебный мусор в шару не пишем
veto files = /.DS_Store/._*/.Trashes/.Spotlight-V100/desktop.ini/Thumbs.db/
delete veto files = yes
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
[Media]
comment = Общая папка
path = /srv/share/media
browseable = yes
read only = no
valid users = @family
force group = family
create mask = 0664
directory mask = 0775
[Backup]
comment = Личное
path = /srv/share/backup
browseable = no
read only = no
valid users = nixlife
force user = nixlife
create mask = 0600
directory mask = 0700После правок обязательно:
sudo testparm -s # синтаксис и неизвестные параметры
sudo systemctl restart smbd nmbdЧто здесь важнее всего:
hosts allowограничивает доступ вашей подсетью. Даже если порт случайно окажется открыт наружу, чужой адрес отсечётся на уровне Samba.browseable = noу личной шары убирает её из списка. В сети её не видно, но по прямому адресуsmb://адрес/Backupона открывается.valid users = @family— доступ всей группе. Знак@означает именно группу, а не пользователя.veto filesне даёт macOS и Windows засорять папки служебными файлами вроде.DS_StoreиThumbs.db.
macOS, Windows, телевизор
iMac. Подключение — Cmd+K и адрес smb://имя@адрес/Media. Имя пользователя в адресе не случайно: если шара раньше пускала гостем, macOS запомнила тот вход и продолжает ходить гостем, получая отказ. Лечится удалением записи в «Связке ключей» — найдите там адрес сервера и удалите «пароль сетевой». Когда Finder показывает безликое «Не удалось подключиться», настоящую причину покажет Терминал:
smbutil view //имя@192.168.1.10Windows 11. Сервер появляется в разделе «Сеть», но надёжнее подключить диск по адресу:
net use Z: \\192.168.1.10\Media /user:nixlife /persistent:yesЕсли Проводник не видит сервер в списке — это не поломка доступа, а особенности обнаружения устройств в сети. Прямой адрес \\192.168.1.10 работает всегда.
Телевизор, приставка, телефоны. Плееры вроде Kodi и VLC и файловые менеджеры просят адрес smb://192.168.1.10/Media плюс логин с паролем. Заведите для них отдельного пользователя: если приставку однажды придётся отдать или перепрошить, вы отключите одну учётку, а не будете менять пароли всем.
Корзина: удалённое по сети не пропадает
У сетевых папок нет корзины. Файл, удалённый с телефона, исчезает сразу и насовсем. Samba умеет это чинить — добавьте в блок шары:
vfs objects = recycle
recycle:repository = .recycle/%U
recycle:keeptree = yes
recycle:versions = yes
recycle:exclude = *.tmp *.partУдалённое попадает в скрытую папку .recycle внутри шары, у каждого пользователя своя, структура папок сохраняется, одноимённые файлы не затирают друг друга. Чтобы корзина не разрасталась, добавьте уборку раз в неделю:
echo '0 4 * * 0 root find /srv/share/media/.recycle -type f -mtime +30 -delete' | sudo tee /etc/cron.d/samba-recycleSamba в контейнере Proxmox
На домашнем сервере Samba чаще всего живёт в отдельном LXC-контейнере, и это удобнее, чем кажется. С хоста вы попадаете внутрь без всяких паролей:
pct list # находим нужный номер
pct exec 102 -- passwd root # сменить пароль, если забыт
pct exec 102 -- smbpasswd -a nixlifeЗабытый пароль от контейнера — не беда: хост имеет полный доступ к нему, вход по паролю не требуется. С полноценной виртуалкой сложнее, там нужен GRUB и загрузка в init=/bin/bash, либо монтирование её диска с остановленной машины.
Перед любой переделкой сделайте снимок — на тонком томе LVM он занимает место только под изменения:
pct snapshot 102 before-samba-setup
# если что-то пошло не так:
pct rollback 102 before-samba-setupОтдельная шара для бэкапов Proxmox. Частая схема: хранилище типа CIFS смотрит в ту же общую папку, куда ходят все. Тогда дампы виртуальных машин доступны любому устройству в доме — и шифровальщику тоже. Разумнее завести им закрытую шару и отдельного пользователя, а хранилищу выдать его пароль:
pvesm set samba-backup --username pve --password
pvesm statusСразу проверьте pvesm status: если хранилище стало inactive, бэкапы молча перестанут делаться. И держите в уме главное правило: бэкап, который лежит на том же физическом диске, что и оригинал, бэкапом не является — при поломке накопителя пропадёт и то, и другое.
Что чаще всего ломается
| Симптом | Причина и что делать |
|---|---|
NT_STATUS_LOGON_FAILURE | Неверный пароль Samba. Задайте заново: smbpasswd -a имя |
NT_STATUS_ACCESS_DENIED | Пользователь не попал в valid users или не состоит в группе шары |
| Finder пишет «Не удалось подключиться» | Старый гостевой вход в связке ключей. Удалите запись и подключайтесь как smb://имя@адрес |
ss -tlnp показывает только 127.0.0.1 | Сервер слушает сам себя: проверьте interfaces и bind interfaces only |
| Сервер не виден в «Сети», но по адресу открывается | Обнаружение устройств в сети, а не доступ. Работайте по адресу или проверьте local master |
| Файл с телефона не открывается с ноутбука | Нет бита группы: chmod 2775 на папку и маски 0664/0775 в конфиге |
Хранилище Proxmox стало inactive | Шара закрылась паролем, а хранилище ходит гостем. pvesm set ... --username ... --password |
Полезно помнить, где сервер сам рассказывает, что ему не понравилось: /var/log/samba/log.адрес-клиента — отдельный файл на каждого клиента.
Чего делать не стоит
Пробрасывать порты 445 и 139 наружу. Это прямой путь к тому, чтобы ваш файловый сервер нашли сканеры за пару часов. Нужен доступ снаружи — поднимайте VPN до домашней сети, благо в роутерах вроде Keenetic это делается парой галочек.
Возвращать SMB1 ради старого плеера. Дешевле поставить другой плеер.
Держать пароль в /etc/fstab. Файл читают все пользователи системы. Пароль идёт в отдельный файл с правами 600 и подключается через credentials=.
Частые вопросы
Чем Samba отличается от NFS?
Samba говорит на протоколе SMB, который понимают Windows, macOS, телевизоры и телефоны без настройки. NFS быстрее внутри Linux-сети, но за её пределами требует плясок. Для дома, где устройства разношёрстные, Samba практичнее.
Обязательно ли заводить системного пользователя?
Да, Samba опирается на системные учётки для прав на файлы. Но вход в систему такому пользователю можно закрыть через nologin — сетевому доступу это не мешает.
Почему файлы принадлежат nobody?
В конфиге стоит force user = nobody — так работает гостевая схема. После перехода на пользователей уберите эту строку и смените владельца: chown -R имя:family /путь.
Как ограничить скорость или количество подключений?
max connections в блоке шары ограничивает число одновременных сессий. Скорость Samba не режет — это задача роутера или tc.
Можно ли хранить на шаре бэкапы Time Machine?
Можно: нужна отдельная шара с fruit:time machine = yes. Только не на том же диске, где лежат данные, которые она страхует.
Что дальше
Файловый сервер — первый кирпич домашнего сервера. Дальше обычно идут автоматические бэкапы и доступ к файлам снаружи. Если сервер только собираете, начните с установки Ubuntu Server и ручной разметки диска — вторая статья как раз про то, как заранее развести систему и данные по разным томам, чтобы не переезжать потом.
Если статья пригодилась — отметьте, это помогает выбирать темы
Статья помогла?
Комментарии
Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.