Ошибка «samba detected misconfigured server role and exited» появляется в журнале systemd сразу после попытки запустить службу smbd, когда параметр server role в файле /etc/samba/smb.conf противоречит остальной конфигурации — например, роль контроллера домена задана, но секция [global] не содержит обязательных для неё директив, либо роль указана дважды с разными значениями. Демон выполняет самопроверку при старте и завершает работу, чтобы не поднять файловый сервер в непредсказуемом состоянии.
Проблема почти всегда локализуется в smb.conf: либо в самом значении server role, либо в сочетании параметров security, realm, workgroup и настроек winbind. Хорошая новость в том, что данные на шарах не затрагиваются — нужно лишь привести конфигурацию в согласованное состояние. Ниже разберём, как диагностировать конфликт и исправить его без переустановки пакетов.
⚠️ Внимание: прежде чем править/etc/samba/smb.conf, сделайте резервную копию командойcp /etc/samba/smb.conf /etc/samba/smb.conf.bak. Откат к рабочему варианту займёт секунды, а восстановление утерянной конфигурации — часы.
Что означает эта ошибка и где искать её следы
Сообщение формируется не произвольно: при запуске samba или smbd читает smb.conf, вычисляет итоговую роль сервера и сверяет её с набором обязательных параметров. Если роль определена как active directory domain controller, но отсутствуют секции [netlogon] и [sysvol], либо указана роль member server при security = user без корректного доменного окружения — проверка завершается отказом.
Точную причину подскажет журнал. Выполните:
journalctl -u smbd -u nmbd -u samba-ad-dc --no-pager -n 100
Ищите строки уровня error непосредственно перед сообщением о выходе — там обычно указано, какой именно параметр конфликтует. Дополнительно полезен вывод testparm -s: утилита покажет, как Samba интерпретировала конфигурацию, и часто сама выводит предупреждение о несогласованной роли.
Типичные причины конфликта server role
На практике конфликт сводится к нескольким повторяющимся сценариям. Полезно проверить их по очереди, начиная с самого простого.
- 🔁 Дублирование параметра. Строка
server roleвстречается вsmb.confдважды с разными значениями — действует последняя, но самопроверка может завершиться ошибкой. - 🧩 Роль AD DC без provision. Указано
server role = active directory domain controller, но домен не был развёрнут черезsamba-tool domain provision, поэтому отсутствуют базы и секции[sysvol]/[netlogon]. - 🔀 Конфликт security и server role. Например,
security = adsв сочетании с ролью standalone-сервера, либо устаревшие значенияsecurity = share/security = server, которые современные версии Samba не поддерживают. - 📦 Остатки старой конфигурации после обновления пакета. Дистрибутив подложил новый
smb.confрядом (например,smb.conf.rpmnewилиsmb.conf.dpkg-dist), а администратор частично перенёс настройки, получив смешанный файл. - 🧷 Опечатка в значении роли. Значение вроде
server role = standaloneвместо корректногоstandalone serverтрактуется как недопустимое.
Допустимые значения server role и их требования
Параметр server role имеет ограниченный набор корректных значений, и у каждого — свои обязательные условия. Несоответствие этим требованиям — самая частая первопричина отказа запуска.
| Значение server role | Назначение | Ключевые требования |
|---|---|---|
standalone server | Автономный файловый сервер без домена | Обычно security = user, локальная база пользователей |
member server | Сервер — член домена AD или NT4 | Корректные realm, workgroup, security = ads или domain, настроенный winbind |
active directory domain controller | Контроллер домена Samba AD | Выполненный samba-tool domain provision, секции [sysvol] и [netlogon], запуск через службу samba-ad-dc |
classic primary domain controller | PDC в стиле NT4-домена | Настройки domain logons, domain master, соответствующие скрипты входа |
Обратите внимание на третью строку таблицы: если роль — контроллер домена AD, запускать нужно службу samba-ad-dc, а не smbd напрямую. Попытка стартовать контроллер домена через systemctl start smbd — частый источник именно этой ошибки, потому что smbd в таком режиме должен запускаться дочерним процессом основного демона samba.
Пошаговая диагностика и исправление
Действуйте последовательно: сначала диагностика, потом правка, затем контрольный запуск. Так вы поймёте, какой именно шаг устранил проблему.
Шаг 1. Проверьте конфигурацию встроенным валидатором:
testparm -s 2>&1 | less
Утилита выведет итоговые параметры и предупреждения. Если testparm сам ругается на роль или синтаксис — исправляйте указанные строки до перезапуска служб.
Шаг 2. Найдите дубликаты и опечатки в server role:
grep -n "server role" /etc/samba/smb.conf
Строка должна встречаться один раз, в секции [global], с корректным значением из таблицы выше. Лишние вхождения удалите или закомментируйте символом #.
Шаг 3. Приведите в соответствие связанные параметры. Для standalone-сервера достаточно минимального набора: workgroup, server string, security = user (или просто отсутствие явной роли — тогда Samba выберет standalone автоматически). Для member server проверьте realm, workgroup, security = ads и работоспособность winbind. Для AD DC убедитесь, что provision был выполнен, и что в конфигурации присутствуют шары [sysvol] и [netlogon].
Шаг 4. Перезапустите нужную службу и проверьте статус:
systemctl restart smbd nmbd
systemctl status smbd --no-pager
Для контроллера домена вместо этого: systemctl restart samba-ad-dc. Если служба поднялась и smbstatus показывает сессии — конфликт устранён.
☑️ Контрольный список исправления
⚠️ Внимание: не выполняйте samba-tool domain provision повторно на уже работавшем контроллере домена «для перестраховки» — это создаст новый домен и затрёт существующие базы. Provision запускается один раз при первичном развёртывании.
Особый случай: конфликт после обновления пакета
Отдельный сценарий — ошибка появилась сразу после обновления Samba через пакетный менеджер. Здесь виновником часто оказывается не ваша правка, а изменение поведения самой Samba или подмена конфигурации.
Во-первых, проверьте, не появились ли рядом с smb.conf файлы smb.conf.rpmnew, smb.conf.rpmsave (в RPM-дистрибутивах) или smb.conf.dpkg-dist, smb.conf.ucf-old (в Debian/Ubuntu). Сравните их с рабочим файлом через diff — возможно, обновление перезаписало часть настроек либо, наоборот, оставило старый файл с параметрами, которые новая версия больше не принимает.
Во-вторых, учтите, что в новых выпусках Samba устаревшие значения security (например, share и server) удалены, и конфигурация с ними может приводить к ошибкам при определении роли. Замените их на актуальные: user для автономного сервера, ads для члена домена Active Directory.
Как быстро откатиться к рабочей конфигурации
Если после правок стало хуже, восстановите резервную копию: cp /etc/samba/smb.conf.bak /etc/samba/smb.conf, затем выполните testparm для проверки и systemctl restart smbd nmbd. Если бэкапа нет, но обновление создало файл .rpmsave или .ucf-old — используйте его как отправную точку.
Проверка результата и профилактика
После успешного запуска убедитесь, что сервер работает в ожидаемой роли. Команда testparm -s | grep "server role" покажет итоговое значение, а smbclient -L localhost -N — список опубликованных шар. Для member server дополнительно проверьте доменную интеграцию: wbinfo -t проверяет доверительные отношения, wbinfo -u — получение списка пользователей домена.
Чтобы ошибка не вернулась, придерживайтесь нескольких правил:
- 📝 Правьте
smb.confтолько вручную через текстовый редактор или через осмысленные include-файлы — избегайте одновременного ведения конфигурации в нескольких местах. - 🧪 После каждой правки запускайте
testparmдо перезапуска служб, а не после. - 🗂 Храните
smb.confв системе контроля версий или делайте датированные копии — это упростит поиск момента, когда конфигурация «сломалась». - 🔍 После обновлений пакета samba проверяйте журнал служб, даже если они перезапустились без видимых ошибок.
Часто задаваемые вопросы
Ошибка появляется, хотя я не указывал server role в smb.conf. Почему?
Если параметр не задан явно, Samba вычисляет роль автоматически на основе security, domain logons и других директив. Конфликт может возникнуть между этими параметрами — например, security = ads без корректного realm. Запустите testparm -sv | grep "server role", чтобы увидеть вычисленное значение.
Можно ли запускать smbd вручную на контроллере домена Samba AD?
Нет, в режиме AD DC демон smbd запускается как дочерний процесс основной службы samba (в systemd — юнит samba-ad-dc.service). Ручной запуск smbd приведёт как раз к ошибке неверно настроенной роли. Используйте systemctl start samba-ad-dc.
Чем отличается security = user от security = ads?
security = user означает аутентификацию по локальной базе пользователей Samba — типичный вариант для standalone-сервера. security = ads используется на сервере-члене домена Active Directory и требует корректных realm, workgroup и работающего winbind. Смешивание этих режимов с несоответствующей ролью — частая причина рассматриваемой ошибки.
testparm не показывает ошибок, но служба всё равно не стартует. Что делать?
Смотрите полный журнал: journalctl -u smbd -n 200 --no-pager. Иногда конфликт проявляется только при запуске — например, недоступна директория шары, не запущен winbind для member server или отсутствуют базы данных в /var/lib/samba. Также проверьте, не слушает ли порт 445 другой процесс: ss -tlnp | grep 445.
Повлияет ли исправление server role на существующие шары и права доступа?
Сам параметр server role на содержимое шар и ACL не влияет — он определяет режим работы сервера. Однако смена роли (например, с member server на standalone) изменит способ аутентификации пользователей, и доменные учётные записи могут потерять доступ. Перед сменой роли убедитесь, что понимаете, какая схема аутентификации будет использоваться после изменения.