SAMBA的用途
剛才介紹的 NFS 是在 Linux 機器之間分享檔案﹐對於一些習慣了 MS Windows 的朋友(如我)來說﹐能否和 Linux 分享資源呢﹖有此問題者放一百個心好了﹕ 使用 SAMBA 服務您就做得到﹗通過 SAMBA﹐您不但可以分享到檔案﹐也可以分享到諸如印表機等資源呢。
更甚者﹐它還可以擔當 Microsoft 網路的 PDC 角色﹗不過這需要您花更多時間去設定了。
設定SAMBA
設定 SAMBA 一點也不複雜﹐讓我們先設定 Linux 部份吧﹕
- 先確定在 /etc/services 檔案裡面這些句子沒有被註解掉﹕
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
|
- 然後是建立 /etc/lmhosts 檔案(如果它不存在的話)﹐建立起各主機的對應。我們只需將 MS Winndows 主機對應建立起來則可﹐但一定要包括作為 SAMBA 伺服器的 Linux 主機本身﹕
192.168.0.17 redhat52
192.168.0.15 PII266
192.168.0.12 nt4ser2
192.168.0.22 redhat62
192.168.0.16 w2000ad
|
- 然後是修改 /etc/smb.conf 這個檔案。讓我們先從簡單做起﹐所以我們接受預設值則可﹐只需修改下面的部份(該檔案的註解符號是“;”)﹕
對了﹐如果想使用者能看到中文檔案名稱﹐可以將這行加進 [global] 設定中﹕
......
;如果想使用者能看到中文檔案名稱﹐可以將這行加進 [global] 設定中﹕
client code page = 950
......
;填寫好wkgp﹐最好和Windows的一致:
workgroup = chen
......
;將 /tmp 分享出來﹕
[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
......
|
如果您還想分享其它目錄﹐參考上面這幾行自行設定則可。
- 用 testparm 來測試一下smb.conf的語法是否正確。
- 重新啟動 SAMBA ﹕
/etc/rc.d/init.d/smb restart
|
- 執行 setup --> System services --> 確定﹕[ * ] smb 。
然後﹐讓我們設定 Windows98 部份。
- 將網路卡和 TCP/IP﹐及 NetBEUI 安裝好(如果不會﹐請參考其他資料﹐例如﹕網路與我網站之“架設網路” )。還要確定和 Linux 的連接沒問題。
- 建立或修改 Lmhosts 檔案﹕
讓其內容和 Linux 上面的 lmhosts 一樣。
- 修改登錄檔(registry)﹕
開始 --> 執行(R) --> 輸入‘regedit’並按 Enter --> 找到這個路徑﹕
HKEY_LOCAL_MACHINE\System\CurrentControlSet
\Services\VxD\VNETSUP
在右邊的視窗按下右鍵 --> 新增(N) --> DWORD值(D) -->輸入﹕
然後雙擊剛建立的機碼﹐將‘數值資料(V)’設定為“1”。
(如果您懶得這樣做﹐點這裡 將‘ptpwd.reg ’檔案下載到 Windows ﹐然後雙擊它即可。這個只是給 win95 用的﹐其它都可以在 /usr/doc/samba-x.x.x.x/docs 下找到相應系統的 reg 檔。)
- 然後再指定群組﹕
開始 --> 設定 --> 控制台 --> 雙擊‘網路’--> 選擇‘識別資料’--> 確定‘工作群組’和 Linux 的 smb.conf 裡面的‘workgroup=’一致。
- 登出 Windows ﹐再重新登錄。(必要時要重新啟動)
測試和修改
經過上面一番折騰之後﹐當您登錄 Windows 之後﹐應該可以在‘網路芳鄰’ 那裡看到 Linux 的機器了。不過﹐有時候也很奇怪﹐我記得當初怎麼弄也不能在網芳上面看到 Linux 機器﹐但卻可以使用 net use w: \\redhat52\tmp 將 redhat52 上面分享出來的 /tmp 目錄 map 進 Windows 檔案系統的 w: drive下面。但是﹐後來也沒做什麼設定﹐開關幾次機器之後(所有在網路上的機器都關掉了)﹐卻忽然看到網芳上面的 Linux 了﹗我也不明所以﹐反正﹐到現在還工作就是了。
要和 samba 連接﹐關鍵要確定 netbios 的連接被正確的建立起來。您必須將所有參與連接的主機的 IP 對應寫在 /etc/lmhosts 裡面﹐同樣的﹐在 Windows 主機那邊﹐要確定 \windows\lmhosts 也有著同樣的設定。除非您有 wins 伺服器提供 netbios 的名稱解析。
以前的 samba 比較好連接﹐只要將 /etc/smb.conf 裡面的 security = user 設定起來就可以了。不過現在的新版本或許還要將下面兩行前面的註解符號(﹔或 #)拿掉﹕
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
|
然後執行﹕
touch /etc/smbpasswd
chmod 600 /etc/smbpasswd
smbpasswd -a netman
New SMB password:
Retype new SMB password:
|
(注﹕將 netman 改為您欲增加的使用者帳號﹐而且它必須已經存在於 /etc/passwd 裡面。同時您也使用相同的帳號從 Windows 那邊登錄。)
假如不想做這麼複雜﹐那麼只需要將 security = 修改成 share 就可以了﹗不過﹐share 的分享層級其實是非常有限制的﹐例如﹐您不能像下面那樣有針對性的對分享目錄做出限制﹕
[study]
comment = A Study Area
patch = /home/http/html/study
public = no
browseable = yes
guest ok = no
valid users = kenny, netman, user_1, user_2
read only = yes
write list = kenny, netman
create mode = 0775
|
注意哦﹕以上設定只有當 security 被設定為非 share 的時候才有效哦﹐也要注意 smbpasswd 的設定。不過﹐有一個常被初學者忽略的問題是﹐雖然您已經在 smb.conf 上面設定好使用者﹐並且允許他們寫入分享目錄﹐那僅是 samba 層級的權限設定而已。要真正能寫入目錄﹐還要確定 linux 本身的檔案系統權限能夠讓使用者寫入才行。這時候﹐或許就是您大玩 owner、group、other 三者權限的時候了﹐那就請 man 一下 chmod 和 chown 吧。但是別忘了﹐如果您更改了 User ID 或 Group ID﹐那 Windows 那邊就要重新登錄網路才會生效哦~~~ 切記切記﹗免得到時候浪費了一大堆寶貴時間都不知道問題出在哪裡。
再有﹐如果您老是看到什麼“無法存取 XXXXX ﹐找不到電腦或資源分享名稱 ....”﹐我這裡教您一個狠招數﹐就是將下面的句子換成這樣(或取消句子前面的註解)﹕
local master = yes
os level = 66
preferred master = yes
|
從Linux 那邊要使用 Windows 上面的分享資源的話(可以參考網路基礎關於網路管理模式的部份)﹐則要使用 smbmount :
smbmount "\\\\pii266\temp" /mnt
|
如果上面的句子不成功﹐可以試試這個﹕
smbmount "\\\\pii266\temp" -c 'mount /mnt'
|
果您要檢查一下連接﹐看看 Windows 機器有什麼分享資源﹐可以使用﹕
您也可以使用﹕
smbclient \\\\pii266\\temp
|
來連接對方﹐但這樣的情況有點像使用文字模式的 FTP ﹐當然沒有使用 smbmount 那麼方便啦。
如果您發現從 Windows 那邊不能讀或寫 Linux 的資源﹐請確定一下 Linux 下面的檔案權限﹐可以使用 chmod 和 chown 命令進行修改﹐當然﹐您得確定從 Windows 那端登錄的身份要能通過 Linux 這邊的安全信任。如果您想使用 NT 本身的安全認證﹐可以將 /etc/smb.conf 下面的﹕
security = user
改成﹕
然後修改下面這行﹕
password server = nt4ser2
|
將句子前面的‘﹔’拿掉﹐並將NT 的 PDC 名稱指定好(要確定 /etc/hosts 和 /etc/lmhosts 記錄正確)。這裡的‘nt4ser2’是我的NT網路的PDC主機名稱﹐請自行修改。設定的時候﹐要給‘=’兩邊留一個空位。
如果您的網路上並沒有 NT 的機器﹐您可以把您的 SAMBA 當成 PDC 來玩哦。下面是我在新聞組上和網友的一篇討論﹐就是說如何讓 samba 當 PDC 的﹐可以參考一下﹕
網中人 wrote in message news:...
>
> wcl wrote in message
> news:3c8hK5$GTJ@bbs.cis.nctu.edu.tw...
> >
> >
> > 當我設定我的samba server為PDC 且我要讓連上來的user 自動將某個目錄map
> > 成網路磁機,所以我建立/usr/local/samba/netlogon來放置每個user一連上來所要
> > 執行的batch file, 如 user1.bat,內容為 net use g: \\server1\dir1
> > 可是我如果連上來一執行,都會出現以下的錯誤訊息
> >
> > Error 67: The specified shared directory cannot be found. Make sure you
> have
> > specified the network name correctly. If the problem persists, contact
> your
> > network administrator.
> >
> > 但是我如果直接在ms-dos模式,執行同樣的指令,則一切 OK,請問各位大哥有沒有
> > 相同的經驗,或解決之道.....不勝感激...
>
> 或許您的機器還沒有正式加進 domain 吧﹐登錄後的連接﹐應該是在 workgroup 裡面
> 做的﹐所以可以順利完成。
>
> 請先確定您在登錄 windows 的時候登錄畫面有三欄﹕
> 1﹐帳號 (假設為 user1)
> 2﹐密碼 (xxxxxxx)
> 3﹐網域 (假設為 mydomain)
>
> 如果沒有第三個﹐請至控制台 -> 網路 -> 組態 -> Client for microsoft
> network -> 選擇 "登入 windows nt 網域" ﹐並將 domain name 填好 -> OK 後回到
> 前一個畫面﹐確定 “主網路登入”為 Client for microsoft network -> 然後到
> “識別資料”﹐將電腦名稱記好(如 wks1)﹐同時將 workgroup 設為和 domain name
> 一致﹐它們和 sama 上面的 workgroup 也應該一樣(如 mydomain)。
>
> 再來到 linux 那裡(假設叫 linuxpdc)﹐為 windows 電腦增加一個帳號﹐也就是剛才
> 記下來的那個﹐例如 wks1 ﹐您必須在名稱後面加上一個 "$" 符號﹐例如﹕
> useradd wks1$
> 完成後修改 /etc/passwd﹐將其家目錄和 shell 改掉﹕
> wks1$:*:nnnnn:nnnnnn:xxxxxyyyyy:/dev/null:/dev/null
> 同時把它的 home 也刪除掉﹕
> rm -rf ~wks1$
> 接著增加到 samba 密碼中去﹕
> smbpasswd -a -m wks1
> 注意﹕沒有 $ 符號﹐但一定要有 -m 參數。
>
> 這時請確定網路上沒有其它 NT 的機器在當 PDC 的角色﹐且 /etc/smb.conf 至少要包
> 括如下設定﹕
>
> [global]
> netbios name = linuxpdc
> workgroup = mydomain
> encrypt passwords = yes
> domain logons = yes
> secrurity = user #(只能是 user!)
> os level = 34
> lcoal master = yes
> preferred master = yes
> domain master = yes
> logon script = %U.bat
> wins support = yes
> time server = yes
>
> [netlogon]
> comment = The domain logon service
> path = /export/samba/netlogon #(請改為正確路徑)
> public = no
> writeable = no
> browsable = no
>
> 然後﹐您必須在 windows (或 dos ) 下面編輯使用者的 batch 檔﹐例如 user1.bat
> ﹕
> net time \\linuxpdc /set /yes
> net use p: \\linuxpdc\public
> net use t: \\linuxpdc\tmp
> net use u: \\linuxpdc\user1
>
> 然後將檔案存到 linux 機器﹕ /export/samba/netlogon/user1.bat (路徑依實際設定
> 為準)
> 這裡我假設 user1 已經存在於 linux 系統和 smbpasswd 裡面了。(否則用 useradd
> 和 smbpasswd -a 增加)
>
> 修改完之後用 testparm 檢查一下﹐然後重新跑 samba:
> service smb restart
>
> 重新在 windows 那邊登錄﹐確定沒有遇到關於 domain 登錄的錯誤信息。否則重新設
> 定。
>
> 您可以參考 O'Reilly 的 “Learning SAMBA” 或下面的網頁﹕
> http://www.kneschke.de/projekte/samba_tng/files/pdc.php3
> http://us1.samba.org/samba/docs/ntdom_faq/samba_ntdom_faq.html
>
>
> 順便一提﹕要完全發揮 PDC 的功能﹐可能要等到 samba 2.1 版本 (不知道現在出了沒
> 有﹖)﹐或是 samba TNG 版本。
>
|
另外﹐如果您要進行跨網段的 samba 設定﹐例如用 VPN 連接兩個辦公室的內部網路之後﹐要讓所有 windows 能相互分享資源。請留意 local master browser , domain master browser , 及 wins server 的設定﹕
- 在每一個網段裡面指定一台 local master browser ﹐透過提高 os level 和 prefer master 和 local master browser 來設定﹐同時指定好各自的 netbios name (如果 smb.conf 裡面沒有這行﹐自己新增﹐例如: netbios name = server1)。
- 然後挑選其中一台 local master browser ﹐將 domain master browser 和 wins support 打開。
- 將其餘的 local master browser 之 wins server 指向上一步動作的主機 IP。
- 將所有 master browser 的 IP 和主機名稱對應﹐寫在 lmhosts 檔裡面﹐並至於所有 master browser 的 /etc 目錄底下。
- 修改各 dhcp 伺服器﹐將 /etc/dhcpd.conf 之 option netbios-name-servers ﹐或是手工的將所有 windows 主機之 wins server 指定為第 2 步設定的主機 IP﹐並重新登入 windows。
- 如果還是不能﹐那麼嘗試設定 smb.conf 之 remote announce 或 remote browse sync ﹐除了自己外﹐將其它 local master browser 之 IP 寫上去﹐用空白鍵分隔。
如果您的網路之間有使用到 IP Masquerade 技術的話﹐建議您看看如下網站。﹕
http://nbfw.sourceforge.net/
最好先將 background 和 installation 看完再決定您是否要在 IP MASQ 下面維護 samba 。我個人建議是﹕能免則免。
最後﹐假如您是使用 daemon 來啟動 samba 的話﹐確定在 /etc/inetd.conf 裡加進下面的句子﹕
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
|
但要注意的是﹐預設情況下﹐系統是以 stand alone 的方式來啟動 samba 服務的﹐除非您確定系統是使用 daemon 來設定﹐否則不用做此修改。
假如您有興趣知道更多的設定﹐可以參考 HOWTO 和 man﹐其實﹐/etc/smb.conf 本身就有很詳細的說明了。另外﹐您還可以看看samba這篇文章﹐說不定對您有很大啟發哦~~~~
如果您有 SAMBA 的問題﹐可以先到下面這個 http://www.linpus.com.tw/nicedoc/samba/sambafaq.html 網頁看看﹐那裡列出來許多 SAMBA 的常見問題與答案。