Погодин Евгений — ИТ Заметки
🐧Linux Обновлено 04.11.2026

Linux для админа Windows 11. Samba: общие папки для Windows и вход в домен AD

Note

Материал сверен с официальной документацией (Ubuntu Server, man-страницы и документация проектов; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашем сервере значения и формат могут отличаться. Перед работой на боевом сервере проверьте команды на тестовой машине.

Файловый сервер на Windows знаком каждому: папка, права NTFS, путь \\FS1\Public. Ту же задачу решает Linux-сервер с пакетом Samba, свободной реализацией протокола SMB (Server Message Block), по которому Windows ходит в общие папки. Для клиентов lnx1 выглядит как обычный файловый сервер: тот же \\lnx1\Public, тот же проводник, та же команда net use.

В статье вы:

  • установите Samba и разберёте файл smb.conf;
  • создадите на автономном сервере (пользователи хранятся на lnx1) папки Public и Accounting;
  • подключите их с Windows через net use и New-SmbMapping и разберёте ошибку 1219;
  • увидите, как тот же сервер вступает в домен lab.example и выдаёт доступ группам Active Directory (AD).
Windows Server (FS1) Samba на lnx1
Общая папка (New-SmbShare) секция [Имя] в /etc/samba/smb.conf
Права ресурса: Read, Change, Full Control параметры секции: read only, valid users, read list, write list
Права NTFS права и ACL (списки управления доступом) файловой системы Linux: chmod, chown, setfacl
Локальные пользователи сервера пользователь Linux и запись в базе Samba (smbpasswd -a)
Группы AD в правах группы домена в valid users и в chgrp после входа в домен
Get-SmbSession, Get-SmbOpenFile smbstatus
Перечисление на основе доступа (ABE) access based share enum, hide unreadable

Warning

Адреса и имена серии учебные: сеть 192.168.10.0/24, сервер lnx1 (192.168.10.20), домен lab.example, контроллеры DC1 (192.168.10.11) и DC2 (192.168.10.12). Подставьте свои. Правка smb.conf, смена прав на каталоги и особенно вход в домен меняют сервер, а вход ещё и каталог AD. Работайте на тестовой виртуальной машине (ВМ) и в лабораторном домене, перед правкой сохраняйте копию файла (команды ниже) и держите открытой консоль ВМ.

Что нужно знать заранее

Как устроена Samba

Samba состоит из нескольких служб (демонов). Нужны не все:

Служба Что делает Когда нужна
smbd файлы и принтеры по SMB, порт TCP 445 всегда
nmbd имена NetBIOS (старая служба имён Windows) и «Сетевое окружение» если нужен просмотр сети; для доступа по \\lnx1\Public не нужна
winbind сопоставление пользователей и групп AD с числовыми UID и GID Linux (идентификаторами пользователя и группы) только на сервере-члене домена

Служба контроллера домена (в Ubuntu она называется samba-ad-dc, на wiki Samba — просто «samba») нужна только контроллеру; на сервере-члене домена её запускать нельзя. Samba в роли контроллера домена — отдельная большая тема, здесь её нет.

Статья написана для Ubuntu 24.04 LTS: пакет samba там из ветки 4.19 (на 04.11.2026 это 4.19.5 с исправлениями Ubuntu). В 26.04 LTS пакет новее: проверьте apt policy samba и документацию выпуска.

SMB существует в версиях SMB 1, 2 и 3. SMB1 устарел и небезопасен: в Samba 4.19 минимальная версия по умолчанию server min protocol = SMB2_02, то есть SMB1 выключен. Не включайте его (NT1) ради старого устройства: заменяйте устройство. Сервер слушает TCP 445 (и 139, порт NetBIOS-сеансов: по умолчанию smb ports = 445 139).

Установка и главный файл настроек:

sudo apt install samba
systemctl status smbd --no-pager

Настройки лежат в /etc/samba/smb.conf. Файл похож на ini: секция [global] с общими параметрами и по одной секции на каждую общую папку. Значения по умолчанию ищите в man smb.conf, а после каждой правки проверяйте файл командой testparm.

Два слоя пользователей и два слоя прав

Samba не умеет проверять по SMB пароли из /etc/shadow: они хранятся в формате, несовместимом с протоколом. Поэтому у сервера две базы пользователей, Linux и Samba. Чтобы пользователь вошёл по SMB, он должен быть в обеих. Linux-запись нужна как владелец файлов, пароль Samba задаётся отдельно командой smbpasswd -a и может отличаться от пароля Linux. Если пользователя нет в Linux, smbpasswd -a завершится ошибкой.

Источники расходятся в том, какая Linux-запись нужна. По документации Ubuntu, записи только для Samba не требуется пароль Linux (adduser --disabled-login его не задаёт и ставит оболочку nologin, см. adduser(8)). На wiki.samba.org для автономного сервера, наоборот, сначала задают локальный пароль и предупреждают, что Samba отказывает отключённой локально записи. Мы начинаем с варианта Ubuntu. Если вход с верным паролем Samba всё равно отклоняется, задайте sudo passwd <имя>: по SMB этот пароль не используется, а с оболочкой nologin в консоль с ним не войти.

Доступ складывается из двух слоёв, как «права ресурса плюс NTFS» в Windows:

  1. параметры секции в smb.conf решают, пускать ли пользователя на ресурс;
  2. права файловой системы решают, что он может делать с файлами: Samba выполняет операции от имени Linux-пользователя.

Итог определяет более строгий слой. Секция с read only = no не поможет, если у группы нет права w на каталог. И наоборот: право w на каталог не даст записи, пока ресурс остаётся «только для чтения» (так по умолчанию).

Практика: автономный сервер

Автономный сервер (standalone) проверяет пользователей сам, по своей базе, и не знает про домен.

Шаг 1. Группы и пользователи. Группы создаём с префиксом smb-, чтобы отделить их от системных:

sudo addgroup smb-staff
sudo addgroup smb-accounting
sudo adduser --disabled-login --no-create-home --comment 'ivanov' ivanov
sudo adduser --disabled-login --no-create-home --comment 'petrova' petrova
sudo adduser ivanov smb-staff
sudo adduser petrova smb-staff
sudo adduser petrova smb-accounting
sudo smbpasswd -a ivanov
sudo smbpasswd -a petrova

Опция --disabled-login создаёт учётную запись без пароля Linux и с оболочкой nologin. smbpasswd дважды спросит пароль Samba. Выполняйте блок один раз: повторный запуск adduser для существующего имени вернёт ошибку.

Шаг 2. Каталоги и права. По FHS (стандарту размещения файлов) данные служб принято держать в /srv:

sudo mkdir -p /srv/samba/public /srv/samba/accounting
sudo chgrp smb-staff /srv/samba/public
sudo chgrp smb-accounting /srv/samba/accounting
sudo chmod 2770 /srv/samba/public /srv/samba/accounting
ls -ld /srv/samba/public /srv/samba/accounting

Режим 2770: владелец и группа могут всё, остальные ничего, а бит setgid отдаёт новым файлам группу каталога (статья 04). Пример вывода:

drwxrws--- 2 root smb-staff      4096 Nov  4 13:05 /srv/samba/public
drwxrws--- 2 root smb-accounting 4096 Nov  4 13:05 /srv/samba/accounting

Шаг 3. Файл smb.conf. Сначала копия, затем замена содержимого на минимальное:

sudo cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo nano /etc/samba/smb.conf
[global]
   server role = standalone server

[Public]
   comment = Общая папка сотрудников
   path = /srv/samba/public
   read only = no
   guest ok = no
   valid users = @smb-staff
   create mask = 0660
   directory mask = 0770

[Accounting]
   comment = Бухгалтерия
   path = /srv/samba/accounting
   read only = no
   guest ok = no
   valid users = @smb-accounting
   create mask = 0660
   directory mask = 0770

Что здесь важно:

  • server role = standalone server: клиент входит с логином и паролем из локальной базы сервера (workgroup по умолчанию WORKGROUP, менять его необязательно).
  • read only = no: без него ресурс только для чтения.
  • guest ok = no: это и так значение по умолчанию. Мы записали его, чтобы случайно не оставить вход без пароля.
  • valid users = @smb-staff: пускать только группу Linux (@ означает группу). Пустой список значит «любой пользователь с верным паролем».
  • create mask и directory mask: по умолчанию (0744 и 0755) они отнимают у группы право записи, и коллега не сможет изменить ваш файл. Свои значения оставляют группе чтение и запись.

Шаг 4. Проверка и запуск. testparm разбирает файл и сообщает об ошибках; при ошибке его код возврата равен 1, и это удобно в скриптах (статья 12):

testparm -s
sudo systemctl restart smbd.service
systemctl status smbd --no-pager

В руководстве Ubuntu перезапускают и nmbd, но для доступа по имени нужна только smbd, поэтому перезапускаем одну её. Начало вывода testparm (дальше он печатает итоговую конфигурацию):

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)

Server role: ROLE_STANDALONE

Если testparm недоволен, не перезапускайте службу: исправьте файл или верните копию (sudo cp -a /etc/samba/smb.conf.bak /etc/samba/smb.conf). В дальнейшем изменения применяйте без остановки службы: sudo smbcontrol smbd reload-config. Перечитывание настроек не затрагивает уже открытые соединения: чтобы изменения заработали у подключённого пользователя, ему нужно переподключиться.

Шаг 5. Проверка с самого сервера. Клиент smbclient показывает то, что увидит Windows. Он входит в отдельный пакет, а пароль спросит сам:

sudo apt install smbclient
smbclient -L localhost -U petrova
smbclient //localhost/Accounting -U petrova
smbclient //localhost/Accounting -U ivanov

Первая команда выводит список ресурсов. Вторая после пароля откроет приглашение smb: \>: введите ls и затем quit. Третья должна быть отклонена, потому что ivanov не входит в smb-accounting. Пример вывода первой команды:

    Sharename       Type      Comment
    ---------       ----      -------
    Public          Disk      Общая папка сотрудников
    Accounting      Disk      Бухгалтерия
    IPC$            IPC       IPC Service (Samba 4.19.x)
SMB1 disabled -- no workgroup available

Последняя строка не ошибка: SMB1 выключен, и клиент не запрашивает список рабочих групп. Отказ третьей команды выглядит так (текст может отличаться):

tree connect failed: NT_STATUS_ACCESS_DENIED

Шаг 6. Брандмауэр. На lnx1 ufw включён по статье 07 (состояние стенда описано во врезке «Состояние стенда» в статье про Ansible). Откройте только TCP 445 и только для своей сети:

sudo ufw allow proto tcp from 192.168.10.0/24 to any port 445
sudo ufw status numbered

Порты NetBIOS (137, 138, 139) в этом правиле не нужны: по wiki Samba, они требуются только для SMB1. Порт 445 нельзя открывать в интернет.

Подключение с Windows

С PC1 откройте \\lnx1\Public в проводнике или подключите папку командой. UNC (Universal Naming Convention) — запись \\сервер\ресурс. Если имя не разрешается, временно используйте адрес \\192.168.10.20\Public; в домене подключайтесь по имени: по адресу не работает Kerberos.

Логин нужно указать явно, в форме сервер\пользователь. Без префикса net use подставит домен, в который вы вошли в Windows, а не локальную учётную запись Samba. Звёздочка вместо пароля заставит запросить его без отображения:

net use Z: \\lnx1\Public * /user:lnx1\ivanov /persistent:no
net use

Пример вывода второй команды:

Status       Local     Remote                    Network
-------------------------------------------------------------------------------
OK           Z:        \\lnx1\Public             Microsoft Windows Network

Тот же результат (для примера, на другой букве диска) даёт New-SmbMapping. Пароль запрашиваем через Get-Credential, чтобы он не попал в историю PowerShell:

$cred = Get-Credential -UserName 'lnx1\ivanov' -Message 'Пароль Samba'
New-SmbMapping -LocalPath 'Y:' -RemotePath '\\lnx1\Public' `
  -UserName $cred.UserName `
  -Password $cred.GetNetworkCredential().Password -Persistent $false

Создайте на диске Z: файл и посмотрите на сервере, как он выглядит для Linux: ls -l /srv/samba/public. Владельцем окажется ivanov, группой smb-staff (по setgid), а режим будет -rw-rw---- (по create mask). Активные подключения видны командой sudo smbstatus, а версию протокола покажет клиент: Get-SmbConnection | Select-Object ServerName, ShareName, Dialect (для Windows 10 при настройках по умолчанию — 3.1.1).

Ошибка 1219

Подключитесь к \\lnx1\Public как ivanov, а затем к \\lnx1\Accounting как petrova. Windows откажет с системной ошибкой 1219: несколько подключений к серверу под разными именами пользователя не допускаются. Сначала нужно закрыть прежние подключения. Закройте их и повторите подключение:

net use \\lnx1\Public /delete
net use * /delete

Первая команда закрывает подключение к одному ресурсу. Вторая (со звёздочкой) закрывает все подключения, в том числе к другим серверам и сетевые диски, поэтому лучше удалять конкретное подключение.

Откат учебной среды

После автономной части уберите за собой (пути заданы явно, переменных нет):

sudo smbpasswd -x ivanov
sudo smbpasswd -x petrova
sudo deluser ivanov
sudo deluser petrova
sudo delgroup smb-staff
sudo delgroup smb-accounting
sudo cp -a /etc/samba/smb.conf.bak /etc/samba/smb.conf
sudo smbcontrol smbd reload-config
sudo rm -r /srv/samba/public /srv/samba/accounting

Сервер-член домена AD

В домене пароли проверяет контроллер, а не сервер. smbpasswd не нужен: пользователи и группы приходят из AD, а Samba, как и FS1, входит в домен и получает собственную учётную запись компьютера. Выполняйте этот раздел на отдельной ВМ или после отката автономной конфигурации; правило ufw для порта 445 из шага 6 понадобится и там.

Зачем нужен idmap

Файловая система Linux не знает SID (идентификатор безопасности в Windows). Ей нужны числовые UID и GID. Сопоставление выполняет winbind по правилам idmap config. Самый простой вариант, бэкенд rid, вычисляет UID из RID (последнее число в SID пользователя): UID = RID − base_rid + начало диапазона (base_rid по умолчанию равен 0, и обычно его не задают). При одинаковом smb.conf на всех серверах пользователь везде получает один и тот же UID. Диапазон нельзя уменьшать (только осторожно расширять) и он не должен пересекаться с другими.

Предварительные условия

DNS. Сервер должен находить контроллеры по DNS домена. Сделайте копию файла Netplan, укажите контроллеры в блоке вашего интерфейса и применяйте через netplan try (статья 07). Это замена DNS из статьи 07: внешние имена теперь разрешает контроллер, если на нём настроена пересылка (DNS в домене). Проверьте resolvectl query ubuntu.com до и после правки:

      nameservers:
        addresses: [192.168.10.11, 192.168.10.12]
        search: [lab.example]

Проверка: nslookup -type=SRV _ldap._tcp.lab.example должна вернуть dc1.lab.example и dc2.lab.example (nslookup — из пакета bind9-dnsutils: sudo apt install bind9-dnsutils, см. статью 07).

Время. Kerberos, протокол проверки подлинности в AD, допускает расхождение часов не более 5 минут. Проверьте: timedatectl должен показать System clock synchronized: yes.

Имя. Команда getent hosts lnx1 не должна возвращать ни 127.0.0.1, ни любой адрес, кроме 192.168.10.20. Если в /etc/hosts есть строка вида 127.0.1.1 lnx1, сначала выполните sudo cp -a /etc/hosts /etc/hosts.bak, затем замените её на 192.168.10.20 lnx1.lab.example lnx1 и повторите проверку.

Ставим саму Samba и пакеты winbind:

sudo apt install samba winbind libnss-winbind

Пакет winbind в 24.04 не зависит от samba и не содержит службу smbd, поэтому на чистой ВМ samba нужно ставить отдельно. В «минимальный набор» из руководства Ubuntu входит ещё libpam-winbind. Он нужен, только если доменные пользователи входят на сам сервер (SSH, консоль); для одних папок документация Ubuntu считает его удаление разумным.

Настройка и вход в домен

Сделайте копию smb.conf и замените его содержимое:

[global]
   security = ads
   realm = LAB.EXAMPLE
   workgroup = LAB

   idmap config * : backend = tdb
   idmap config * : range = 100000 - 199999
   idmap config LAB : backend = rid
   idmap config LAB : range = 1000000 - 1999999

[Accounting]
   path = /srv/samba/accounting
   read only = no
   valid users = "@LAB\GG-Accounting"
   create mask = 0660
   directory mask = 0770

realm — имя Kerberos-области, DNS-имя домена заглавными буквами, workgroup — NetBIOS-имя домена. Диапазон для * нужен встроенным записям и другим доменам; ему нужен записываемый бэкенд вроде tdb, а rid для * использовать нельзя. testparm должен показать Server role: ROLE_DOMAIN_MEMBER. Затем вход в домен (от учётной записи с правом добавлять компьютеры; пароль запросят):

testparm -s
sudo net ads join -U Administrator
sudo systemctl restart smbd.service winbind.service

Пример вывода net ads join:

Password for [LAB\Administrator]:
Using short domain name -- LAB
Joined 'LNX1' to dns domain 'lab.example'

В оснастке «Пользователи и компьютеры Active Directory» появится учётная запись компьютера LNX1 (контейнер или OU зависит от настроек домена; при желании переместите её в подразделение (OU) Servers, как в статье про OU). Если вывод добавляет, что обновить DNS не удалось, вход всё равно выполнен: проверьте строку в /etc/hosts и динамические обновления DNS на контроллере.

Проверка

sudo wbinfo -t
sudo wbinfo --ping-dc
sudo net ads testjoin
wbinfo -u
getent passwd 'LAB\ivanov'
id 'LAB\ivanov'

wbinfo -t проверяет доверительный секрет учётной записи компьютера, --ping-dc проверяет связь с контроллером, net ads testjoin подтверждает, что вход в домен действителен, а wbinfo -u перечисляет пользователей. getent passwd без имени не покажет доменных пользователей (перечисление выключено по умолчанию), поэтому запрашивайте конкретное имя. В 24.04 winbind попадает в /etc/nsswitch.conf автоматически (проверьте: grep -E '^(passwd|group):' /etc/nsswitch.conf). Примеры вывода (числа условные):

checking the trust secret for domain LAB via RPC calls succeeded
LAB\ivanov:*:1001105:1000513::/home/LAB/ivanov:/bin/false

Теперь каталог и группа домена (после отката его нет). Имя группы пишут с доменом и берут в одинарные кавычки, чтобы \ дошёл до команды:

sudo mkdir -p /srv/samba/accounting
sudo chgrp 'LAB\GG-Accounting' /srv/samba/accounting
sudo chmod 2770 /srv/samba/accounting
sudo smbcontrol smbd reload-config
ls -ld /srv/samba/accounting

Пример вывода (winbind показывает имена строчными буквами):

drwxrws--- 2 root LAB\gg-accounting 4096 Nov  4 13:40 /srv/samba/accounting

На PC1 войдите как petrova и откройте \\lnx1.lab.example\Accounting: папка откроется под доменной учётной записью (обычно без запроса пароля), у ivanov будет отказ. Подключайтесь по имени, а не по IP: по адресу Kerberos недоступен. После изменения членства в группах AD пользователь должен выйти и войти снова (как в статье про Windows-сервер).

Откат

Верните прежний файл (sudo cp -a /etc/samba/smb.conf.bak /etc/samba/smb.conf) и перезапустите smbd. Прежние nameservers верните в Netplan из копии (sudo netplan try), /etc/hosts — из /etc/hosts.bak. Из домена выходят командой sudo net ads leave -U Administrator: опция --keep-account оставляет учётную запись компьютера в AD. После выхода проверьте в оснастке, нет ли лишнего объекта LNX1.

Безопасность

  • Гостевой доступ (guest ok = yes) открывает папку без пароля. Пример в документации Ubuntu построен именно так, но она сама предупреждает, что для строгих требований он слишком открыт. В Windows 10 (с версии 1709) гостевой вход по SMB 2 и 3 может быть выключен по умолчанию: не включайте его на клиентах.
  • chmod 777 и admin users. Не делайте chmod 777 на общих папках. Не используйте admin users: эти пользователи выполняют все операции от имени root, мимо прав файловой системы. Дайте группе права 2770.
  • hosts allow в секции ограничивает клиентов по сети: hosts allow = 192.168.10.0/255.255.255.0. Адрес 127.0.0.1 разрешён всегда, если его не запретить через hosts deny. Это дополнение к ufw, не замена.
  • Подпись и шифрование. Для SMB 2 подпись отключить нельзя: значение server signing = disabled трактуется как auto. mandatory требует подпись от всех клиентов. server smb encrypt = required требует шифрования, но клиенты без SMB 3 тогда не подключатся. Включайте эти режимы после проверки клиентов. Со стороны Windows их можно потребовать параметрами New-SmbMapping: -RequireIntegrity (подпись) и -RequirePrivacy (шифрование).
  • Секреты. Пароли не пишите ни в командах (-U имя%пароль, --password: они попадают в историю и список процессов), ни в скриптах. Файл с учётными данными для smbclient (-A) должен иметь права 600.
  • Скрытие недоступного. access based share enum = yes скрывает ресурсы, к которым нет доступа, а hide unreadable = yes — нечитаемые файлы (на больших каталогах это медленно). Как и ABE в Windows, это удобство, а не защита.

Типичные ошибки и недоразумения

  • Пользователь есть только в Linux или только в Samba. Вход невозможен: Windows снова спрашивает пароль. Нужны обе записи, smbpasswd -a. Если пароль верный, а вход отклонён, задайте локальный пароль sudo passwd <имя> (см. выше про расхождение источников).
  • Ресурс есть, а записать нельзя (или коллега не может изменить ваш файл). Проверьте оба слоя: read only = no, членство в группе, права 2770 на каталог, маски create mask и directory mask: по умолчанию они отнимают у группы право записи.
  • Изменили группы, но доступа нет. Пользователю нужно переподключиться (net use \\lnx1\Public /delete и новое подключение); в домене ещё и перезайти в Windows.
  • Ошибка 1219. Подключение к одному серверу под двумя разными именами пользователя в одном сеансе Windows: закройте прежние подключения (net use \\lnx1\Public /delete).
  • Правка без testparm и копии. Опечатка остаётся незамеченной до перезапуска. Сначала cp -a, потом testparm -s.
  • Запустили службу samba-ad-dc на члене домена. Она нужна только контроллеру домена.
  • Вход в домен не удаётся. Типичные причины: DNS не находит контроллер («failed to find DC»), расхождение времени больше 5 минут («Clock skew too great»), имя сервера разрешается в 127.0.0.1 или в другой адрес, не относящийся к сетевому интерфейсу.

Проверьте себя

  1. Почему для входа по SMB пользователь должен быть и в Linux, и в базе Samba? Samba не проверяет пароли из /etc/shadow, поэтому хранит свои пароли (smbpasswd -a), а учётная запись Linux нужна как владелец файлов. Без пользователя в Linux smbpasswd -a завершится ошибкой.
  2. В секции read only = no, но запись из Windows не работает. Что проверить? Второй слой: права файловой системы. У группы должно быть право w на каталог (например 2770), пользователь должен быть в группе, а маски create mask и directory mask не должны отнимать запись.
  3. Что означает ошибка 1219 и как её устранить? Попытка подключиться к одному серверу под двумя разными именами пользователя. Закройте прежние подключения: net use \\lnx1\Public /delete (команда `net use /delete` закроет все подключения сразу).*
  4. Какие службы нужны серверу-члену домена и какую запускать нельзя? smbd и winbind; nmbd нужна только для просмотра сети. Службу контроллера домена (samba-ad-dc) на члене домена запускать нельзя.
  5. Зачем серверу-члену домена idmap и что даёт бэкенд rid? Linux нужны числовые UID и GID, а в AD пользователи и группы определяются SID. rid вычисляет UID из RID по формуле, поэтому при одинаковом smb.conf пользователь получает одинаковый UID на всех серверах.

Что дальше

Источники

Ещё по теме «Linux»