`

SAMBA 伺服器

阅读更多

最近更新日期:2006/12/29
在一般的區域網路中 (LAN) 如果都是 Windows 電腦,那麼使用『網路上的芳鄰』這個功能,就可以讓不同的 Windows 電腦分享彼此的檔案囉!但萬一這個 LAN 裡面有個 Linux 主機時,我怎麼讓 Linux 也加入這個 Windows 電腦當中的『網路上的芳鄰』呢?也就是說,讓 Windows 電腦可以透過『網路上的芳鄰』來存取 Linux 主機上面的檔案!呵呵!那就是 SAMBA 這個伺服器的主要目的了!SAMBA 是很有用的一個伺服器,他可以讓您的 Linux 剎那間成為一個檔案伺服器 (File Server),並提供整個 LAN 裡面的 Windows 很簡單的就可以對 Linux 主機進行檔案的存取動作。不僅如此, SAMBA 也可以讓 Linux 上面的印表機成為印表機伺服器 (Printer Server) ,鳥哥個人覺得, SAMBA 對於整個 LAN 的貢獻真的是很大!那麼就趕緊來玩一玩吧! ^_^


大標題的圖示本章的行前準備工作
這一章的主要目的為介紹在不同的平台上面利用同樣的協定來進行檔案的傳輸, 其實主要就是讓 Linux 與 Windows 主機之間能彼此透過『網路上的芳鄰』這個方式來分享檔案, 而最主要的目的就是當你的區域網路內辦公用的主機大多是 Windows 系統時, 可以透過網芳來存取 Linux 主機上面的資源,讓你不覺得有任何不一樣! 而閱讀之前你至少需要有底下的一些基礎概念:

大標題的圖示什麼是 SAMBA ?
在這個章節中,我們要教大家跳的是熱情有勁的巴西 SAMBA 舞蹈..... 喔不~搞錯了~是要向大家介紹SAMBA 這個好用的伺服器啦!咦!怪了! 怎麼伺服器的名稱會使用 SAMBA 呢?還真是怪怪的呢!那麼這個 SAMBA 伺服器的功能是什麼呢?另外, 他最早是經由什麼樣的想法而開發出來的呢?呵呵!底下就讓我們慢慢的談一談吧!


小標題的圖示SAMBA 的發展歷史與名稱的由來
在早期的網路世界當中,檔案資料在不同主機之間的傳輸大多是使用 FTP 這個好用的伺服器軟體來進行傳送。不過使用 FTP 傳輸檔案卻有個小小的問題, 那就是您無法直接修改主機上面的檔案資料!也就是說,您想要更改 Linux 主機上面的某個檔案時,你必須要將該檔案自伺服器上下載下來後才能修改。 也因此該檔案在伺服器與用戶端都會存在。這個時候,萬一如果有一天您修改了某個檔案, 卻忘記將資料上傳回主機,那麼等過了一陣子之後,呵呵,您如何知道那個檔案才是最新的?

  • 讓檔案在兩部主機之間直接修改
  • 既然有這樣的問題,那麼好吧,我可不可以在用戶端的機器上面直接取用 server 上面的檔案, 如果可以在用戶端直接進行 Server 端檔案的存取,那麼我在用戶端就不需要存在該檔案資料囉,也就是說, 我只要有 Server 上面的檔案資料存在就可以啦!有沒有這樣的檔案系統啊 (File System)! 很高興的是,前面我們已經提過的 Network File System, NFS 就是這樣的檔案系統之一啦!我只要在用戶端將 Server 所提供分享的目錄掛載進來, 那麼在用戶端的機器上面就可以直接取用 Server 上的檔案資料囉,而且, 該資料就像是我用戶端上面的 partition 一般,真是好用!

    而除了可以讓 Unix Like 的機器互相分享檔案的 NFS 伺服器之外,在微軟 (Microsoft) 作業系統上面也有類似的檔案系統,那就是 Common Internet File System, CIFS 這個咚咚啦!CIFS 最簡單的想法就是目前常見的『網路上的芳鄰』咯! Windows 系統的電腦可以透過桌面上『網路上的芳鄰』來分享別人所提供的檔案資料哩!真是方便。 不過,NFS 僅能讓 Unix 機器溝通, CIFS 只能讓 Windows 機器溝通。傷腦筋,那麼有沒有讓 Windows 與 Unix-Like 這兩個不同的平台相互分享檔案資料的檔案系統呢?

  • 利用封包偵測逆向工程發展的 SMB Server
  • 在 1991 年一個名叫 Andrew Tridgwell 的大學生就有這樣的困擾,他手上有三部機器,分別是跑 DOS 的個人電腦、DEC公司的 Digital Unix 系統以及 Sun 的 Unix 系統。在當時, DEC 公司有發展出一套稱為 PATHWORKS 的軟體,這套軟體可以用來分享 DEC 的 Unix 與個人電腦的 DOS 這兩個作業系統的檔案資料,可惜讓 Tridgwell 覺得較困擾的是,Sun 的 Unix 無法藉由這個軟體來達到資料分享的目的。

    這個時候 Tridgwell 就想說:『咦!既然這兩部系統可以相互溝通,沒道理 Sun 就必需這麼苦命吧?可不可以將這兩部系統的運作原理找出來,然後讓 Sun 這部機器也能夠分享檔案資料呢?』, 為了解決這樣的的問題,他老兄就自行寫了個 program 去偵測當 DOS 與 DEC 的 Unix 系統在進行資料分享傳送時所使用到的通訊協定資訊,然後將這些重要的資訊擷取下來, 並且基於上述所找到的通訊協定而開發出Server Message Block (SMB) 這個檔案系統,而就是這套 SMB 軟體就能夠讓 Unix 與 DOS 互相的分享資料囉!
    Tips:
    再次的給他強調一次,在 Unix Like 上面可以分享檔案資料的 file system 是 NFS,那麼在 Windows 上面使用的『網路上的芳鄰』所使用的檔案系統則稱為 Common Internet File System, CIFS
    鳥哥的圖示
  • 取名 SAMBA 的主因 ^_^
  • 既然寫成了軟體,想一想,總是需要註冊一下商標吧!因此 Tridgwell 就去申請了 SMBServer (Server Message Block 的簡寫) 這個名字來做為他撰寫的這個軟體的商標,可惜的是,因為 SMB 是沒有意義的文字,因此沒有辦法達成註冊。既然如此的話,那麼能不能在字典裡面找到相關的字詞可以做為商標來註冊呢? 翻了老半天,呵呵!這個 SAMBA 剛好含有 SMB , 又是熱情有勁的拉丁舞蹈的名稱,不然就用這個名字來做為商標好了! 這成為我們今天所使用的 SAMBA 的名稱由來啦! ^_^

    小標題的圖示SAMBA 常見的應用
    由上面說明的 SAMBA 發展緣由,您就應該不難知道咯, SAMBA 最初發展的主要目就是要用來溝通 Windows 與 Unix Like 這兩個不同的作業平台,那麼 SAMBA 可以進行哪些動作呢?
    • 分享檔案與印表機服務;
    • 可以提供使用者登入 SAMBA 主機時的身份認證,以提供不同身份者的個別資料;
    • 可以進行 Windows 網路上的主機名稱解析 (NetBIOS name)
    • 可以進行裝置的分享 (例如 Zip, CDROM...)
    底下我們來談幾個 SAMBA 伺服器的應用實例吧!

  • 利用軟體直接編修 WWW 主機上面的網頁資料
  • 相信很多人都是利用個人電腦將網頁製作完畢之後,再以類似 FTP 之類的服務將網頁上傳到 WWW 主機的, 但這樣有個困擾,那就是同時在用戶端與 WWW 主機上頭都有一份網頁資料,常常會忘記哪一份是最新的, 最麻煩的是,有時候下載下來的檔案已經經過好多修改了,卻在下次的 FTP 作業,不小心又下載一次舊資料, 結果將已經修改過的資料覆蓋過去~天吶!又要重寫一遍.....真是討厭!

    如果你有安裝 SAMBA 伺服器的設定的話,那麼透過『網芳』的功能,直接連線遠端伺服器所提供的目錄, 如此一來你可以直接在你的個人電腦上面修改主機的檔案資料,只有一份正確的資料而已喔! 這就有點像是『線上編修』呢,一修改完成,在 Internet 上面可以立刻檢驗,方便的很吶!

  • 做成可直接連線的檔案伺服器
  • 在鳥哥實驗室中,由於電腦數量不多,研究生常常會使用到不同的電腦 (因為大家都得搶沒有人用的電腦啊!) ,此外,也常常有研究生拿自己的 NoteBook 來工作,因此,有些團隊的資料就分散在各個電腦當中,使用上相當的不方便。 這個時候,鳥哥就使用 SAMBA 將硬碟空間分享出來,由於使用者要登入 SAMBA 這個伺服器主機時需要輸入使用者資料 (帳號與密碼),而不同的登入者會取得不一樣的目錄資源,所以可以避免自己的資料在公用電腦上面被窺視, 此外,在不同的公用電腦上面都可以登入 SAMBA 主機,資料的使用上面真是相當的棒啊!

  • 印表機伺服器
  • SAMBA 除了分享檔案系統外,也可以分享印表機喔,鳥哥的研究室好幾部電腦就是直接以 Linux 分享的印表機來印製報告的。您會說『啊 Windows 也可以辦的到啊!沒有什麼了不起的!』是啊。 但是因為 Linux 做為伺服器主機時,鳥哥認為 Linux 畢竟還是比較穩定一點,可以 24 小時且全年無休的努力工作吶。此外,因為目前透過『網路上的芳鄰』來攻擊區域網路的 Windows 作業系統的電腦病毒實在是太多了,防不勝防, Linux 對於這樣的攻擊並沒有很大的影響 (因為常見的攻擊手法均針對 Windows 而來~),所以也比較安全一些說~

    SAMBA 的應用挺廣泛的,尤其對於區域網路內的電腦來說,更是一項不可多得的好用的伺服器, 雖然或許你會說,SAMBA 的功能不過是模仿 Windows 的網芳以及 AD 相關的軟體, 那我直接使用 Windows 不就 OK 了?可惜的是, Windows XP 對於網芳的連線限制依版本而有所不同, 以企業常見的專業版 (Professional) 來說,他僅能提供最多同時十個連線到網芳的連線能力,這.....不太夠用吧! 所以囉,SAMBA 穩定、可靠又沒有限制連線數,值得學習吧!^_^!更多的應用您可以自行發掘吶!


    小標題的圖示SMB 使用的 NetBIOS 通訊協定
    事實上,就像 NFS 是架構在 RPC Server 上面一樣, SAMBA 這個檔案系統是架構在 NetBIOS (Network Basic Input/Output System, NetBIOS) 這個通訊協定上面所開發出來的。既然如此,我們當然就要瞭解一下 NetBIOS 囉!

    最早 IBM 發展出 NetBIOS 的目的僅是要讓區域網路內少數電腦進行網路連結的一個通訊協定而已, 所以考慮的角度並不是針對大型網路,因此,這個 NetBIOS 是無法跨路由的 (Router / Gateway)。這個 NetBIOS 在區域網路內實在是很好用, 所以微軟的網路架構就使用了這個咚咚來進行溝通的吶!而 SAMBA 最早發展的時候,其實是想要讓 Linux 系統可以加入 Windows 的系統當中來分享使用彼此的檔案資料的,所以當然 SAMBA 就架構在 NetBIOS 發展出來囉。

    不過 NetBIOS 是無法跨路由的,因此使用 NetBIOS 發展起來的伺服器理論上也是無法跨越路由的呢! 那麼該伺服器的使用範圍不就受限相當的多了?好在,我們還有所謂的 NetBIOS over TCP/IP 的技術呢!這是什麼樣的技術啊?

    舉個例子來說好了,我們知道 TCP/IP 是目前網路連接的基本協定,現在我們將 NetBIOS 想成是一封明信片, 這個明信片只能讓您自己欣賞而已,如果今天我們要將這個明信片送到遠方的朋友那邊時!就需要透過郵件系統 (例如郵局啦、國際快遞啦等等的) 來傳送了!這個 TCP/IP 就可以視為郵件傳遞系統啦!透過這個 NetBIOS over TCP/IP 的技術,我們就可以跨路由的使用 SAMBA 伺服器所提供的功能咯! 當然啦,目前 SAMBA 還是比較廣泛的使用在 LAN 裡面說。
    Tips:
    或許您會發現在 Windows 網路設定裡面常常看到 NetBEUI 這個咚咚,那是什麼呢?那個是 NetBIOS Extened User Interface 的簡寫,也是 IBM 在 NetBIOS 發展出來之後的改良版本。雖然這兩者的技術不太相同, 不過,我們只要知道一些簡單的概念就可以了!所以,在這裡我們不針對 NetBEUI 來介紹。
    鳥哥的圖示

    小標題的圖示SAMBA 使用的 daemons
    NetBIOS 當初發展時就著眼在區域網路內的快速資料交流,而因為是定義在區域網路內,因此他並沒有使用類似 TCP/IP 之類的傳輸協定,也就不需要 IP 的設定。如此一來資料如何在兩部主機之間交流呢? 其實主機在 NetBIOS 協定當中的定義為使用『NetBIOS Name』,每一部主機必須要有不同的 NetBIOS Name 才行, 而檔案資料就是在不同的 NetBIOS name 之間溝通囉!我們以一個網芳的設定來作簡單的說明好了:
    1. 取得對方主機的 NetBIOS name 定位該主機所在:
      當我們想要登入某部 Windows 主機使用他所提供的檔案資料時,必需要加入該 Windows 主機的群組 (Workgroup),並且我們的機器也必需要設定一個主機名稱,注意喔,這個主機名稱跟 Hostname 是不一樣的,因為這個主機名稱是架構在 NetBIOS 協定上的,我們可以簡單的稱呼他為 NetBIOS Name 好了。在同一個群組當中,NetBIOS Name 必需要是獨一無二的喔!

    2. 利用對方給予權限存取可用資源:
      在我們找到該主機名稱後,是否能登入該對方主機或者是取用對方主機所提供的資源, 還要看對方 Windows 主機有沒有提供我們使用的權限吶!所以,並不是登入該 Windows 主機之後我們就可以無限制的取用該主機的檔案資源了。也就是說,如果對方主機允許你登入, 但是卻沒有開放任何資源讓您取用,呵呵,登入主機也無法查看對方的硬碟裡面的資料的啦!
    我們的 SAMBA 則是透過兩支服務來控制這兩個步驟,分別是:
    • nmbd :這個 daemon 是用來管理工作群組啦、NetBIOS name 啦等等的解析。 主要利用 UDP 協定開啟 port 137, 138 來負責名稱解析的任務;

    • smbd :這個 daemon 的主要功能就是用來管理 SAMBA 主機分享的目錄、檔案與印表機等等。 主要利用可靠的 TCP 協定來傳輸資料,開放的埠口為 139 及 445(不一定存在) 。
    所以囉, SAMBA 每次啟動至少都需要有這兩個 daemons 喔!這可不要忘記囉! ^_^而當我們啟動了 SAMBA 之後,主機系統就會啟動 137, 138, 139 三個 port ,且同時會有 UDP/TCP 的監聽服務喔!這可不要忘記了! 因為後面設定防火牆的時候,還會使用到這三個 port 的呢! 


    小標題的圖示連線模式的介紹 (peer/peer, domain model)
    SAMBA 主機的應用相當的廣泛,而且可以依照不同的網域連線與使用者帳號、密碼的控管方式不同, 來加以不同的類別應用,例如最常見的 Workgroup 及 Domain 兩種方式的連線模式呢! 底下我們就是要來談一談這兩種最常見的區域網路的連線模式 peer/peer 及domain model。

  • peer/peer (Workgroup model):
  • peer 有同等、同輩的意思存在,那麼 peer/peer 由字面上的解釋來看,當然就是同等地位的 PC 架構了!這是什麼意思呢?簡單的來說,在區域網路裡面的所有 PC 均可以在自己的電腦上面管理自己的帳號與密碼, 同時每一部電腦也都具有獨力可以執行各項軟體的能力,只是藉由網路將各個 PC 連結在一起而已的一個架構, 所以,每一部機器都是可以獨立運作的喔!

    這樣的架構在目前小型辦公室裡面是最常見的。例如辦公室裡面有十個人,每個人桌上可能都安裝有一套 Windows 作業系統的個人電腦,而這十部電腦都可以獨立進行辦公室軟體的執行啊、獨立上網啊、獨立玩遊戲啊等等的, 因為這十部電腦都可以獨立運作,所以不會有一部電腦關掉,其他的電腦就無法工作的情況發生,這就是 peer/peer 的典型架構。

    以下圖的架構為例,在這樣的架構下,假設 A 君寫了一個報告書,而 B 君想要以網路直接取用這個報告書時,他就必須要知道 A 君使用的電腦的帳號與密碼,並且 A 君必須要在 PC A 上面啟用 Windows 的『資源分享(或者是共用)』之後,才能夠讓 B 君連線進入喔 (此時 PC A 為 Server) !而且, A 君可以隨時依照自己的喜好來更改自己的帳號與密碼,而不受 B 君的影響,不過, B 君就得要取得 A 君同意取得新的帳號與密碼後,才能夠登入 PC A 喔!反過來說,同樣的, A 要取得 B 的資料時,同樣需要取得 PC B 的帳號與密碼後,才能夠順利登入啊 (此時 PC A 為 Client 喔)!因為 PC A, PC B, PC C 的角色與地位都同時可以為 Client 與 Server ,所以就是 peer/peer 的架構了!

    Peer/Peer 的連線模式
    圖一、Peer/Peer 的連線模式
    生活周遭中,哪裡看到的這種 peer/peer 的架構呢?想起來了嗎?沒錯!就是藉由 Windows 的『網路上的芳鄰』所達成的『工作群組(workgroup)』的架構,那就是典型的 peer/peer 架構啦!所以, peer/peer 也可以直接說成 workgroup 的連線架構喔。 

    使用 peer/peer 的架構的好處,是每部電腦均可以獨立運作,而不受他人的影響!不過, 缺點就是當整個網域內的所有人員都要進行資料分享時,光是知道所有電腦裡面的帳號與密碼,就會很傷腦筋了! 所以, Peer/Peer 的架構是比較適合 (1)小型的網域,或者是 (2)沒有需要常常進行檔案資料分享的網路環境,或者是 (3)每個使用者都獨自擁有該電腦的擁有權(就是說,該電腦是使用者的,而不是公用的啦!) 而,如果該單位的所有 PC 均是公有的,而且您需要統一控管整個網域裡面的帳號與密碼的話,那就得使用底下的 domain models 了!

  • domain model
  • 假設今天您服務的單位有 10 部電腦,但是您的單位有 20 個員工,這也就是說,這 20 個員工輪流搶著用這 10 部電腦。如果每部電腦都如同 peer/peer 的架構時,那麼每部電腦都需要輸入這 20 個員工的帳號與密碼來提供他們登入喔,而且,今天假如有個員工想要變更自己的密碼時,就需要到 10 台電腦上面進行密碼變更的作業!否則他就必須要記得這 10 部電腦裡面,那一部電腦是記憶那一個密碼.....好煩那~

    如果上述是這樣的情況,使用 peer/peer 架構就不是一個好方法了!這個時候就需要藉由 domain model 來達成您的需求啦!所謂的 domain model 概念其實也很簡單,既然使用電腦資源需要帳號與密碼, 那麼我將所有的帳號與密碼都放置在一部主控電腦 (Primary Domain Controller, PDC) 上面,在我的網域裡面,任何人想要使用任何電腦時,都需要在螢幕前方輸入帳號與密碼,然後通通藉由 PDC 主機的辨識後,才給予適當的使用權限,也就是說,不同的身份還具有不一樣的電腦資源使用權限就是了! 例如底下的圖示:

    domain model 的連線模式
    圖二、domain model 的連線模式
    PDC 主機控管整個網域裡面的各個機器 (PC A ~ PC D) 的帳號與密碼的資訊,假如今天有個使用者帳號名稱為 Ken ,且密碼為 mypasswd 時,他不論使用哪一部電腦 (PC A ~ PC D) 只要在螢幕前方輸入 ken 與他的密碼,則該機器會先到 PDC 上面查驗是否有 ken ,以及 ken 的密碼,並且 PDC 主機會給予 ken 這個使用者相關的電腦資源使用權限。當 ken 在任何一部主機上面登入成功後,他就可以使用相關的電腦資源了!

    這樣的架構比較適合人來人往的企業架構,當系統管理員要控管新進人員的電腦資源使用權時,可以直接針對 PDC 來修改就好了,不需要每一部主機都去修修改改的,對於系統管理員來說,這樣的架構在控管帳號資源上,當然是比較簡單的啦! 

    各種架構適用的環境與適用的人都不相同,並沒有那個是最好啦!請依照您的工作環境來選擇連線的模式囉!當然, SAMBA 可以達到上述兩種模式的啦!底下我們會分別來介紹喔!

    大標題的圖示SAMBA 伺服器的基礎設定
    SAMBA 這個套件幾乎在所有的 Linux distributions 上面都有提供,因為即使你的 Linux 僅做為個人桌上型電腦使用時, 你依舊可能會需要連線到遠端的 Windows 的網芳的,那個時候就得要 samba 提供的用戶端軟體功能囉! 因此你只要直接安裝系統上面提供的預設 samba 版本即可。底下我們會先介紹 samba 伺服器,然後在介紹用戶端功能喔!


    小標題的圖示Samba 所需套件及其套件結構
    目前常見的 samba 版本為 3.x 版,舊版的 2.x 版在設定上有點不一樣,因此在進入設定前請先確認你的 samba 版本。 咱們的 CentOS 4.x 提供的是 Samba 3.x 的版本。那麼你需要什麼套件呢?基本上有這些:
    • samba
      這個套件主要包含了 SAMBA 的主要 daemon 檔案 (smbd 及 nmbd)、 SAMBA 的文件檔 (document)、以及其他與 SAMBA 相關的 logrotate 設定檔及開機預設選項檔案等;

    • samba-common
      這個套件則主要提供了 SAMBA 的主要設定檔 (smb.conf) 、 smb.conf 語法檢驗的測試程式 (testparm)等等;

    • samba-client
      這個套件則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA 檔案格式的執行檔 smbmount 等等。
    這三個套件你都得要安裝才行喔!如果尚未安裝的話,看是要由原版光碟去安裝,還是使用 yum 都可以啦! 安裝完畢之後,你可以依序察看一下 Samba 的套件結構喔!與他相關的檔案基本上有這些東西:
    • /etc/samba/smb.conf
      smb.conf 是 Samba 的主要設定檔名,如果你的 distribution 的 SAMBA 設定檔不在 /etc/samba/ 目錄當中, 那麼你應該使用 locate 或 find 等方式將他找出來就好啦。基本上,咱們的 Samba 就僅有這個設定檔而已, 且這個設定檔本身就是很詳細的說明文件了,請用 vi 去查閱他吧!這個檔案主要在設定工作群組、 NetBIOS 名稱以及分享的目錄等相關設定,我們後續要介紹的都是這個檔案而已啦!

    • /etc/samba/lmhosts
      這個檔案的主要目的在對應 NetBIOS name 與該主機名稱的 IP ,事實上他有點像是 /etc/hosts 的功能!只不過這個 lmhosts 對應的主機名稱是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!由於目前 SAMBA 的功能越來越強大,所以通常只要您一啟動 SAMBA 時,他就能自己捉到 LAN 裡面的相關電腦的 NetBIOS name 對應 IP 的資訊,因此這個檔案通常可以不用設定了!

    • /etc/samba/smbpasswd
      這個檔案預設並不存在啦!他是 SAMBA 預設的使用者密碼對應表。當我們設定的 SAMBA 伺服器是較為嚴密的,需要使用者輸入帳號與密碼後才能登入的狀態時,使用者的密碼預設就是放置在這裡咯 (當然囉,您可以自行在 smb.conf 裡面設定密碼放置的地方及密碼檔名, 不過我們這裡都以預設的狀態來說明) 。比較需要注意的是,這個檔案因為包含了使用者的密碼, 當然權限方面要較為注意啦!這個檔案的擁有者需要是 root ,且權限設定為 600 才行喔!

    • /etc/samba/smbusers
      由於 Windows 與 Unix-like 在管理員與訪客的帳號名稱不一致,分別為 administrator 及 root, 為了對應這兩者之間的帳號關係,可以使用這個檔案來設定。不過這個檔案的使用必須要經由 smb.conf 內的『 username map 』設定項目來啟動才行。

    • testparm
      這個指令主要在檢驗 samba 設定檔 smb.conf 的語法正確與否,當你編輯過 smb.conf 時,請務必使用這個指令來檢查一次, 避免因為打字錯誤引起的困擾啊!

    • smbd, nmbd
      前幾個小節曾經提過的兩個主要 daemon 就在這裡!

    • smbstatus
      列出目前的 SMB server 的狀態,也是很有用途的一個指令啦!

    • smbpasswd
      如果您的 SAMBA 設定的較為嚴格,需要規定使用者的帳號與密碼,那麼那個密碼檔案的建立就需要使用 smbpasswd 來建置才可以的喔!所以這個指令與建立 SAMBA 的密碼有關咯!

    • smbclient
      當你的 Linux 主機想要藉由『網路上的芳鄰』的功能來查看別台電腦所分享出來的目錄與裝置時,就可以使用 smbclient 來查看啦!這個指令也可以使用在自己的 SAMBA 主機上面,用來查看是否設定成功哩!

    • smbmount
      在 Windows 上面我們可以設定『網路磁碟機』來連接到自己的主機上面,同樣的,在 Linux 上面,我們可以透過 smbmount 來將遠端主機分享的檔案與目錄掛載到自己的 Linux 主機上面哪!不過,其實我們也可以直接使用 mount 這個指令來進行同樣的功能就是了。

    • nmblookup
      有點類似 nslookup 啦!重點在查出 NetBIOS name 就是了。

    • smbtree
      這玩意就有點像 Windows 系統的網路上的芳鄰顯示的結果,可以顯示類似『靠近我的電腦』之類的資料, 能夠查到工作群組與電腦名稱的樹狀目錄分佈圖,有趣吧!

    • /usr/share/doc/samba-<版本>
      這個目錄包含了 SAMBA 的所有相關的技術手冊喔!也就是說,當您安裝好了 SAMBA 之後,您的系統裡面就已經含有相當豐富而完整的 SAMBA 使用手冊了!值得高興吧! ^_^,所以,趕緊自行參考喔!
    大致的套件結構就是這樣,底下就準備來講一個簡單的案例吧! ^_^


    小標題的圖示基礎設定流程與 smb.conf 的主要規劃
    既然 Samba 是要加入 Windows 的網芳當中,所以他的設定方式應該是要與網芳差不多才是。所以我們先來聊一聊 Windows 的一些設定方法再說。在早期 Windows 的網芳設定真是很簡單,不過也因為太簡單, 所以產生的安全問題可是相當的麻煩的。後來在 Windows XP 的 sp2 (服務包第二版) 加入了很多的預設防火牆機制, 因此使用網芳的預設限制常常會是這樣的:
    • 主機與主機之間必須要在同一個網域當中 (否則需要修改 Windows 預設防火牆);
    • 最好設定為同一工作群組;
    • 主機的名稱不可相同 (NetBIOS name);
    • 專業版 Windows XP 最多僅能提供同時十個用戶連線到網芳。
    當你的 Windows 主機群符合上述的條件後,就很容易處理網芳分享的工作啦!分享的步驟是這樣的:
    1. 叫出檔案總管,然後在要分享的目錄、磁碟或裝置 (如印表機) 上面按下右鍵,選擇『共用』,然後就能夠設定好分享的資料了;
    2. 最好建立一組給用戶使用的帳號與密碼,讓其他主機的使用者可以透過該帳號密碼連線進入網芳;
    真是有夠簡單的!那麼 Samba 怎麼設定啊?也是很簡單,依據上述的限制以及流程你可以這樣想像:
    1. 在 smb.conf 當中設定好工作群組、NetBIOS 主機名、密碼使用狀態等等與主機相關的資訊;
    2. 在 smb.conf 內設定好預計要分享的目錄或裝置以及可供使用的使用者資料;
    3. 根據步驟 2 的設定,在 Linux 檔案系統當中建立好分享出去的檔案或裝置的使用權限;
    4. 根據步驟 2 的設定,以 smbpasswd 建立起使用者的帳號及密碼
    5. 啟動 Samba 的 smbd, nmbd 服務,開始運轉哩!
    瞧!根據上面的流程,其實我們最需要知道的就是 smb.conf 這個設定檔的資訊就是了。 所以首先我們就要來介紹一下這個檔案的設定方式囉!這個檔案其實可以分為兩部份來看, 一個是主機資訊部分,在 smb.conf 當中以 [global] 作為設定的依據;另一個則是分享的資訊, 以個別的目錄名稱為依據。你要先知道的是:在 smb.conf 當中, 井字號與分號 (# 跟 ;) 都是註解符號!底下咱們就來談談這個咚咚吧!


  • 主機整體參數
  • 在 smb.conf 這個設定檔當中的設定有點像底下這樣:
    # 會有很多加上 # 或 ; 的註解說明,你也可以自行加上來提醒自己相關設定
    [global]
       參數項目 = 設定內容
       ....
    
    [分享資源名稱]
       參數項目 = 設定內容
       ....
    
    在 global 當中的就是一些主機的整體參數了,包括工作群組、主機的 NetBIOS 名稱、字元編碼的顯示、登錄檔的設定、 是否使用密碼以及使用密碼驗證的機制等等,都是在這個 [global] 項目中設定的。至於 [分享資源名稱] 則是針對你開放的目錄來進權限方面的設定,包括誰可以瀏覽該目錄、是否可以讀寫等等參數。 在 [global] 部分關於主機名稱資訊方面的參數主要有:
    • workgroup = 工作群組的名稱:注意,主機群要相同;
    • netbios name = 主機的 NetBIOS 名稱啊,每部主機均不同;
    • server string = 主機的簡易說明,這個隨便寫即可。
    另外,過去常常讓使用者心生不滿的語系顯示問題方面,您務必要清楚的知道的是, SAMBA 主機上面的資料 (例如 mount 磁碟分割槽的參數以及原本的資料編碼), SAMBA 伺服器顯示的語系, Windows 用戶端顯示的語系, Windows 用戶端連上 SAMBA 的軟體 都需要符合設定值才行! 在新版的 3.x 上面有數個提供這些語系轉換的設定喔,如下所示:
    • display charset = 自己伺服器上面的顯示編碼, 例如你在終端機時所查閱的編碼資訊。一般來說,與底下的 unix charset 會相同。
    • unix charset = 在 Linux 伺服器上面所使用的編碼,一般來說就是 i18n 的編碼囉! 所以你必須要參考 /etc/sysconfig/i18n 內的『預設』編碼。
    • dos charset = 就是 Windows 用戶端的編碼了! 一般來說我們的繁體中文 Windows 使用的是 big5 編碼,這個編碼在 Samba 內的格式被稱為『 cp950 』喔!
    關於語系編碼,建議您參考一下討論區的這一篇:
    我們的網友 eyesblue 寫得太好了!所以建議大家直接前往查閱即可!除此之外,還有登錄檔方面的資訊, 包括這些參數:
    • log file = 登錄檔放置的檔案,檔名可能會使用變數處理;
    • max log size = 登錄檔最大僅能到多少 Kbytes ,若大於該數字,則會被 rotate 掉。
    還有跟密碼有關的參數,包括這幾個:
    • security = user, server, domain, share 四選一,這四個設定值分別代表:
      • user :使用 SAMBA 本身的密碼資料庫,密碼資料庫與底下的 smb passwd file 有關;
      • share:分享的資料不需要密碼即可分享;
      • server, domain:使用外部主機的密碼,亦即 SAMBA 是用戶端之意,如果設定這個項目, 你還得要提供『password server = IP』的設定值才行;
    • encrypt passwords = Yes 代表密碼要加密,注意那個 passwords 要有 s 才對!
    • smb passwd file = 密碼放置的檔案,通常是 /etc/samba/smbpasswd 。
    事實上 Samba 的密碼方面設定值很多喔,包括你還可以利用 samba 來修改 /etc/passwd 裡頭的人物的密碼呢! 不過這個時候就得需要『 unix password sync 』以及『 passwd program 』這兩個參數值的幫忙了。 我們這裡先談比較簡單的,其他進階的部分可以 man smb.conf 去進行搜尋查閱喔! ^_^


  • 分享目錄參數
  • 在目錄參數部分,主要有底下這幾個常見的參數喔:
    • [分享名稱] :這個分享名稱很重要,他是一個『代號』而已。 舉例來說,你在 Windows 當中使用『共用』來分享網芳時,假設你將『D:\game』分享出來, 系統不是還會要你輸入一個『在網路上面的名稱』嗎?假設你輸入『My_Games』這個名稱好了, 那麼未來大家在網芳看到的這個資料夾 (D:\game) 名稱其實是『\\你的IP\My_Games』啦!
    • comment :這個目錄的說明!
    • path :在網芳中顯示的名稱 [分享名稱] 中,所實際進入的 Linux 檔案系統。 也就是說,在網芳當中看到的是 [分享] 的名稱,而實際操作的檔案系統則是在 path 裡頭所設定的。
    • read only:是否唯讀?
    • public :是否讓所有可以登入的使用者看到這個項目?
    • writable :是否可以寫入?這裡需要注意一下喔!那個 read only 與 writable 不是兩個蠻相似的設定值嗎?如果 writable 在這裡設定為 no ,亦即不可寫入,那跟 read only 不就互相抵觸了!那個才是正確的設定?答案是:最後出現的那個設定值為主要的設定!
    • create mode 與 directory mode 都與權限有關的咯!
    • valid users = 使用者,這個項目可以指定能夠進入到此資源的特定使用者。
    因為分享的資源主要與 Linux 系統的檔案權限有關,因此裡頭的設定參數多與權限有關。


  • 變數特性
  • 為了簡化設定值,Samba 提供很多不同的變數給我們來使用,主要有底下這幾個變數喔: