Вопрос или проблема
После обновления до версии 18.04 я не могу подключиться к серверу Samba, используя окно Nautilus. Я выяснил, что нужно указать протокол SMB1.0 (-o vers=1.0
в консоли).
Я попытался добавить следующие команды:
max protocol = SMB1
client max protocol = SMB1
в /etc/samba/smb.conf
, но это не помогло, все равно выдает Function not implemented
.
Есть идеи, как это сделать?
Отказ от ответственности
Протокол SMBv1 появился в 1983 году, он небезопасен и поэтому отключен по уважительной причине. Протокол SMBv2 доступен с 2006 года.
Описание проблемы
Я пришел к этому вопросу, пытаясь найти решение для следующих двух проблем:
- У меня есть принтер HP, который может использовать только устаревший протокол SMBv1 (HP OfficeJet Pro 8620). Поэтому мой принтер отказался подключаться к сетевому хранилищу, и функция сканирования в сеть перестала работать.
-
Я пытался использовать Nautilus для просмотра сетевых ресурсов на моей системе Ubuntu.
И получил ошибку с сообщением Не удается получить доступ к местоположению Не удалось получить список ресурсов с сервера: Неверный аргумент:
Решение
После нескольких попыток с разными значениями в файле /etc/samba/smb.conf
я наконец смог решить эти проблемы, используя эти два значения:
client min protocol = NT1
server min protocol = NT1
Также я нашел посты, в которых предлагалось добавить этот третий параметр:
ntlm auth = ntlmv1-permitted
Однако в моей системе это не было необходимо.
Объяснение
Как я понимаю, опция client min protocol
контролирует, как ваша система общается с другими серверами SMB, изменение этой опции может быть полезным, если ваша система Ubuntu работает как клиент и вы хотите использовать SMBv1 для доступа к серверу. По умолчанию (с Samba 4.11) ваша локальная установка Samba настроена на требование подключений SMBv2 или выше.
С другой стороны, если ваша система Ubuntu действует как сервер, требующий SMBv2 или выше, и у вас есть удаленный клиент (например, принтер), который может понять только устаревший протокол SMBv1, то кажется, что изменение client min protocol
не имеет эффекта. Вместо этого нужно изменить server min protocol
. Так клиент может договариваться об SMBv1 с демоном Samba, запущенным на вашей системе Ubuntu.
Кстати, вы также можете передать опцию client min protocol
инструментам, таким как smbclient
, например:
smbclient -L //<hostname>/<folder> --option='client min protocol=NT1'
Можно использовать для установки клиентского протокола на SMBv1. Это было полезно для тестирования эффекта изменений в файле smb.conf
.
Я пробовал это на Ubuntu 20.04, которая поставляется с версией samba 4.11
. Я не тестировал это решение на более старых дистрибутивах Ubuntu.
ПРИМЕЧАНИЕ: Этот ответ относится к версии 4.7.6 samba и к уникальной ситуации. Текущие версии Samba работают иначе, и установка клиента max на NT1 сделает максимум меньше минимума. Чтобы включить SMB1 (NT1) на более новых версиях Samba – таких как в Ubuntu 20.04 – используйте ответ, предоставленный lanoxx ниже
client max protocol = SMB1
В попытке запутать как можно больше людей SMB1 в samba называется NT1. Поэтому измените строку на:
client max protocol = NT1
И не добавляйте строку max protocol = SMB1 вообще. Если вы настроите сервер на вашем 18.04 боксе, он будет договариваться об правильном уровне использования со своими клиентами, и по умолчанию верхний предел – SMB3. Так было уже много лет.
@lanoxx дал очень хороший ответ. Однако, для меня это было недостаточно.
Очевидно, что во время моего обновления до Ubuntu 22.04 некоторые пакеты отсутствовали.
Чтобы smb работал из Nautilus, вам нужен бекенд smb gvfs, который предоставляется пакетом gvfs-backends
, который можно установить, выполнив
sudo apt install gvfs-backends
.
После этого и изменений, упомянутых в вышеописанном ответе, все заработало.
.
Ответ или решение
Для решения задачи по обращению файлового менеджера Nautilus к серверу Samba с протоколом SMB1 следует учесть несколько ключевых моментов. Прежде всего, стоит отметить, что SMB1 — устаревший протокол, который появился в 1983 году и имеет ряд недостатков с точки зрения безопасности. Тем не менее, определенные ситуации, такие как поддержка старых устройств или программного обеспечения, могут требовать использование именно этой версии.
Теория
Смущение пользователя связано с недостаточной совместимостью между различными версиями SMB на клиенте и сервере. В Ubuntu, начиная с версии 18.04, произошло повышение минимального уровня поддержки протокола SMB в целях улучшения безопасности и производительности. По умолчанию Samba теперь поддерживает минимум SMB2 или выше. Это изменение может приводить к ошибке с сообщением "Функция не реализована" при попытке доступа к серверам, поддерживающим только SMB1.
Пример
Рассмотрим конкретный случай, о котором идет речь. Пользователь пытается подключить принтер HP OfficeJet Pro 8620, который может взаимодействовать с сетью только через SMB1. Также при попытке открыть сетевые ресурсы через Nautilus возникает ошибка "Не удалось получить список общих ресурсов с сервера: Неверный аргумент".
Для решения этой проблемы необходимы изменения в конфигурационном файле Samba, расположенном в /etc/samba/smb.conf
. На данный момент конфигурация по умолчанию не подходит, так как не поддерживает SMB1.
Применение
Для включения SMB1 на клиентской машине (например, если вы используете Ubuntu в качестве рабочего места и хотите получить доступ к серверу с поддержкой только SMB1), вам необходимо изменить параметры client min protocol
и server min protocol
в файле /etc/samba/smb.conf
:
client min protocol = NT1
server min protocol = NT1
Параметр client min protocol
указывает на минимальную версию протокола, которую клиент будет использовать для общения с сервером. Изменяя этот параметр на NT1
, вы разрешаете использовать устаревшую версию SMB1. Параметр server min protocol
аналогичным образом устанавливает минимальную версию протокола для сервера, что критично в ситуациях, когда к серверу обращается устройство, поддерживающее только SMB1.
Дополнительно, в некоторых случаях может понадобиться включение аутентификации NTLMv1, добавив строку:
ntlm auth = ntlmv1-permitted
Тем не менее, это может быть небезопасно и следует использовать только при крайней необходимости.
Если вы не видите сетевые ресурсы в Nautilus после внесенных изменений, может потребоваться установка пакета gvfs-backends
, обеспечивающего поддержку SMB в файловом менеджере GNOME:
sudo apt install gvfs-backends
Эти шаги должны помочь решить проблемы с подключением через Nautilus и другими клиентскими приложениями.
Заключение
В качестве заключения следует ещё раз подчеркнуть, что использование устаревшего протокола SMB1 связано с рисками для безопасности. В целом рекомендуется обновлять оборудование и программное обеспечение, чтобы использовать более новые и безопасные версии SMB. Однако описанные выше шаги помогут в тех случаях, когда использование SMB1 неизбежно из-за устаревшего оборудования.