cht電腦資訊Linux
adm Find login register

Samba (client) + Win7 (server) 真是折磨人

coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
1subject: Samba (client) + Win7 (server) 真是折磨人Promote 2 Bookmark 02010-10-16quote  

最近在研究 Win7 當 Server、Samba 當 client 的狀況,可能是沒經驗,搞得我頭好大。

本來想寫心得,不過有人先寫了:[轉貼] win7 連 samba

重點是:

  • 在「網路和共用中心」的進階設定裡,開啟網路探索、檔案與印表機共用、開啟以密碼保護共用
  • Win7 Professional 以上的版本,用 gpedit.msc 修改「本機安全性原則」中的設定:

    電腦設定→Widnows→設定→安全性設定→本機原則→安全性選項→網路安全性 Lan Manager 驗證等級

    改成「傳送 LM 和 NTLM - 如有交涉,使用 NTLMv2 工作階段安全性」

  • Win7 Home Premium 以下的版本,自行改 registry
    在 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] 下新增名稱為 LmCompatibilityLevel 的 32bit DWORD 值 1。

    LmCompatibilityLevel 數字的意義

    0=Send LM & NTLM responses (never uses NTLMv2)
    1=Send LM & NTLM - use NTLMv2 session security if negotiated
    2=Send NTLM response only, use NTLMv2 if server supports it.
    3=Send NTLMv2 response only, if DC accept LM, NTLM and NTLMv2 auth, use NTLMv2 security if supported.
    4=Send NTLMv2 response only, if DC refuse LM, accept NTLM or NTLMv2 auth, use NTLMv2 security if supported.
    5=Send NTLMv2 response only, if DC,refuse LM & NTLM and only accept NTLMv2 auth, use NTLMv2 security if supported.

做完以上步驟後,我仍然無法正常從 Linux 讀取某台 Win7 的檔案,連用 $smbclient -L 192.168.x.x 都無法列出分享的資源,會出現以下錯誤:

session setup failed: SUCCESS - 0

如果用 $smbclient -d7 -L 192.168.x.x ,可以找到另一個可疑的錯誤:

SPNEGO login failed: Invalid parameter

最後找到 smbclient accessing a Windows 7 network share,看來 Debian Testing 中的 Samba 3.5.5 可能有 bug,於是更新到 Unstable 的 Samba 3.5.6

結果還是不行!!

session setup failed: NT_STATUS_LOGON_FAILURE

這次再問 google,找出一堆早期 2004/2005 左右的文章,看來跟現況可能不符。

最最後,看了 Win7 上某個無法連線的說明畫面後,終於抓到問題,原來要連到 Win7 Home Premium 的分享,執行命令者必需在 Win7 Server 上也有一個帳號。

之前是用 USER1 執行 mount.cifs //192.168.x.x/DIR share -o user=USER2 或 smbclient -L 192.168.x.x -U USER2 。為什麼我是 USER1 卻要以 USER2 的身分來 mount?因為電腦是 USER2 的,不太想在他的 Win7 新加 USER1 這個帳號,所以只在自已的 Linux 加入 USER2 這個帳號,但執行時想說沒差用 USER1 跑就好,結果就出問題了。最後,不得已在他的 Win7 Server 加入我這個執行命令者 USER1 的帳號後,改用 mount.cifs 192.168.x.x:/DIR share -o user=USER1 就可以了。

可是我改用 USER2 來 mount 還是有問題,我用 USER2 的身分登入、掛載,執行

USER2:~$ smbclient -d7 -L 192.168.x.x -o user=USER2 debug

結果可以找到以下錯誤

SPNEGO login failed: Logon failure
session setup failed: NT_STATUS_LOGON_FAILURE

到那台 Win7 Home Premium 查過後,找到原因了,原來那台電腦的使用者有改過名稱,原本叫 user,後來改叫 USER2,於是我 mount.cifs 改用 -o user=user 掛載,終於 ok。於是,我又想,Linux 上的 username 還是叫 USER2,與 user 不符啊!

那執行命令的使用者到底能不能 mount 其他使用者的資源?

USER1~$ mount.cifs //192.168.x.x/DIR share -o user=user

結果 ok 了,所以,之前的認知「要連到 Win7 Home Premium 的分享,執行命令者必需在 Win7 Server 上也有一個帳號」是錯的,當然 server 端到少要開放分享給某使用者,而 client 端只要用 smbpasswd -a 加入該使用者就可以了。之前的問題,都是因為那台 Win7 Home 的使用者改過名字的關係。

edited: 8
coolcd
joined: 2008-01-21
posted: 2601
promoted: 348
bookmarked: 95
2subject: Promote 0 Bookmark 02012-03-23quote  

現在 Debian Squeeze 的 smbclient 版本是 3.5.6

不需要修改 Win7 的設定

就能正常掛載 Win7 分享的資源

使用 nautilus 如遇到下列錯誤

---
DBus error org.freedesktop.DBus.Error.NoReply:
Message did not receive a reply (timeout by message bus)
---

可參考 關於gnome nautilus(gnome內建的檔案瀏覽器)和MsWindows互相共享資料夾的問題

edited: 1

cht電腦資訊Linux
adm Find login register
views:22168