Windows не может получить доступ к сетевой папке linux

Обновлено: 04.07.2024

Вы, наверное, не раз сталкивались с проблемой, что Ubuntu не видит сеть Windows или Windows не видит сетевую шару Linux. Такая проблема характерна для многих дистрибутивов с окружением Gnome. Ситуация довольно неоднозначная, раньше причиной этому был баг в GVFS, потом появилось ещё несколько осложняющих дело факторов.

В этой статье мы рассмотрим что делать если Ubuntu не видит шары Windows или Samba, как к ним всё таки подключится и можно ли решить проблему, сделать так чтобы Nautilus и Dolphin начали всё таки видеть сетевые ресурсы.

Почему Ubuntu не видит сеть Windows или Samba?

Нужно разобраться почему Ubuntu не может увидеть сеть Windows. Начиная с Windows 10 в компании Microsoft решили отказаться от старого протокола SMB1 и использовать только SMB2 и SMB3. Но в этих протоколах нет сетевого обнаружения. Для сетевого обнаружения в Windows теперь используется новый сервис WS-Discovery. В Nautilus для отображения сетевых ресурсов используется либо avahi либо протокол SMB1. Поэтому увидеть шару Windows не получится, не включив обратно устаревший протокол в реестре. Windows по умолчанию шары Samba тоже видеть не будет, потому что новый WS-Discovery в Samba не поддерживается. Ещё в 2015 году были предложены патчи для Samba добавляющие эту функциональность, но разработчики решили, что оно им не нужно. Поэтому если вы хотите чтобы Windows видела Samba, нужно отдельно установить сервис WSDD.

Но это ещё не всё. Начиная с версии Samba 4.11 разработчики решили, что они ничем не хуже Microsoft и отключили по умолчанию поддержку протокола SMB1. Теперь Nautils и Dolphin перестали видеть не только Windows шары, но и Linux тоже. Решается проблема либо установкой на Samba сервер Avahi, либо включением поддержки старого протокола SMB1 на сервере Samba.

Настойка сервера Samba

1. Включение протокола SMB1

Для того чтобы активировать протокол SMB1 в Samba необходимо добавить такие строчки в /etc/samba/smb.conf в секцию global:

sudo vi /etc/samba/smb.conf

server min protocol = NT1
client min protocol = NT1
min protocol = NT1

После этого надо перезапустить Samba.

sudo systemctl restart smbd
sudo systemctl restart nmbd

Хочу обратить ваше внимание, что у меня всё заработало только после того как я перезагрузил и сервер и клиент. Видимо что-то где-то кэшируется.

2. Настройка имени хоста

Имя хоста вашего компьютера, выводимое командой hostname должно совпадать со значением в файле /etc/hosts и со значением параметра netbios name в файле /etc/samba/smb.conf. Например:

Регистр букв не имеет значения.

3. Установка Avahi

Если предыдущий способ не поможет, то установка Avahi должна помочь. Samba не будет отображаться в сетях Windows, но зато появится в сетевом окружении в Nautilus. Для установки Avahi выполните:

sudo apt install avahi-daemon avahi-utils

После этого сервис стоит запустить и добавить в автозагрузку:

sudo systemctl enable avahi-daemon

sudo systemctl start avahi-daemon

Проверить доступные сервисы можно командой:

Среди них должна быть ваша шара, обозначенная как Microsoft Windows Network local.

4. Установка WSDD

Сервис WSDD нужен для того чтобы вашу шару было видно из Windows. Можно использовать сервис wsdd2 из этого репозитория. Его надо собрать из исходников, но в этом нет ничего сложного. Сначала склонируйте репозиторий:

Затем перейдите в папку с проектом:

Выполните make для сборки:

Затем установите программу, она только скопирует исполняемый файл и службу systemd в нужные директории:

sudo make install

Осталось запустить службу:

sudo systemctl daemon-reload

sudo systemctl enable --now wsdd2

Теперь Windows сможет видеть ваш сервер Samba. Таким образом если всё сделать правильно, то все всех будут видеть.

Настройка Windows

1. Общий доступ в Windows

Убедитесь, что в Windows общий доступ был включён. Если общий доступ отключен, то вы не сможете никак получить доступ к ресурсам. Откройте проводник и перейдите в пункт Сеть. Если сетевой доступ отключён, то система выдаст соответствующее предупреждение:


Кликните по нему чтобы включить общий доступ, затем выберите Включить сетевое обнаружение и общий доступ к файлам.


После этого система ещё раз спросит надо ли разрешить доступ для всех общественных сетей. Ответьте утвердительно:


После этого вы сможете получить доступ к общим ресурсам этого компьютера.

2. Включение SMB1 в Windows

Для того чтобы включить поддержку протокола SMB1 в Windows 10 откройте поиск и наберите Включение компонентов. Затем откройте утилиту Включение и выключение компонентов Windows:


Дальше найдите пункт SMB1.0 CIFS File Sharing Support и установите напротив него галочку:


Затем необходимо перезапустить компьютер:


После этого Ubuntu начнёт видеть вашу шару Windows и вы сможете к ней подключится.

Настройка клиента

1. Установить Samba

Если файловый сервер Samba у вас не установлен, то его надо установить для того чтобы был создан файл /etc/samba/smb.conf с параметрами по умолчанию. Они потом будут использоваться библиотекой libsmbclient и самой утилитой smbclient, которую вы можете применять для тестирования. Для установки выполните:

sudo apt install samba

Проверьте конфигурационный файл Samba на ошибки с помощью такой команды:


2. Рабочая группа

По умолчанию используется рабочая группа WORKGROUP. Убедитесь, что ваша рабочая группа имеет именно это имя, также убедитесь, что в /etc/samba/smb.conf задано правильное имя рабочей группы в параметре workgroup:

sudo vi /etc/samba/smb.conf


3. Версия протокола

В современных системах Windows для общего доступа к папкам используется файловая система CIFS, использующая современные версии протоколов SMB2 и SMB3. Эти протоколы не поддерживают обзор доступных общих папок так, как это ожидает получить Nautilus. Для того чтобы всё работало надо использовать старый протокол NT1. Чтобы его включить добавьте параметр client max protocol после параметра workgroup:

client max protocol = NT1


После этого сохраните изменения и перезагрузите компьютер и проверьте.

4. Правильный порядок разрешения имён

name resolve order = bcast lmhosts host wins


5. Не тот интерфейс

Если в вашем компьютере несколько сетевых интерфейсов, возможно smbclient пытается использовать не тот интерфейс. Чтобы посмотреть список интерфейсов используйте команду:


Затем найдите в /etc/samba/smb.conf параметр interface и замените в его значении eth0 на имя вашего интерфейса, который обеспечивает связь с нужной локальной сетью. Например на enp0s8:

interfaces = 127.0.0.0/8 enp0s8


После этого надо перезапустить службы Samba:

sudo systemctl restart smbd
sudo systemctl restart nmbd

6. Отладка

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

pkill gvfs; pkill nautilus

GVFS_DEBUG=all GVFS_SMB_DEBUG=10 $(find /usr/lib* -name gvfsd 2>/dev/null) --replace 2>&1 | tee gvfsd.log

7. Проблема в GVFS

Баг в GVFS, о котором я писал выше наблюдался для Samba версии 4.8 и ниже. Если сервер поддерживает протокол более высокого уровня, то клиент пытается использовать этот протокол, например SMB2 или SMB3, но на этих протоколах не работает отображение доступных ресурсов. Если у вас именно эта проблема, то для полного решения придется ждать обновления или использовать обходное решение описанное ниже.

8. Подключение напрямую

Даже если у вас не работает обнаружение сетевых ресурсов Windows, вы все ещё можете подключится к нужному компьютеру и получить с него файлы. Откройте пункт Другие места на левой панели Nautilus. Внизу окна вы увидите надпись Подключится к серверу введите smb://адрес_сервера в поле слева и нажмите Enter:

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

Введите пароль и вы увидите доступные общие папки:


Выводы

Если всё будет сделано правильно то Linux увидит вашу шару Windows или Samba:

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

В данной статье расскажу о настройке файлового обмена между Windows и Ubuntu. Мы научимся расшаривать папки (каталоги) в Ubuntu и подключаться к ним из Windows 10 и наоборот. В этой статье все действия мы будем выполнять без использования терминала.

Этой статьей я хочу развеять предрассудки, что шарить папки на Ubuntu очень сложно. Так как же расшарить папку в Ubuntu?

Настройка общего доступа папки в Ubuntu и подключение к ней из Windows.

Открываем файловый менеджер (Nautilus). Выбираем папку, которую хотим расшарить другим пользователям в локальной сети. Кликаем по ней правой кнопкой мыши, в контекстном меню выбираем "Свойства" и переходим на вкладку "Общедоступная папка по локальной сети":

Свойства папки

Если проставить галочку "Опубликовать эту папку" и нажать кнопку "Применить", то наша папка станет доступна другим пользователям в локальной сети. И у эта папка будет подсвечена значком общего доступа:

Значок общего доступа

Но есть нюансы. Не спешите закрывать статью.

Если мы это сделаем в первый раз, то система нам радушно предложит установить "Службу общего доступа к папкам":

Служба общего доступа к папкам

Соглашаемся и жмём "Установить службу", появится окно, непосредственно, с установкой пакета Samba:

Установить службу

Устанавливаем и соглашаемся на перезапуск сеанса:

Перезапуск сеанса

Давайте разберёмся подробнее с открытием общего доступа к папке.

Создадим какую-нибудь папку, к примеру, назовём её LinuxFiles. Проставим галочку "Опубликовать эту папку" и нажать "Применить":

Опубликовать эту папку

В поле "Наименование" можно вписать имя сетевого ресурса, как оно будет отображаться у нас в сети.

К примеру, мы создаём название каталога с пробелами и прочими символами, а здесь, в поле "Наименование" указываем нормальное название сетевого ресурса латинскими буквами.

Как подключиться к расшаренной папке Ubuntu из Windows?

Для этого нам надо узнать наш ip или название устройства (hostname).

Это можно сделать в графическом интерфейсе через "Параметры" системы.

В пункте "Сеть" посмотреть подробности вашего подключения:

Параметры сети

В пункте "Подробности" (О системе):

О системе

Тоже самое можно посмотреть и в терминале, выполнив следующие команды:

После чего в Windows подключаемся, введя в адресной строке Проводника два обратных слеша \\ , а затем ip адрес или имя устройства Ubuntu:

Проводник Windows

Отобразятся все расшаренные каталоги на Ubuntu машине. Но если мы попытаемся зайти в нашу папку LinuxFiles, то получим ошибку доступа:

Ввод сетевых учетных данных

Есть два пути решения данной проблемы.

Если хотите, чтобы любой имел доступ к вашей расшаренной папке, то надо в свойствах её общего доступа проставить галочку "Гостевой доступ" и нажать "Применить":

Гостевой доступ

Если хотите подключаться к папке с помощью учетной записи вашего текущего пользователя Ubuntu, то придется задать ему Samba пароль и это сделать можно в терминале (да, я вас обманул, один раз придется в терминал зайти):

smbpasswd

Теперь можно в Windows зайти в нашу расшаренную папку. Либо с вводом имени пользователя и пароля (вашего Ubuntu пользователя). Либо, если проставили галочку "Гостевого входа", то сразу.

Расшаренный каталог

Но если в Windows вы попытаетесь создать, изменить или удалить файл/папку, то получите ошибку:

Необходимы разрешения на выполнение операции

У вас нет доступа на изменение в этом каталоге.

Если это проблема, и вы хотите, чтобы пользователи в локальной сети могли изменять файлы в этой папке, то для решения этой проблемы нужно в свойствах общего доступа папки проставить галочку "Разрешить другим пользователям изменять содержимое папки" и нажать "Применить":

Выдача прав на изменений файлов

После чего у вас будет запрошено подверждение на изменение прав на папку:

Подтверждение на изменени прав на папку

Соглашаемся на изменение прав на каталог.

Теперь пользователи локальной сети смогут изменять файлы внутри вашей расшаренной папки.

Стоит упомянуть, что не только пользователи Windows смогут подключаться к вашей расшаренной папке, но и пользователи Ubuntu или других дистрибутивов Linux, аналогично, как они бы подключались к расшаренной папке Windows.

Давайте теперь расшарим папку на Windows и подключимся к ней из Ubuntu.

Настройка общего доступа папки в Windows и подключение к ней из Ubuntu.

Создаём папку в Windows где-нибудь, кликаем правой кнопкой мыши, выбираем "Свойства" - "Доступ" и жмём "Расширенная настройка":

Расширенная настройка папки Windows

Далее проставляем галочку "Открыть общий доступ к этой папке" и нажимаем "Применить":

Открыть общий доступ к этой папке

Всё, мы расшарили папку в Windows и к ней можно подключаться.

Как подключиться к расшаренной папке Windows из Ubuntu?

Нам нужно знать ip адрес или имя устройства (hostname).

Полный сетевой путь к расшаренной папке написан на вкладке "Доступ" в Свойствах папки:

Полный сетевой путь к папке

Открываем файловый менеджер (Nautilus) в Ubuntu и слева выбираем пункт "Подключиться". Вводим smb и сетевой путь к папке Windows, не забывая развернуть слеши в другую сторону, и нажимаем "Подключиться":

Подключение к папке Windows через smb

После попытке подключения, если адрес ввели правильно, то будет запрошена авторизация:

Запрошена авторизация для подключения к папке Windows

В Windows есть несколько нюансов с настройкой общего доступа.

Если мы хотим подключаться с авторизацией, введя имя пользователя и пароль, то в Windows нужно создать локальную учетную запись с латинским логином и ввести пароль.

Если кто не знал, то в Windows 10 есть сетевые и локальные учетные записи. С сетевой учетной записью мы не сможем подключиться.

В расширенных настройках общего доступа папки Windows в "Разрешениях" по умолчанию выбрана группа "Все":

Настройка разрешений для папки

Но авторизация у нас запрашивается, и если мы попытаемся подключиться "Анонимно", то ничего не выйдет.

Как же подключиться без ввода пароля к Windows папке из Ubuntu?

Нужно в Windows открыть "Центр управления сетями и общим доступом", выбрать "Изменить дополнительные параметры общего доступа":

Центр управления сетями и общим доступом

В пункте "Все сети" в самом низу будет пункт "Общий доступ с парольной защитой":

Общий доступ с парольной защитой

Надо отключить общий доступ с парольной защитой и "Сохранить изменения".

После чего можно будет заходить с Ubuntu в расшаренные папки Windows, на которых разрешен доступ для всех. Но только после перезагрузки Windows для применения этих изменений.

Для удобства и быстрого доступа к сетевому ресурсу, можно добавить его в закладки файлового менеджера (Nautilus) Ubuntu:

Добавить в закладки

А если нужно защитить папку, то надо удалить группу "Все" и добавить своего пользователя в "Разрешения":

Разрешения для группы

Вот и всё. В этой статье мы не правили никакие конфиги Samba и не пользовались терминалом. Простому пользователю этого более чем достаточно.

А в ближайших статьях мы более подробно разберем Samba, научимся конфигурировать эту службу.

В Ubuntu Maverick я поделился некоторыми папками, используя графический интерфейс Nautilus «Параметры общего доступа».

альтернативный текст

Я вижу их из Windows 7, но когда я пытаюсь получить к ним доступ (из Windows), он запрашивает имя пользователя и пароль. Независимо от того, что я вхожу, он не впустит меня. Как мне настроить это, чтобы поделиться нормально?

Обновление: я обнаружил, что некоторые общие папки позволяют мне войти, но другие нет. Из тех, которые делают, некоторые из их подпапок делают, другие нет, и т.д. Как я могу исследовать, что вызывает это?

Когда я позволяю графическому интерфейсу установить то, что ему нужно, он устанавливает samba и libpam-smbpass . На машине у меня возникают проблемы с подключением, libpam-smbpass не установлена. Может ли это быть проблемой?

У меня та же проблема. Раньше работал без проблем. Я мог получить доступ к компьютеру с Ubuntu, который использовался для запроса имени пользователя и пароля, и все было в порядке. После обновления, которое произошло для меня 2 дня назад, у меня возникла та же проблема. Теперь я могу получить доступ к общей папке только в режиме гостя. Когда он не находится в режиме гостя, он запрашивает пароль для имени пользователя, но когда я его набираю, он говорит: «\\ Ubuntu \ downloads недоступен. У вас может не быть разрешения на использование этого сетевого ресурса. Обратитесь к администратору этого сервера, чтобы узнайте, есть ли у вас права доступа. Множественное соединение после 2 часов разочарования я решил эту проблему, перезапустив свои компьютеры .

Снова откройте Nautilus как обычный пользователь и измените общий ресурс, чтобы удалить гостевой доступ. Введите gksudo nautilus , перейдите к общей папке и поделитесь ею снова. Поделитесь папкой, но не предоставьте гостевой доступ. Закрыть наутилус.

Перейдите в свою коробку Windows и получите доступ к общему ресурсу и введите имя пользователя и пароль Ubuntu.

Убедитесь, что ваш брандмауэр Ubuntu разрешает входящий доступ к портам Samba. Убедитесь, что брандмауэр Windows разрешает исходящий доступ для тех же портов.

У меня такая же проблема. Я не уверен, почему это не позволяет гостевой доступ. Может быть, Ubuntu подумала, что это уязвимость безопасности, которую можно использовать. Я предполагаю, что есть некоторые другие настройки, которые должны быть включены, чтобы опция гостевого доступа работала. Может быть, поэтому они не полностью удалили эту опцию.

Вы установили Samba? sudo apt-get install samba

Если это так, то вам необходимо установить пароль Samba: sudo smbpasswd -a USERNAME . Эта команда сгенерирует запрос пароля (замените USERNAME своим именем пользователя).

Установите папку для обмена mkdir /home/USERNAME/sharedfolder

Сделайте резервную копию вашего файла smb.conf: sudo cp /etc/samba/smb.conf

Откройте файл smb.conf: gksu gedit /etc/samba/smb.conf

Добавьте это в самый конец файла:

Между строками не должно быть пробелов, и как перед, так и после каждого знака равенства должен быть один пробел. Сохраните и выйдите из Gedit.

Перезагрузите самбу sudo restart smbd

Используйте эту команду, чтобы проверить файл smb.conf на наличие синтаксических ошибок: sudo testparm

Теперь вы должны иметь возможность поделиться с вашего компьютера с Windows 7.

Редактировать:

Я понимаю, что вы пытаетесь получить доступ к общему ресурсу Ubuntu из Windows 7 и что вы хотите сделать это с помощью графического интерфейса.

но когда я пытаюсь получить к ним доступ (из Windows), он запрашивает имя пользователя и пароль. Независимо от того, что я вхожу, он не впустит меня. Как мне настроить это, чтобы поделиться нормально?

Для этого вы должны установить Samba-имя пользователя / пароль на вашем Linux-компьютере, как я описал выше. Я мог бы порекомендовать для этого программу с графическим интерфейсом для Ubuntu, но, честно говоря, сделать это гораздо сложнее и сложнее. Программа называется gadmin-samba и находится в репозитории Ubuntu. Внимание! Вы можете полностью потерять конфигурацию, если неправильно используете эту программу. Пожалуйста, дайте нам знать, какие шаги вы предприняли, и с какими ошибками вы столкнулись. Благодарность!

Эта статья по сути будет подборкой «Best practiсe» для системных администраторов Samba. Основой статьи является глава Troubleshooting Techniques из книги Sam’s Teach Yourself Samba in 24 Hours. Мы постараемся рассмотреть наиболее распространенные ошибки при настройке Samba.


Согласитесь, ужасно поменять двигатель в машине, а потом выяснить, что не ехала она из-за отсутствия бензина! Может, это и не лучшая метафора, но многие системные администраторы тратят время зря, не проверив в первую очередь самые очевидные вещи. Посмотрите, как примерно должен выстраиваться процесс поиска и решения проблем с Samba:

Описание тестовой среды
Для начала — несколько слов о тестовой среде. Условия следующие:
Samba-сервер называется TROUBLE и имеет IP-адрес 192.168.7.75 и маску 255.255.255.0.
smbd и nmbd запускаются как демоны.
•Windows-клиент называется win-client.
•Windows-клиент использует адрес 192.168.7.135 с сетевой маской 255.255.255.0.
•И win-client, и TROUBLE находятся в одной подсети, так что широковещательный запрос дойдет с одного хоста на другой.
•И win-client, и TROUBLE являются членами рабочей группы LAB.
•Samba-сервер использует следуюший smb.conf:

УРОВЕНЬ 1
Работоспособность сетевого соединения и файла конфигурации

Основание нашей «пирамиды» составляют три основных проблемы:
•корректно работающее TCP/IP подключение;
•соответствие маски и широковещательных адресов на серверах и клиентах;
•работоспособность файла smb.conf.

TCP/IP
Для проверки TCP/IP в первую очередь используется команда ping. Если описать протокол ICMP очень упрощенно, то хост отправляет запрос на сервер и спрашивает «Ты жив?». Если сервер не отвечает, хост приходит к выводу, что тот не подключен к сети и, следовательно, недоступен.

Если такое происходит, первое, что стоит сделать — это повторить команду ping, но используя уже не имя, а адрес:

Если команда выполнится успешно, то стоит обратить внимание на конфигурацию DNS. Наиболее распространенные причины ошибки:
•неверное содержание файла конфигурации DNS /etc/resolv.conf;
•на сервере DNS нет записи, связанной с win-client;
•сервер DNS недоступен в данный момент.
Если же ping по IP-адресу успешно не выполняется, то стоит проверить работоспособность сетевого оборудования на сервере, клиенте и между ними.

Широковещательный адрес на сервере и клиенте
Возможно, ping выполнится и успешно, но при этом сетевая маска (netmask) и широковещательный адрес (broadcast address) будут сконфигурированы неверно.
В NetBIOS крайне важно для правильного разрешения имени и поиска машин в сетевом окружении, чтобы сервер и клиент находились в одной подсети, т.е. использовали одну маску подсети и широковещательный адрес.
В нашем случае сетевая маска должна быть 255.255.255.0, а широковещательный адрес — 192.168.7.255.
Если вы используете Linux, то можно проверить, какие используются широковещательный адрес и маска, при помощи команды ifconfig с именем интерфейса в качестве аргумента:

Если в выводе этой команды вы увидите, что широковещательный адрес или сетевая маска заданы неверно, следует зайти под учетной записью root и установить верные значения, используя команду ifconfig:

В Windows аналогичную информацию можно получить информацию, выполнив команду ipconfig /all.

Проверка корректности файла smb.conf
Так как Samba использует огромное количество параметров из файла smb.conf, разработчики создали утилиту командной строки, которая проверяет синтаксис этого файла. Утилита называется testparm, она очень полезна при поиске ошибок в конфигурационном файле.
Можно использовать утилиту testparm с параметром -s для анализа конкретного конфигурационного файла. Эта опция очень хорошо подходит для проверки файла конфигурации перед его «боевым» использованием.

После анализа заданного конфигурационного файла testparm выводит все значения файла smb.conf, включая значения по умолчанию. Это помогает убедиться, что используются ожидаемые значения параметров конфигурации smbd и nmbd.
Стоит отметить, что значения по умолчанию меняются от версии к версии, так что необходимо использовать версию Samba, соответствующую версии testparm.

УРОВЕНЬ 2
Серверное и клиентское ПО

Второй уровень подразумевает проверку конфигурации клиентского и серверного ПО. Наша цель — убедиться, что и клиент, и сервер корректно отвечают на запросы NetBIOS и CIFS. Пока мы рассматриваем изолированно каждый из хостов. (На третьем уровне мы уже начнем рассматривать их взаимодействие.)

smbd
В первую очередь, smbd должен быть запущен. Проверить это можно, используя команду ps. Аргументы этой команды могут отличаться в зависимости от версии Linux.

Убедившись, что smbd запущен (или, при необходимости, запустив его), используем утилиту smbclient для проверки работоспособности сервера. Параметр -L используется для вывода списка ресурсов сервера. Ключ -N используется для анонимного подключения к серверу, чтобы не создавать лишних проблем с авторизацией. Все эти действия должны выполняться локально на Samba-сервере.

Существуют две распространенные ошибки, которые могут возникнуть при выполнении этой проверки.
Первая ошибка выглядит следующим образом:

Она возникает, если smbd не запущен или не может подключиться к порту 139. Причиной этому могут быть ранее установленные и некорректно удаленные компоненты Samba. Прежде всего следует убедиться, что smbd стартует как демон и не завершается тут же с ошибкой. Особенность в том, что nmbd не выводит ошибки в консольное окно, так что следует посмотреть последние несколько строк log-файла. Позже мы рассмотрим анализ логов более подробно.
Вторая часто встречающаяся ошибка выглядит так:

Можно подумать, что причиной этой ошибки является неверное NetBIOS-имя, но это не так. Эта ошибка не может быть вызвана «битой» установкой nmbd, nmbd в данном случае даже не обязательно должен быть запущен.
Причиной возникновения этой ошибки при локальном подключении чаще всего являются неверно сконфигурированные параметры hosts allow или hosts deny в файле smb.conf. Сервер разрывает создающуюся NetBIOS-сессию.
Если нам удалось увидеть список общих ресурсов, мы можем проверить возможность Samba авторизовать пользователей. В этом тесте аккаунт с именем пользователя user1 и паролем secret подключается к общему ресурсу [public].

Это может быть вызвано неверно написанным именем службы, настройками доступа к общему ресурсу или неверным выражением path в описании общего ресурса в файле smb.conf.

nmbd
Чтобы проверить, запущен ли nmbd, мы снова используем команду ps.

Если nmbd при этом не запущен, результатом будет ошибка:

Также причиной ошибки может быть тот факт, что loopback-интерфейс не включен в smb.conf при включенном параметре bind interfaces only = yes.
После этого мы проверим, может ли nmbd зарегистрировать имя TROUBLE.

Например, в данном случае это имя принадлежит сторонней машине, а не нашему Samba-серверу. Очевидно, решением данной проблемы является переименование этой машины или сервера.

NetBIOS-интерфейс Windows

Утилита, использующаяся в Windows для NetBIOS-запросов — nbtstat.exe — имеет еще несколько опций, которых нет в nmblookup. Одна из них (-n) позволяет «спросить» у NetBIOS-интерфейса, какие имена он успешно зарегистрировал:

Если компонент “Client for Microsoft Networks” не был установлен, nbtstat.exe сообщит следующее:

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

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

УРОВЕНЬ 3
Удаленный доступ к общим ресурсам

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

Разрешение имен
Мы вновь будем использовать утилиты nmblookup и nbstat.exe, чтобы выяснить, может ли клиент разрешить имя сервера и наоборот. Тест будет состоять из двух фаз. В первой мы будем использовать широковещательный запрос, чтобы протестировать отклики сервера и клиента. Это делается путем задания широковещательного адреса (-B 192.168.7.255) в утилите nmblookup при запросе, что задействует сетевое взаимодействие между сервером и клиентом.
Сначала мы попробуем разрешить имя сервера:

После этого мы попробуем разрешить имя клиента, используя тот же широковещательный адрес.

Можно выполнить те же действия на Samba-сервере, чтобы собрать информацию о клиенте. Опции для запроса через утилиту nmblookup, в целом, такие же как и в nbtstat.exe.

Если какой-то из этих запросов не выполняется, следует еще раз провести проверки сетевого подключения и NetBIOS-интерфейсов, которые мы рассматривали раньше.

Просмотр общих ресурсов с Windows-клиента
Мы уже использовали smbclient для просмотра списка общих ресурсов. Здесь мы проделаем то же самое, только удаленно с Windows-клиента.
Утилита net.exe — это универсальная утилита для работы с CIFS. Эта утилита является эквивалентом Linux-команды smbclient -L. Опиция view позволяет просмотреть общие ресурсы рабочей группы, или, если указать конкретное имя сервера (например, \\TROUBLE), покажет список общих ресурсов на нем.

Удаленное подключение к общим ресурсам
На самом деле, этот шаг является не столько тестом, сколько целью всего процесса. Если мы зашли в консоль с правильным именем и паролем, то следующая команда подключит диск P: локального клиента к общему ресурсу [public] на сервере TROUBLE.

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

УРОВЕНЬ 4
Сетевое окружение

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

УРОВЕНЬ 5
Лог-файлы и анализ трафика

Иногда корень проблемы сложно определить даже с помощью специализированных диагностических утилит. Тогда на помощь приходят логи. Первые четыре уровня нашей «пирамиды» можно использовать для подтверждения правильности начальной установки Samba и решения простых проблем. Начиная с пятого уровня, начинается решение серьезных проблем. Рано или поздно вы столкнетесь с проблемой, которая потребует работы с логами.

Лог-файлы Samba
Ниже приведена таблица, в которой описаны уровни детализации логов.


Чтобы узнать текущий уровень логирования smbd (например, с pid 1234), выполним следующую команду из-под учетной записи root:

Если мы хотим увеличить уровень логирования до 10, чтобы получить всю возможную информацию, используем следующую команду:

Следующий вопрос: «Что же делать с логами?»
Вот пример, в котором логи помогли решению проблемы. Мы пробуем подключиться с Windows-клиента к общему дисковому ресурсу. Однако smbd не принимает пароль для соединения. Когда мы используем smbclient для теста, мы получаем ошибку:

Мы совершенно уверены, что значение smbpasswd верно, и пароль — test. Попробуем подключиться еще раз, добавив

в секцию [global] файла smb.conf, и мы увидим новые строчки в файле log.TROUBLE:

Последняя строка и есть ответ на наш вопрос. Samba не смогла найти учетную запись testuser. А это произошло, так как кто-то закомментировал строку в файле /etc/passwd:

Это всего лишь один пример. Вывод в логах может быть запутанным, но можно использовать grep, чтобы находить следующие ключевые слова:
• fail
• error
• unsuccessful
• corrupt
• unknown

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

УРОВЕНЬ 6
Внутренние проблемы Samba

Если ничего из вышеприведенного не помогло — возможно, вы столкнулись с каким-либо багом Samba. Список известных можно посмотреть на официальном сайте. Чтобы свести к минимуму вероятность появления подобного рода проблем, используйте актуальную и стабильную версию Samba, а также следите за выходом исправлений: исправляются разведанные баги достаточно быстро.

Читайте также: