Windows и Mac под одной крышей: Samba-сервер для архитектурного бюро

Задача клиента: архитектурное бюро без централизованного хранилища

К нам обратилось архитектурное бюро «АрхПроект» — 25 человек: архитекторы, дизайнеры, инженеры, администрация. Классическая история. Проектная документация разбросана по рабочим станциям, версии чертежей гуляют по флешкам, а «совместная работа» выглядит как пересылка файлов в мессенджерах с подписями «это финальная версия_v3_ТОЧНО_ФИНАЛЬНАЯ».

Ситуация на момент обращения:

  • 25 сотрудников — 15 на Windows, 10 на macOS (дизайнеры и архитекторы)
  • Файлы хранятся локально на рабочих станциях — никакого общего хранилища, каждый сам себе архив
  • Обмен через флешки, email и мессенджеры — путаница с версиями гарантирована
  • Сломалась рабочая станция — потерян проект. Бэкапов не существовало в принципе
  • Новый сотрудник получал доступ к файлам по схеме «подойди к Петрову, он скинет на флешку»

Задача была сформулирована чётко: централизованное хранилище с разграничением доступа по отделам, поддержка и Windows, и macOS, корзина для восстановления случайно удалённых файлов — и всё это должно работать с существующим доменом Active Directory.

Мы провели аудит и насчитали около 800 ГБ рабочих файлов, разбросанных по станциям: чертежи AutoCAD, 3D-модели ArchiCAD и Revit, растровая графика Photoshop, PDF-документация. Примерно 30% файлов при этом дублировались на разных компьютерах. А часть сотрудников хранила критически важные проекты исключительно на рабочем столе — без какого-либо бэкапа вообще.

Совместная работа выглядела примерно так: два архитектора работают над одним проектом и передают файлы друг другу по очереди на флешке. Предсказуемый финал — конфликты версий и потеря изменений. Один раз такая неразбериха обошлась бюро в неделю работы над коммерческим проектом. Неделю. Это деньги, нервы и репутация.

Отдельный момент — macOS. Десять человек работали на Mac, и любое решение должно было одинаково нормально работать на обеих платформах. Никаких «поставьте дополнительный клиент» — пользователи этого не любят, и правильно делают. Встроенная поддержка SMB в macOS сразу указывала на Samba как на оптимальный выбор: подключается из коробки, без лишнего ПО на клиентской стороне.

Спланированная структура ресурсов

Мы опросили каждый отдел и спланировали структуру общих папок под реальные рабочие процессы бюро:

РесурсПутьДоступНазначение
Общий/srv/samba/sharedВсе сотрудникиОбщие документы, шаблоны
Бухгалтерия/srv/samba/accountingОтдел бухгалтерииФинансовые документы
Руководство/srv/samba/managementТолько руководителиСтратегические документы
Проекты/srv/samba/projectsПроектные группыРабочие файлы проектов
Обмен/srv/samba/exchangeВсе, автоочисткаВременный обмен файлами

Отдельно прописали политику квот, бэкапов и сроков хранения для каждого ресурса.

Установка Samba на выделенный сервер

Samba ставили на выделенный сервер Debian 12 с RAID-массивом — никаких компромиссов по надёжности:

# Обновление и установка
sudo apt update
sudo apt install -y samba samba-common samba-client \
  smbclient cifs-utils winbind libpam-winbind libnss-winbind

# Проверка версии
smbd --version

# Остановка служб перед настройкой
sudo systemctl stop smbd nmbd winbind

Сделали бэкап оригинального конфига и подготовили директории:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.original
sudo mkdir -p /srv/samba/{shared,accounting,management,projects,exchange}
sudo chown -R root:root /srv/samba

Вот наше решение: конфигурация smb.conf

Конфигурацию писали под конкретную задачу — смешанная среда Windows и macOS, специфика архитектурного бюро.

Файлы AutoCAD DWG, ArchiCAD PLN, Revit RVT — это не мелкие документы. Гигабайтные проекты требуют хорошей пропускной способности, а когда несколько дизайнеров одновременно работают над одним проектом, возникает плотный поток мелких операций чтения-записи. Два разных паттерна нагрузки — и под каждый нужна своя настройка. Мы включили sendfile для быстрой передачи крупных файлов и подняли буферы для потоковых операций.

Глобальные параметры сервера

Конфигурация [global] для автономного файлового сервера:

# /etc/samba/smb.conf
[global]
   workgroup = COMPANY
   server string = File Server %v
   netbios name = FILESERVER
   server role = standalone server

   security = user
   map to guest = never
   encrypt passwords = yes
   min protocol = SMB2
   server min protocol = SMB2
   
   restrict anonymous = 2
   
   log file = /var/log/samba/log.%m
   max log size = 10000
   log level = 1 auth:3
   
   unix charset = UTF-8
   dos charset = CP866
   
   dns proxy = no
   wins support = no
   
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
   read raw = yes
   write raw = yes
   use sendfile = yes
   aio read size = 16384
   aio write size = 16384
   
   vfs objects = recycle
   recycle:repository = .recycle/%U
   recycle:keeptree = yes
   recycle:versions = yes
   recycle:maxsize = 104857600

Проверили конфигурацию:

testparm -s

Настройка общих ресурсов для отделов

Под каждый отдел бюро создали отдельную секцию:

# Общая папка для всех сотрудников
[shared]
   comment = Общие документы
   path = /srv/samba/shared
   browseable = yes
   read only = no
   valid users = @staff
   create mask = 0664
   directory mask = 0775
   force group = staff
   inherit permissions = yes

# Бухгалтерия — ограниченный доступ
[accounting]
   comment = Бухгалтерия
   path = /srv/samba/accounting
   browseable = yes
   read only = no
   valid users = @accounting @management
   write list = @accounting
   create mask = 0660
   directory mask = 0770
   force group = accounting
   inherit permissions = yes
   vfs objects = recycle
   recycle:repository = .recycle/%U
   recycle:keeptree = yes

# Руководство — максимальная защита
[management]
   comment = Документы руководства
   path = /srv/samba/management
   browseable = no
   read only = no
   valid users = @management
   create mask = 0660
   directory mask = 0770
   force group = management
   hosts allow = 192.168.1.0/24
   hosts deny = 0.0.0.0/0

# Папка обмена с автоочисткой
[exchange]
   comment = Временный обмен файлами
   path = /srv/samba/exchange
   browseable = yes
   read only = no
   valid users = @staff
   create mask = 0666
   directory mask = 0777
   force group = staff

# Домашние каталоги
[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = %S

Управление пользователями и правами доступа

Систему групп и пользователей строили так, чтобы она точно отражала реальную структуру бюро — никаких «все в одной группе».

Вот где важны детали. Дизайнеры не должны видеть финансовые документы бухгалтерии — и наоборот, бухгалтеры не должны случайно что-то удалить в папке с чертежами. При этом руководство хотело сквозной доступ ко всем папкам, чтобы контролировать ход проектов. Три разных уровня — три разных политики доступа.

Создание пользователей и групп

Группы по отделам:

# Создание групп
sudo groupadd staff
sudo groupadd accounting
sudo groupadd management
sudo groupadd projects

# Создание пользователей
sudo useradd -M -s /usr/sbin/nologin -G staff ivanov
sudo useradd -M -s /usr/sbin/nologin -G staff,accounting petrov
sudo useradd -M -s /usr/sbin/nologin -G staff,management,accounting sidorov
sudo useradd -M -s /usr/sbin/nologin -G staff,projects kozlov

# Установка паролей Samba
sudo smbpasswd -a ivanov
sudo smbpasswd -a petrov
sudo smbpasswd -a sidorov
sudo smbpasswd -a kozlov

# Включение учётных записей
sudo smbpasswd -e ivanov
sudo smbpasswd -e petrov

Управление:

# Смена пароля
sudo smbpasswd ivanov

# Блокировка при увольнении
sudo smbpasswd -d petrov

# Список пользователей Samba
sudo pdbedit -L
sudo pdbedit -Lv

Мы создали 25 учётных записей Samba под всех сотрудников бюро и распределили по группам согласно оргструктуре. Плюс сразу написали скрипт для онбординга новых людей: создаёт системного пользователя, добавляет в нужные группы, устанавливает пароль Samba. Весь процесс — 2 минуты вместо ручной возни на полчаса.

Настройка POSIX-прав и ACL

Выставили права на каталоги:

# Общая папка
sudo chown root:staff /srv/samba/shared
sudo chmod 2775 /srv/samba/shared

# Бухгалтерия
sudo chown root:accounting /srv/samba/accounting
sudo chmod 2770 /srv/samba/accounting

# Руководство
sudo chown root:management /srv/samba/management
sudo chmod 2770 /srv/samba/management

# Обмен
sudo chown root:staff /srv/samba/exchange
sudo chmod 2777 /srv/samba/exchange

Для проектных папок с гранулярными правами использовали POSIX ACL:

sudo apt install -y acl

# Разные права для проектных команд
sudo mkdir -p /srv/samba/projects/{project-alpha,project-beta}

# Группа project-alpha — полный доступ
sudo setfacl -R -m g:project-alpha:rwx /srv/samba/projects/project-alpha
sudo setfacl -R -d -m g:project-alpha:rwx /srv/samba/projects/project-alpha

# Руководство — чтение всех проектов
sudo setfacl -R -m g:management:rx /srv/samba/projects
sudo setfacl -R -d -m g:management:rx /srv/samba/projects

# Просмотр ACL
getfacl /srv/samba/projects/project-alpha

SGID-бит (chmod 2xxx) гарантирует, что все новые файлы наследуют группу каталога — без этого права расползаются и начинается бардак.

Интеграция с Active Directory клиента

В бюро уже работал контроллер домена на Windows Server. Мы интегрировали Samba с Active Directory — чтобы сотрудники входили с теми же учётными данными, что и везде, без второго пароля.

Интеграция с Active Directory была для бюро принципиальным требованием — люди просто не будут запоминать отдельный пароль для файлового сервера, и правильно. Мы сделали единый вход: один логин и пароль закрывает Windows-рабочую станцию, файловый сервер и принтеры. С macOS всё тоже прошло гладко — система нативно умеет работать с Kerberos/AD, нужно лишь прописать адрес сервера в Finder.

Присоединение к домену AD

Сначала поставили нужные пакеты и разобрались с DNS/NTP:

# Установка необходимых пакетов
sudo apt install -y realmd sssd sssd-tools adcli samba-common-bin \
  oddjob oddjob-mkhomedir packagekit krb5-user libpam-sss libnss-sss

# Настройка DNS
nano /etc/resolv.conf
nameserver 192.168.1.1
search company.local

# Настройка NTP
sudo apt install -y chrony
echo "server dc01.company.local iburst" | sudo tee -a /etc/chrony/chrony.conf
sudo systemctl restart chrony

# Проверка DNS-обнаружения
realm discover company.local

Завели сервер в домен:

sudo realm join --user=Administrator company.local
realm list

# Проверка
id administrator@company.local
getent passwd administrator@company.local

Конфигурация smb.conf для AD

Поправили конфиг под аутентификацию через AD:

# /etc/samba/smb.conf — секция [global] для AD
[global]
   workgroup = COMPANY
   server string = File Server %v
   netbios name = FILESERVER
   realm = COMPANY.LOCAL
   
   security = ADS
   
   idmap config * : backend = tdb
   idmap config * : range = 10000-19999
   idmap config COMPANY : backend = rid
   idmap config COMPANY : range = 20000-99999
   
   winbind use default domain = yes
   winbind enum users = yes
   winbind enum groups = yes
   winbind refresh tickets = yes
   
   template shell = /bin/bash
   template homedir = /home/%U
   
   kerberos method = secrets and keytab
   dedicated keytab file = /etc/krb5.keytab
   
   log file = /var/log/samba/log.%m
   max log size = 10000

[shared]
   path = /srv/samba/shared
   browseable = yes
   read only = no
   valid users = @"COMPANY\Domain Users"
   create mask = 0664
   directory mask = 0775

[accounting]
   path = /srv/samba/accounting
   browseable = yes
   read only = no
   valid users = @"COMPANY\Accounting" @"COMPANY\Management"
   write list = @"COMPANY\Accounting"
   create mask = 0660
   directory mask = 0770

Прописали NSS и перезапустили службы:

# /etc/nsswitch.conf
passwd: files systemd winbind
group:  files systemd winbind
shadow: files
sudo systemctl restart smbd nmbd winbind
sudo systemctl enable smbd nmbd winbind

# Проверка
wbinfo -u  # доменные пользователи
wbinfo -g  # доменные группы
wbinfo -t  # доверительные отношения

Принт-сервер для общих принтеров бюро

В бюро стояло 3 принтера: плоттер для чертежей А0 и два лазерника для обычных документов. Расшарили всё через CUPS + Samba.

С плоттером пришлось повозиться. Под формат А0 нашли подходящий драйвер и поставили через CUPS. Сразу настроили два профиля печати: «Черновик» — быстро, с экономией тонера — и «Финальный» — максимальное качество для презентаций клиентам. Доступ разграничили через Samba: менеджеры по продажам печатают только на лазерниках, плоттер видят исключительно архитекторы и дизайнеры.

Установка CUPS и настройка принтеров

Установили и настроили CUPS:

sudo apt install -y cups cups-pdf printer-driver-all
sudo cupsctl --remote-admin --share-printers
sudo usermod -aG lpadmin admin

Добавили принтеры:

lpadmin -p HP-LaserJet -E -v socket://192.168.1.100:9100 \
  -m drv:///hp/hplip.drv/hp-laserjet_pro_m404dn-ps.ppd

lpoptions -d HP-LaserJet
lpstat -p -d

Общий доступ через Samba

Добавили секцию в smb.conf:

# В секции [global]
   printing = cups
   printcap name = cups
   load printers = yes
   cups options = raw

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
   valid users = @staff

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/drivers
   browseable = yes
   read only = yes
   guest ok = no
   write list = @"COMPANY\Domain Admins"
sudo mkdir -p /var/spool/samba
sudo chmod 1777 /var/spool/samba
sudo systemctl restart smbd

Оптимизация, аудит и обслуживание

Архитекторы работают с тяжёлыми файлами — чертежи AutoCAD, 3D-модели. Тут медленный сервер сразу чувствуется. Мы прошлись по всем настройкам производительности.

Файлы в бюро весят от 50 МБ (обычный чертёж AutoCAD) до 2 ГБ (полная 3D-модель здания). При таких объёмах даже небольшой прирост скорости ощущается физически. После нагрузочного тестирования и тюнинга вышли на 110–115 МБ/с по гигабитной сети — это практически потолок канала.

Параметры производительности и аудит

Оптимизации под большие файлы:

# Производительность smb.conf
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
read raw = yes
write raw = yes
use sendfile = yes
aio read size = 16384
aio write size = 16384
min receivefile size = 16384
write cache size = 1048576
max smbd processes = 0
deadtime = 15
server min protocol = SMB2
client min protocol = SMB2

Сетевые параметры ядра:

# /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 5000

sudo sysctl -p

XFS для хранилища больших объёмов:

# /etc/fstab
/dev/sdb1 /srv/samba xfs defaults,noatime,nodiratime 0 2

Аудит файловых операций для бухгалтерии:

[accounting]
   vfs objects = full_audit recycle
   full_audit:prefix = %u|%I|%S
   full_audit:success = connect disconnect mkdir rmdir open rename unlink write
   full_audit:failure = connect
   full_audit:facility = local5
   full_audit:priority = notice
# /etc/rsyslog.d/samba-audit.conf
local5.notice /var/log/samba/audit.log

Автоматическое подключение дисков и бэкапы

Автоподключение дисков через GPO и логон-скрипты:

@echo off
REM logon.bat
net use S: \\FILESERVER\shared /persistent:yes
net use H: \\FILESERVER\%USERNAME% /persistent:yes

Для macOS — автомонтирование через Finder (smb://FILESERVER/shared).

Настроили ежедневный бэкап с сохранением ACL:

#!/bin/bash
# /opt/scripts/samba-backup.sh
BACKUP_DIR="/backup/samba/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"

# Бэкап данных с сохранением ACL
rsync -avz --acls --xattrs /srv/samba/ "$BACKUP_DIR/data/"

# Бэкап конфигурации
cp /etc/samba/smb.conf "$BACKUP_DIR/"

# Бэкап базы пользователей
pdbedit -Le > "$BACKUP_DIR/samba-users.txt"
tdbbackup /var/lib/samba/private/passdb.tdb
cp /var/lib/samba/private/passdb.tdb.bak "$BACKUP_DIR/"

# Удаление старых бэкапов
find /backup/samba/ -maxdepth 1 -mtime +30 -type d -exec rm -rf {} \;
# Автоочистка папки обмена
# /etc/cron.daily/exchange-cleanup
#!/bin/bash
find /srv/samba/exchange -type f -mtime +7 -delete
find /srv/samba/exchange -type d -empty -not -path /srv/samba/exchange -delete

# Очистка корзин
find /srv/samba -name '.recycle' -type d -exec \
  find {} -type f -mtime +30 -delete \;
sudo crontab -e
0 2 * * * /opt/scripts/samba-backup.sh >> /var/log/samba-backup.log 2>&1

Результаты внедрения

На всё ушла ровно одна неделя — от первичного аудита до полностью рабочего сервера. Что получили в итоге:

  • Централизованное хранилище — все 25 сотрудников работают с общими папками, путаницы с версиями файлов больше нет
  • Совместимость — Windows и macOS подключаются по SMB без танцев с бубном
  • Разграничение доступа — бухгалтерия видит только свои папки, руководство — всё
  • Интеграция с AD — заходят под доменной учёткой, один пароль на всё
  • Корзина — удалённые файлы живут в .recycle; за первый месяц уже спасли 4 документа
  • Аудит — каждая операция с финансовыми документами пишется в лог
  • Производительность — файлы AutoCAD на 100–500 МБ открываются с сервера так же шустро, как с локального диска
  • Экономия — 0 рублей на лицензии вместо ~200 000 руб. за Windows Server + CAL

Через три месяца после запуска мы вернулись на аудит и поговорили с людьми. Главный архитектор сказал буквально так: «как облачный сервис, только быстрее и под нашим контролем». Бухгалтер сразу вспомнила корзину — четыре важных документа за месяц вытащила оттуда, причём один из них была уже готова восстанавливать вручную. Руководитель бюро доволен тем, что видит все проекты на одной сетевой шаре и может реально оценить загрузку каждой команды.

Переход прошёл без неожиданностей. Пользователи macOS вообще ничего особо не заметили — Finder работает с SMB нативно, Time Machine бэкапит на Samba-ресурс без проблем. Windows-пользователи получили привычные сетевые диски через GPO. Итоговая экономия на лицензиях — около 200 000 рублей по сравнению с Windows Server + CAL. При этом решение получилось надёжнее и быстрее.

Через месяц после запуска клиент попросил помочь с архивированием. Сделали папку «Архив проектов» и написали скрипт на cron: он проверяет дату последнего изменения файлов и перекладывает проекты без активности более 90 дней на отдельный RAID-массив. Результат — 200 ГБ освободилось на основном хранилище, и навигация по активным проектам заметно ускорилась.

Часто задаваемые вопросы

Минимум SMBv2, а лучше сразу SMBv3. SMBv1 — это дыра, через которую в 2017 году прошёлся WannaCry, и Microsoft давно отключила его в Windows 10/11. SMBv3 добавляет шифрование трафика прямо на уровне протокола и поддерживает мультиканальность — скорость ощутимо растёт на многоинтерфейсных серверах. Просто пропишите server min protocol = SMB2 в smb.conf и закройте этот вопрос навсегда.

На практике удобнее всего мигрировать с Windows через robocopy: robocopy \\OLDSERVER\share \\NEWSERVER\share /E /COPY:DATSOU /R:3 /W:5 /LOG:migration.log — он честно перенесёт права, атрибуты и временны́е метки, а лог покажет всё, что не скопировалось. С Linux-стороны выручает rsync через примонтированный CIFS-ресурс. Только не забудьте сначала создать группы и пользователей — иначе потом придётся перебивать права руками, а это то ещё удовольствие.

Samba сама по себе квоты не умеет — придётся опираться на механизм дисковых квот Linux. Включите usrquota,grpquota в fstab для нужного раздела, смонтируйте его заново и настройте лимиты через edquota. Немного ручной работы, зато работает надёжно и прозрачно для пользователей.

Если все клиенты — Windows, выбор очевиден: Samba и SMB. Если в сети только Linux и macOS — NFS заметно быстрее, меньше накладных расходов. В смешанной среде мы нередко поднимаем оба протокола на одном сервере, это вполне рабочая схема. И ещё один момент: если планируете интеграцию с Active Directory — Samba здесь вне конкуренции, NFS с AD дружит плохо.

Нужна помощь с настройкой?

Если не хочется разбираться со всем этим самостоятельно — команда АйТи Фреш возьмёт внедрение и настройку на себя. Больше 15 лет мы занимаемся именно такими задачами, стоимость обслуживания — от 15 000 ₽/мес.

📞 Связаться с нами
#samba настройка#файловый сервер linux#samba active directory#smb linux#общие папки linux windows#samba принт-сервер#smb.conf настройка#samba права доступа