Технологии #Samba #Linux #Сервер #Ubuntu #macOS

Настройка Samba: файловый сервер для macOS, Windows и телевизора

Как настроить Samba на домашнем сервере: общая папка с паролем вместо гостевого доступа, права и группы, конфиг под Finder и Проводник, корзина для удалённого, отдельная шара под бэкапы Proxmox и разбор ошибок подключения.

12 минут 2

Домашний файловый сервер обычно рождается так: поставили 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, имя сетевого интерфейса и пути к папкам.

/etc/samba/smb.conf
[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.10

Windows 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-recycle

Samba в контейнере 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 и ручной разметки диска — вторая статья как раз про то, как заранее развести систему и данные по разным томам, чтобы не переезжать потом.

Статья помогла?

Комментарии

Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.

Комментарий появится после проверки. Ссылки и реклама не публикуются.