早期人們要將資料由A電腦帶到B電腦,最常使用的方法就是以儲存媒體(例如軟碟、光碟、ZIP軟碟,及目前很流行的隨身碟等)來傳遞。使用者將資料由A電腦複製到媒體上,再由B電腦將媒體的資料讀出來,以達成資料的傳輸。後來藉由TCP/IP 網路的流行,很多的資料可以透過通訊協定來達成傳輸的目的,例如WWW伺服器主要提供網頁資訊,而我們用戶端則透過瀏覽器連接至WWW伺服器以取得網頁資料;又例如我們使用郵件編輯器(例如Outlook Express)編輯完郵件後,以郵件伺服器來進行郵件的接收與傳送。
網路資料的傳輸行為
假如有伺服器來提供資料的傳輸,那麼用戶端在資料傳輸方面的使用上,就會相當的方便。不過,如果將資料的傳輸行為局限在一個辦公室內呢?難道要在一個小小的辦公室內,架設檔案伺服器來協助資料的傳輸嗎?這樣似乎又有點小題大作。
為了達成這個區域網路內(Local Area Network)的資料傳輸目的,許多不同的單位便進行一些通訊協定的研發。目前使用最廣泛的通訊協定,可能是Windows系列的Common Internet File System(CIFS)。什麼是CIFS呢?簡單地說,就是『網路上的芳鄰』(以下簡稱為網芳)。我們可以透過網芳在兩部Windows的電腦上互通資料,而不必去理會對方電腦的磁碟使用的是什麼檔案格式(File System)。這種分享資料的模式,我們也可以稱為是一種網路檔案系統。如(圖一)所示,只要在一部電腦上面(WWW1)設定好要分享出來的目錄,別部電腦在登入後,就可以看到WWW1所提供的目錄資料了。
SAMBA的產生與運作
Windows與Windows之間可以透過網芳來進行資料交流,那麼另一個作業系統的大宗Unix Like(諸如FreeBSD/Linux/BSD/Solaris等,底下以Linux做為代表)是否可以加入這個資料交流的機制呢?
為了解決這個問題,1991年一個名叫Andrew Tridgwell的大學生,透過資料封包的反向解析寫出一個網路通訊協定,而這就是Server Message Block(SMB)Protocol。事實上,這個SMB協定就是CIFS的主要核心,而架構在這個通訊協定上的自由軟體,也就是我們要介紹的Samba。使用者只要在Linux的系統當中安裝Samba這個套件,那麼Linux也可以加入到Windows的網芳當中,並達到資料分享的目的。
那麼在Linux上面的Samba有哪些功能呢?這就得要提到網芳可以達到的功能了。筆者列出幾個較為廣泛使用的功能,介紹如下:
- * 檔案與列印服務:這是網芳最主要的功能,提供檔案分享與列印分享。
- * 認證與授權(Authentication and Authorization):藉由使用者登入網芳時,提供的不同帳號/密碼來給予適當的權限,達到存取限制與保護本機資料的目的。
- * 名稱解析:在Windows系統上面,每部電腦都有一個特定的名稱,我們稱為NetBIOS Name;而Samba可以協助Linux系統查詢與解析NetBIOS Name。
- * 服務訊息提供(提供瀏覽):當我們使用網芳連上某一部主機時,總是會顯示出該主機允許使用者所使用的資料;這個資料訊息,就是這裡從這裡提供。
談到這裡,先讓我們來看一看,在平時的狀況下,網芳是如何運作?
- 1. 當使用者想要登入某部Windows主機,並使用它所提供的檔案資料時,必須要加入該主機的工作群組。而使用者的電腦也必須要設定一個在該群組當中獨一無二的NetBIOS名稱,以提供群組成員瀏覽。
- 2. 使用者在登入主機時,所輸入的帳號與密碼將會決定登入者的權限。換句話說,使用者在登入該主機後,能不能使用該主機所提供的檔案資料,還要看 Windows主機有沒有提供該使用者的使用權限。所以並不是登入該Windows主機後,使用者就可以無限制地取用該主機的檔案資源。簡單來說,如果對方主機允許使用者登入,但卻沒有開放任何資源讓使用者取用,那麼即使是成功地登入主機,也無法查看對方的硬碟裡面的資料。
Samba的基本運作模式與上述網芳的兩個步驟大致相同,不過Samba是使用兩個服務(Daemons)來提供上述的功能,其介紹如下:
- 1. smbd:這個Daemon 的主要功能就是用來管理Samba主機的認證機制、分享檔案與印表機的權限設定等。同時,一部Samba主機可以針對每一個使用者做出不同的權限管理。
- 2. nmbd:這個Daemon則是用來管理和提供網域內的NetBIOS name,及工作群組等資訊與解析。
Samba的一般性應用
如果讀者電腦使用的是Linux系統(如X Window系列),卻又一直很想加入 Windows的網芳,那麼Samba就是讀者的大救星。讀者只要使用Linux系統預設的Samba套件,並且在 /etc/samba/smb.conf 這個檔案當中進行適當的設定,就可以利用Samba所提供的相關功能來提供本機資源,以及進入別台主機的網芳了,其設定是非常地簡單。
那麼如果讀者的Linux是伺服器呢?還有沒有必要架設Samba呢?這就要見仁見智了。以筆者而言,因為筆者常常進行網頁文件的修訂,而筆者的日常工作的PC與伺服器並非同在一台上面,所以必須利用Samba的功能,筆者才可以輕鬆地將伺服器上的某個目錄連線到筆者的工作機上,如(圖二)所示。如此一來,在編修網頁的即時性/一致性上面都比較好,最起碼筆者不用將資料在兩部電腦之間作反覆複製的動作。
此外,Samba除了可以分享檔案與目錄外,也可以分享印表機。筆者研究室裡的好幾部電腦,就是直接以Linux分享的印表機來印製報告。讀者可能會說:「Windows也可以辦的到啊!沒有什麼了不起吧!」
話是沒錯,不過因為Linux在做為伺服器主機時,網路功能畢竟還是比較穩定一點,還可以24小時且全年無休的努力工作。
如果在一個辦公室的區域網路環境內,每個員工常常會使用到某些工具軟體或是一些重要資料,那麼使用者當然可以架設一部檔案伺服器。其最簡單的作法就是啟用網芳的功能來分享出一個特定的目錄,然後讓所有的員工登入去取用。不過,由於目前透過網芳及區域網路來攻擊Windows作業系統的電腦病毒實在是太多了,所以用Linux的Samba所提供的功能來取代網芳,其實就是一個很好的解決方案了。因為Linux對於網芳病毒的攻擊,並不會有很大的影響。
在這樣的應用中,主要是讓Linux伺服器與Windows用戶端放置在同一個等級的環境,這也就是所謂的Peer/Peer連線架構。什麼是Peer/Peer 架構?簡單來說,就是在區域網路裡面的所有PC均可在自己的電腦上面管理自己的帳號與密碼,且也都具有獨力執行各項軟體的能力(例如每一部電腦都有Office軟體),然後再藉由網路將各個PC連結在一起的一個架構,所以每一部機器都可以獨立運作。
在這樣的架構下,如果有兩部電腦,其名稱假設為PC1與PC2。當使用者要坐在PC1這部電腦前使用PC1的資源時,就必須要知道登入PC 1的使用者名稱與密碼,才能夠登入使用。而如果使用者想由PC1經過網路連線到PC2,以使用PC2的檔案資源時,就必須要知道PC2的帳號與密碼,才可以順利的登PC2。
這樣的架構在目前小型辦公室裡面是最常見的。例如辦公室裡面有十個人,每個人桌上可能都安裝有一套Windows作業系統的個人電腦,而這十部電腦都可以獨立進行辦公室軟體的執行、獨立上網或獨立玩遊戲等。因為這十部電腦都可以獨立運作,所以不會有一部電腦關掉,其他的電腦就無法工作的情況發生,這也是Peer/Peer 的典型架構。
使用Peer/Peer 架構的好處是,每部電腦均可以獨立運作,而不受他人的影響。不過其缺點是,當整個網域內的所有人員都要進行資料分享時,光是要知道所有電腦裡面的帳號與密碼,就會令人很傷腦筋。所以Peer/Peer的架構是比較適合小型的網域、沒有需要常常進行檔案資料分享的網路環境,或是每個使用者都獨自擁有該電腦的擁有權(換句話說,就是該電腦只讓使用者獨自使用,而不能當公有電腦來用)。如果該單位的所有PC均是公有的,而且您需要統一控管整個網域裡面的帳號與密碼,或許可試試底下的方法。
Samba的企業應用(PDC)
假設今天讀者服務的單位有10部電腦,但卻有20個員工,那麼這20個員工就需要輪流搶著這10部電腦用。如果每部電腦都如同Peer/Peer的架構時,那麼每部電腦就需要輸入這20個員工的帳號與密碼,以讓他們登入。假如今天有個員工想要變更自己的密碼時,那麼就需要到10台電腦上面進行密碼變更的作業。否則讀者就必須要記得這10部電腦裡面,那一部電腦是記憶那一個密碼,這將令人煩擾不已,而Peer/Peer架構就不適用於這樣的情況了,這個時候就需要藉由Domain Model來達成讀者的需求。
所謂Domain Model的概念其實也很簡單,既然使用電腦資源需要帳號與密碼,那麼我將所有的帳號與密碼都放置在一部主控電腦(Primary Domain Controller,PDC)後,任何人在我的網域裡,想要使用其中的一台電腦時,都需要在螢幕前方輸入帳號與密碼,然後再藉由PDC主機的辨識,才給予適當的使用權限。換句話說,不同的身份還具有不一樣的電腦資源使用權限,如(圖三)。
PDC主機控管整個網域裡面的各個機器(PC A - PC D)帳號與密碼的資訊,假如今天有個使用者帳號名稱為Ken,且密碼為“mypasswd”時,他不論使用哪一部電腦(PC A - PC D),只要在螢幕前方輸入Ken與其密碼,該機器便先到 PDC上查驗是否有Ken這個帳號和Ken的密碼。且PDC主機會給予Ken這個使用者的相關電腦資源使用權限,以及工作環境設定檔等資料。當Ken在任何一部主機上面登入成功後,在每一部電腦都會有他所設定的電腦環境與其資料。
這樣的架構比較適合用在人來人往的企業裡,例如當系統管理員要控管新進人員的電腦資源使用權時,可以直接針對PDC來修改就好了,不需要在每一部主機上去作修改。對於系統管理員來說,這樣的架構在控管帳號資源上,當然是較為簡單與容易
在Windows裡面,這樣的架構首推Active Directory伺服器(AD),然而AD伺服器的建置經費可不是每家公司都付的起。假如使用者不想付費,那麼可以使用自由軟體的Samba,因為它能夠讓使用者輕易的架設起PDC主機。
結語
Samba最初發展的目的,是想要讓不同的平台間的檔案分享服務更為便利,而它也確實達到了這樣的功能。不過在後來自由軟體工作者的努力下, Samba已可達到更為企業級應用的解決方案。目前Samba的穩定版本已經出到3.0.6版,並支援更多樣化的認證模組,例如MySQL與LDAP等等,讓Samba的應用更為廣泛。
<作者為資深自由軟體資深工程師,聯絡方式:vbird@tsai.adsldns.org>