Почему мое соединение samba завершилось неудачей после перехода на Windows 2012?

У меня есть JSP, работающий на Tomcat 6.0.26 (Windows Server 2008 r2 sp1), который имеет соединение samba (jcifs-1.3.17.jar) с файлами списка, найденными на удаленном сервере.

Это работало без проблем, пока контроллер AD не был обновлен до Windows 2012 (полностью исправленный).

Теперь я больше не могу перечислить файлы в Samba Share.

SmbFile sfFile = new SmbFile("smb://myserver.com/share/", "subfolder", new NtlmPasswordAuthentication("MYDOM", session.getAttribute("UserID").toString(), session.getAttribute("UserCode").toString()));
SmbFile[] asfDirectoryList = sfFile.listFiles("webversion" + session.getAttribute("PLCode").toString().substring(0,3) + "*.xls");

Вторая строка возвращает следующее исключение:

org.apache.jasper.JasperException: jcifs.smb.SmbException: The network name cannot be found.
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:407)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

 jcifs.smb.SmbException: The network name cannot be found.
 jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
 jcifs.smb.SmbTransport.send(SmbTransport.java:663)
 jcifs.smb.SmbSession.send(SmbSession.java:238)
 jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
 jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
 jcifs.smb.SmbFile.connect(SmbFile.java:954)
 jcifs.smb.SmbFile.connect0(SmbFile.java:880)
 jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669)
 jcifs.smb.SmbFile.send(SmbFile.java:773)
 jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1986)
 jcifs.smb.SmbFile.******(SmbFile.java:1738)
 jcifs.smb.SmbFile.listFiles(SmbFile.java:1715)
 jcifs.smb.SmbFile.listFiles(SmbFile.java:1681)
 org.apache.jsp.financials.frFinancialsFileListing_jsp._jspService(frFinancialsFileListing_jsp.java:220)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Кто-нибудь знает, почему это произойдет и как это исправить?

[РЕДАКТИРОВАТЬ] Тайна: обновление контроллера AD до Windows 2012 не должно влиять на веб-сервер, получающий доступ к общему ресурсу на файловом сервере (оба из которых запускают Windows 2008 r2 sp1). Я просто не понимаю этого.

3 ответа

С Windows Server 2012 R2 SMB 1.0 по умолчанию отключен. Поэтому вам нужно снова активировать SMB 1.0 в Windows Server 2012 R2.

  1. Откройте Add Roles and Features Wizard Windows и проверьте, активирована SMB 1.0/CIFS File Shareing Support:
  2. Включите поддержку SMB 1.0, открыв редактор реестра. Перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer и измените значение DependOnService с SamSS Srv2 на SamSS Srv
  3. Перезапустить Windows

Вы можете проверить, активирована ли поддержка, проверив свойства системной службы Server (LanmanServer) на вкладке "Зависимости, которые SMB 1.xxx также активирует:

Источник: http://woshub.com/smb-1-0-support-in-windows-server-2012-r2/#!prettyPhoto


Для всех, у кого есть эта проблема, вот что произошло.

Похоже, Microsoft выпустила патч, который заканчивается обратной совместимостью за SMB2. Таким образом, JCIFS больше не будет работать, потому что это SMB1.

В моем случае я смог удалить необходимость JCIFS, исключив необходимость аутентификации доступа к доле. Эти файлы не содержат государственных секретов, поэтому разрешение на чтение прав внутренней сети не является проблемой. Так что теперь использование стандартного файлового объекта из java.io можно получить доступ к ресурсу. Этот объект передает обработку файлов в ОС (2008 r2 sp1), что означает, что JCIFS lib вообще не используется/не требуется.


Windows Server 2012 включает в себя последнюю версию SMB-протокола 3.0, и он содержит действительно интересные обновления и улучшения (подробности и некоторые соответствующие обсуждения здесь). Как и при любых серьезных улучшениях, существует компромисс с точки зрения поддержки старых клиентов.

Вероятно, поддержка SMB 3.0 на стороне клиента Samba отсутствует, или некоторая обратная совместимость должна быть включена на стороне Server 2012.

licensed under cc by-sa 3.0 with attribution.