VPN-клиент пингует файловый сервер, разрешает его имя и всё равно не может открыть общий ресурс. Хост-политика Samba — один из четырёх уровней, которые могут отклонить это подключение, и именно её люди правят последней. Список разрешённых проверяется по адресу источника, который smbd действительно получает, и это может быть не тот адрес, который клиент считает своим. Верное определение этого источника превращает расплывчатую проблему прав в изменение конфигурации на одну строку.

Четыре уровня, которые падают с одним и тем же сообщением

Отказ может прийти от маршрута, от межсетевого экрана хоста, от хост-политики Samba или от идентичности SMB. Каждый уровень даёт клиенту сообщение, которое говорит примерно одно и то же, поэтому догадки стоят половины дня. Упорядочивание проверок от сети внутрь убирает большую часть догадок.

Начните с транспорта. Если порт 445 никогда не доходит до сервера, никакая настройка Samba не важна, и перехват на интерфейсе сервера решает это за секунды. Дальше идёт межсетевой экран хоста на самом сервере, который может отбросить разрешённый источник ещё до того, как smbd его увидит. Только после того, как эти два пройдены, список разрешённых становится кандидатом. Аутентификация идёт последней, потому что неудачный вход и отказ хоста выглядят в журнале сервера по-разному, даже когда клиент сообщает об обоих как об отказе в доступе. Порядок важнее инструментов, потому что у каждого уровня есть команда, которая ему отвечает.

Найдите адрес источника, который smbd действительно видит

При маршрутизируемом доступе сервер обычно видит адрес клиента из пула VPN. При трансляции источника на шлюзе он видит вместо этого LAN-адрес шлюза, и каждый клиент за этим шлюзом становится неразличимым.

Эта разница решает, является ли запись в списке разрешённых политикой или дырой. Разрешение транслированного адреса шлюза пускает всех, кто за ним, а правило для отдельного клиента редко хотело это выразить. Читайте источник на сервере, а не из представления клиента о своём адресе. Перехват на интерфейсе сервера — самый дешёвый способ его увидеть, и тот же перехват доказывает, дошёл ли пакет вообще. Ограничьте перехват числом пакетов и добавьте фильтр хоста, когда узнаете, за каким клиентом следите. Таблица сеансов Samba — вторая половина ответа: в smbstatus -b столбец клиента в каждой строке сеанса — это партнёр, которого записал smbd, и это самое быстрое подтверждение адреса, который действительно дошёл до службы.

sudo tcpdump -ni any -c 20 'tcp port 445'
sudo smbstatus -b
ss -tnp | grep ':445'

Читайте список разрешённых так, как его читает Samba

Параметр hosts allow принимает список адресов, сетей или имён, и он может стоять глобально или внутри общего ресурса. Две записи, которые вам кажутся эквивалентными, могут не быть эквивалентными для разборщика, поэтому проверять нужно именно действующую конфигурацию. Это значит объединённый вид, а не файл, который вы случайно правили.

Иллюстративная пара префиксов выглядит как строка ниже, и это пример, а не замена уже существующих записей. Сохраните административных и прикладных клиентов, которые сегодня законно подключаются, и прочитайте любой список запретов в том же проходе. Будет ли хост принят, зависит от политики в целом, поэтому проверяйте точного клиента, а не рассуждайте о приоритете. Разрешение хоста также ничего не говорит о правах на общий ресурс или режимах файловой системы, которые являются отдельными воротами. Успех тестовых инструментов означает, что хост-политика принимает этот источник, и ничего больше.

hosts allow = 192.168.50.0/24 10.90.0.0/24
testparm -s
testparm -s /etc/samba/smb.conf client.example 10.90.0.14

Измените файл, который переживает перезапуск

На обычном хосте Linux путь конфигурации фиксирован, и служба читает его заново при перезапуске. На маршрутизаторе или устройстве работающий smb.conf часто генерируется при загрузке, и ручная правка исчезает при следующем перезапуске. Используйте поддерживаемый механизм настройки устройства, который обычно представляет собой отдельный файл конфигурации.

Соблазн на этом этапе — прошить альтернативную прошивку, потому что одна ветка сообщила, что это работает. Это большое изменение для маленькой проблемы политики, и оно выводит устройство из поддерживаемого состояния. Сначала определите поддерживаемое управление, так как большинство устройств показывают список разрешённых через свой интерфейс. Если они действительно этого не делают, это ограничение — аргумент за другое оборудование, а не за неподдерживаемую сборку.

Запишите, какой файл вы изменили и что его создаёт заново, чтобы следующий человек не повторял диагностику.

Проверьте одного разрешённого и одного исключённого клиента

Проверяйте оба результата, а не только желаемый. Разрешённый клиент, который подключается, доказывает, что изменение работает; исключённый клиент, которому по-прежнему отказывают, доказывает, что правило не просто открыло всё.

smbclient -L //fileserver -U alice
sudo testparm -s /etc/samba/smb.conf alice-laptop 10.90.0.14
sudo tail -n 40 /var/log/samba/log.smbd

Когда соединение никогда не доходит до smbd, ответ в маршрутизации или в межсетевом экране сервера. Если хост разрешён, а вход не удаётся, проблема в идентичности, и расширение списка разрешённых снова не поможет. Держите диагностический вывод приватным, потому что подробный журнал Samba может раскрыть пути общих ресурсов и имена учётных записей. Меняйте по одному уровню за попытку, иначе следующий результат вам ничего не скажет.

Похожие статьи