先簡單介紹一下smb.conf的格式,它大概是長這樣子的:
[section1]
parameter1
parameter2
[section2]
parameter3
parameter4
...
方括號裡的是section,每個section分別代表一份共享資料,底下的parameter則是要套用至該section的規則與設定,包括了路徑、使用者及讀寫權限等,每個parameter只會作用在該section,不同的section間是各自獨立的。舉例來說:
[Project]
path = /project
valid users = Bob
read only = no
這樣子的設定就表示只有使用Bob這個帳號才能透過Samba server去讀寫/project資料夾。
除了一般通用的section之外,有三個特殊的section是有額外的功能的,它們分別是[global]、[homes]和[printers],其中[printers]顧名思議和印表機共享有關,在這裡暫時用不到所以我們略過它只介紹另外兩個。
前面有提到每個parameter的設定只會作用在所屬的section之中,但有些很常用的設定是每個section都會需要,如果要在每個section中一一重複這些設定是很令人厭煩的,為此Samba提供了[global]這個特殊section,我們只要把那些共同設定放在[global]底下,它們就會自動套用至所有的section了。
[homes]允許我們可以根據不同的登入帳號自動連結到Linux的/home/下的對應使用者資料夾。如果沒有[homes]這個特殊功能,我們想幫Bob、Alice和Michael建立各自的共享資料夾可能得分別設置多個section:
[Bob]
path = /home/Bob
valid users = Bob
[Alice]
path = /home/Alice
valid users = Alice
[Michael]
path = /home/Michael
valid users = Michael
...
可以想像的當使用者一多就會造成管理上很大的不方便,[homes]主要目的就是幫我們解決這個麻煩,我們只要在[homes]裡加上一行
valid users = %S
那當Bob登入時就會自動連到/home/Bob,Alice登入時就會自動連到/home/Alice了。
另外值得一提的是smb.conf是使用「#」「;」當註解符號,也就是在這兩個符號後面的一整行都會被視為註解而被忽略(如果你使用vi/vim應該可以發現註解的那幾行顏色是不一樣的),smb.conf已經有幫我們先寫好了許多設定並在這些設定前面加上「;」讓它暫時失效,當我們需要這些設定時只要拿掉最前面的註解符號即可,在使用上可說是相當方便的。
我們的virtual machine只會有我們自己的Windows去連它,理論上最簡單的方式應該是直接建立自己專屬的section就行了。但在這裡我們還是嘗試著遵循Samba的通用設定方式來修改[global]和[homes]。
修改smb.conf
要修改/etc/samba/smb.conf同樣必需具備root權限,如果上次設定網路後有登出或重開機,請先$ sudo su
開啟/etc/samba/smb.conf後先找到[global],底下有一行
# security = user請把前面的#拿掉,設定security = user後我們從Windows要連線到Samba server時就必須先通過user/passwd的認證才行。
另外由於Windows與Linux字元編碼不同,在[global]底下還得新增以下三行來指定對應的字元編碼方式
unix charset = utf8 display charset = utf8 dos charset = cp950
接下來找到[homes],把「;」拿掉並調整成底下的設定:
[homes] comment = Home Directories browseable = no read only = no create mask = 0755 directory mask = 0644 valid users = %S各個設定的簡單說明如下:
comment = Home Directories
這是我們從Windows上看到的註解:
browseable = no
這個設定會決定Windows能否看得到共享資料夾,單就字面來看設為no就表示看不到。但它在[homes]這個特殊的section裡卻會有不同的解讀方式,設為no我們無法看到"homes"但卻能看到真正的user帳號。
read only = no
允許我們擁有「寫入」的權限,這樣我們才能在Windows修改Linux的檔案及資料夾。
create mask = 0755
directory mask = 0644
這個是我們從Windows端建立檔案或資料夾在Linux系統的使用權限,基於安全考量Samba預設值都是700,但我習慣改為一般的Linux檔案權限。(不然由Windows建立的檔案在ls -al時會看到-rwx------,和其他的-rwxr-xr-x放一起總是覺得很突兀)。
valid users = %S
這個是前面所說的,根據不同的登入帳號對應到Linux /home底下的使用者帳號。
設定完成後存檔退出,並在shell輸入以下指令來重新啟動Samba server:
# service nmbd restart
# service smbd restart
從Windows建立連線
從Windows連上Samba server有幾種方法:1. 開啟「我的電腦」,按下「連線網路磁碟機」,選擇一個磁碟機代號,並在資料夾裡輸入
\\[ip位址]\[Linux帳號]
然後按下完成,會彈出視窗詢問帳號密碼,輸入後就能連上Samba server。
我們在Linux下的home directory已經成功出現在Windows上了
2. 透過網路上的芳鄰。這個方法可以直接看到主機名稱,點進去後也是輸入帳號密碼就能看到Linux上的家目錄。
如果找不到的話就直接在Windows檔案總管下輸入\\[ip位址]
測試
首先我們點進共享資料夾,可以看到Linux家目錄底下的檔案已經能在Windows系統上瀏覽,還能用記事本去開啟編輯它。接下來我們透過Windows建立一個新的資料夾dirFromWin
然後再從PuTTY使用ls -l查看內容。
如此一來我們就可以在Windows上使用熟悉的文字編輯器(如記事本、 UltraEdit)來修改檔案了,要把檔案從Windows搬到Linux也只要用滑鼠直接拉過去即可,真是超方便的啦!
P.S. 1 前面[homes]的browseable如果設為yes,那當我們連到Samba時除了使用者目錄外,還會多看到一個"homes",但點進去看其實內容是完全相同的。
P.S. 2 若想更深入了解samba的設定可以參考 smb.conf(5)或samba(7)這兩份on-line manual,或是到Samba官網查看HowTo文件 http://www.samba.org/