2014年10月26日 星期日

用VirtualBox建立Linux開發環境(三) Samba server設定

我們在用VirtualBox建立Linux開發環境(二)已經完成SSH連線的設定,現在可以用PuTTY來操作Linux了。接下來要設定的是Samba server。Samba是允許Linux上的檔案系統能夠透過Windows的NetBIOS protocol(就是「網路上的芳鄰」)來共享。在設定上蠻簡單的,只要修改/etc/samba/smb.conf這個檔案就可以了。

先簡單介紹一下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新建的dirFromWin也能順利被Linux系統看到了,而且它的owner user/owner group及檔案存取權限與直接在Linux上使用mkdir建立的完全沒有兩樣。

如此一來我們就可以在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/

沒有留言:

張貼留言