通用線程:Samba 簡介 第一部分

火星人 @ 2014-03-12 , reply:0


  關鍵概念

Daniel Robbins
總裁/CEO,Gentoo Technologies, Inc.

內容:
演示 Samba
Samba 列印
Samba 共享
瀏覽網路
Samba 安全性
從 Unix 方看到的 Samba
下一步
參考資料
關於作者



對於所有既使用 Unix 又使用 Windows 的人來說,Samba 是一種了不起的工具。通過實現 Unix 的 SMB/CIFS 協議,Samba 可以讓 Unix 系統與標準 Windows 客戶機一起共享資源。在這篇介紹性文章 -- Daniel Robbins 為 developerWorks 提供的新專欄系列的第一篇文章中,他將介紹 Samba 能夠做什麼。本文著重介紹關鍵概念。(在下一篇文章中,他將指導您完成安裝過程。)讀完本文之後,您將清楚了解 Samba 可以做些什麼,以及它是如何工作的。

歡迎來到「通用線程」部分,developerWorks 上 Linux 專區的一個新專欄。每隔兩星期,我會為您帶來一些文章,這些文章將深入探討影響 Linux 和開放源碼世界的技術。這一專欄從有關 Samba 的三部分系列開始, Samba 是用於集成 Windows 和 Unix 的領先技術。我將告訴您 Samba 是如何工作的,以及如何在您的系統上配置並運行它。

在以後的文章中,我會涉及到例如多線程等一些熱門話題,還會提供有關一些準備震撼計算世界的新興技術的內幕介紹。常回來看看 -- 別錯過任何一篇文章!

演示 Samba
首先,我要顯示一組屏幕快照,它們來自我的一台名為 kompressor 的 Windows NT 機器。這些屏幕快照演示了從 Windows 方看到的一個完整配置的 Samba 系統。它們會帶給您 Samba 功能的一個實際理念。

當前在我的內部 LAN 中設置了三台機器。

ntbox (Windows NT 工作站)
freebox (FreeBSD 伺服器)
kompressor(Windows NT Workstation,用作我的主要台式機)

在這個環境中,我廣泛使用 Samba 來共享文件、列印,甚至直接從 freebox (Unix) 運行 Windows 應用程序。有一個屏幕快照顯示了 kompressor 「網路鄰居」的內容:

kompressor 的「網路鄰居」


您可以看到,ntbox 和 kompressor 都是可見的,這並不奇怪,因為它們都是 NT Workstation。但不同尋常的是,我同樣能看見 freebox。因為 freebox 運行的是 Samba,所以在屬於 \"GENTOO\" Windows 工作組一部分的每台 Windows 機器上「網路鄰居」下面我都能看到它。

現在我們可以看看 freebox 「內部」是什麼樣子。雙擊 freebox 圖標后彈出下面的窗口:

freebox 上的 SMB/CIFS 共享


字首組合詞釋義
SMB 代表的是伺服器消息塊 (Server Message Block),它是用於在 Windows 上共享文件的協議的原始名稱。 CIFS 代表公共 Internet 文件系統 (Common Internet File System),它是 Microsoft 描述該協議最近一個版本的新字首組合詞。


在這個窗口中,您可以看到一組我們稱之為「共享」的東西。更具體來說,它們叫作 SMB/CIFS 共享,包含 freebox 文件系統中可以通過網路訪問的那些部分。

在 freebox 上,Samba 經過了特別配置,可以只創建您在上面看到的那些特殊共享。drobbins 共享包含了主目錄的內容。我喜歡將所有文件存儲在 freebox(在 Unix 下)上,以使文件集中,易於管理。Samba 的一個好處是它可以讓管理員將用戶文件的存儲器集中,而不是為每個用戶都對 Windows 和 Unix 提供兩個單獨的文件位置。

Samba 列印
除標準共享(作為虛擬目錄)外,您還可以看到名為 nec 的印表機共享。Samba 另一個非常重要的功能就是,您可以使用從任何 Windows 機器共享印表機的相同方式來共享印表機。Nec 是我的 NEC SuperScript 870 激光印表機,它與 freebox 相連,並設置成標準的 Unix 基於 lpd 的印表機。Samba 可以讓這個印表機由 Windows 客戶機使用,如同標準 Windows 網路印表機那樣。

因為印表機是在 Unix 下運行的,您可能會奇怪印表機驅動程序的狀態要如何處理。問的不錯。在 freebox 上, nec 設置為以「raw(原始)」方式運行的基於埠的標準并行印表機。換句話說,任何發送給 nec 的列印作業都直接照原樣傳遞給印表機,不進行任何過濾或數據處理。

在 kompressor 上,nec 配置成 NEC SuperScript 870 網路印表機。當我列印到它時,本地 NT 印表機驅動程序為 nec 生成相應的二進位數據,然後,自動在網路上假離線到 freebox 上運行的 Samba。 Samba 自動將這些數據不加更改地插入 nec 的隊列,印表機開始列印作業。

應該說明一下,我的 NEC SuperScript 870 不是 Postscript 印表機;它使用 Adobe 的專利 PrintGear 技術。雖然印表機在 Unix 上不是完全受支持,它仍能很好地處理來自 Windows 的列印(這是因為所有特定於印表機的數據都是在 Windows 方使用 Windows 驅動程序生成的)。具有諷刺意味的是,因為 GhostScript(一種可用於 Unix 的免費使用的與 PostScript 兼容的解釋器)不知道如何產生 PrintGear 輸出,我只能從 Unix 方列印 ASCII 純文本或 300 dpi 基於 PCL4 的文檔;但從 Windows 方,Windows NT 驅動程序可以讓我列印十足的 600 dpi。現在我不認為這會不方便,因為我的大部分列印都是從 Windows 進行的。但以後最好能有內置 Postscript 的印表機,這樣我也能從 Unix 使用印表機的全部功能。

Samba 共享
好,現在該看下一個屏幕快照了。這個屏幕快照說明 freebox 上 drobbins 共享的內容,它配置為共享我的 Unix 主目錄。窗口中列出的所有文件實際上都位於 freebox 中,但可以直接從我的 Windows NT 客戶機訪問。能夠將 Windows 和 Unix 集成真是太好了!

從 kompressor 訪問到的 freebox 上我的主目錄



理解 Samba
為向您介紹有關 Samba 內部是如何工作的更詳細的信息,我要給您一個非常簡化的說明,告訴您當我在「網路鄰居」中四處擺弄時在後面發生了什麼事。首先我應該說明一下當前 Windows 會話的一些情況。因為我運行的是 Windows NT Workstation,所以必須進行登錄才能獲得對機器的訪問。對於這個 NT 會話,我登錄到本地機器時使用的用戶名是 \"Administrator\",口令是 \"mypass\"。如果我運行的是 Windows 95 或 98,標準 Windows 聯網驅動程序就會要求我輸入用戶名和口令。在 Windows 95 和 98 中,這個口令實際上不用於確定誰可以訪問本地機器,而是被高速緩存,用於與網路資源連接。

當然,Windows NT 相對於 Windows 95 和 98 是非常安全的,如果您不提供有效的用戶名和口令,就不允許您使用機器。在 kompressor 對照它的本地安全性資料庫確認了我的用戶名和口令后,就允許我開始使用 Windows。在我連接到受口令保護的網路資源時,Kompressor 還將使用我的用戶名和口令來嘗試自動認證自己。

瀏覽網路
當我在「網路鄰居」上單擊時,會彈出一個窗口,包含網路上所有與 Windows 兼容的機器的列表。為使這個操作發生,kompressor 與幕後的 freebox 聯繫,以獲得當前子網上所有與 Windows 兼容的機器的「瀏覽列表」。 Kompressor 與 freebox 聯繫是因為我配置了 freebox 的 Samba,這樣它就可以成為網路上的「本地主要瀏覽器」(這意味著 freebox 管理著出現在「網路鄰居」中的網路資源的列表)。

我做的下一件事是雙擊 freebox,將出現一個新的窗口,並顯示 freebox 上的所有共享。為使 kompressor 能夠接收這些信息,它作為 guest 用戶與 freebox 上特殊的隱藏共享(稱為 IPC$)連接,並下載所有可用共享的名稱和類型。在下一篇文章中,當我們配置 Samba 時,需要把一個選項放入 Samba 的配置文件中,指定哪個 Unix 帳戶等價於 NT 的 \"guest\" 用戶。如果它沒有正確設置,您就不能瀏覽 Samba 機器上的任何資源。因為它顯示您不需要任何特殊許可權就能查看 Samba 伺服器上的 SMB/CIFS 共享,所以出於安全性目的,這也值得一提。

現在我可以單擊 drobbins 共享來顯示主目錄的內容。當它不慌不忙自動發生時,有必要理解 freebox 和 kompressor 之間隱藏的對話,這個會話最終授予我對 drobbins 共享的訪問。但在我們到達那一步之前,先討論一些 Samba 安全性事項。

Samba 安全性
當配置 Samba 時,我設置了 drobbins 共享是用口令保護的;即使是在自己專用的 LAN 上,我仍然希望將有些東西鎖定到某種程度。與此同時我設置了兩個 Samba 用戶:drobbins 和 administrator。將它們的口令設置為與我 NT Workstations 上的口令匹配以達到一致。對於 drobbins 共享,我的安全性策略如下:如果您是有效的 Samba 用戶,並為該用戶提供了正確的口令,就允許您訪問 drobbins 共享。所以,administrator 和 drobbins 都被授予訪問權,只要用戶為它們的帳戶也提供正確的口令。

現在,讓我們回到 freebox 和 kompressor 之間的對話。因為我是作為 administrator 登錄的,所以雙擊 drobbins 共享會導致 Windows NT 通過將用戶名 \"administrator\" 和口令 \"mypass\" 發送給 freebox 來自動嘗試向 Samba 認證我。然後,Samba 對照它的內部安全性資料庫(它與標準 Unix passwd 資料庫區分開)來檢查這些值,從而驗證用戶名和口令。在看到用戶名/口令組合被檢出后,Samba 授予我訪問權。

您可能會奇怪為什麼 Samba 有它自己獨特的口令資料庫。為什麼它不使用標準 Unix 口令來認證 administrator 用戶呢?當 Windows 發送以明文表示的口令時,它過去可能這樣做,但所有現代版本的 Windows 都以加密形式發送 SMB/CIFS 口令,這樣就與標準 Unix 口令散列不兼容了。換句話說,Samba 沒有辦法使用標準 Unix passwd 散列來驗證 Windows 加密的口令是否正確。幸運的是,Samba 提供了許多方法來將這兩個資料庫同步,這樣系統管理員的日子就好過多了。

從 Unix 方看到的 Samba
現在我們已經從 Windows 方了解了 Samba,該從 Unix 方來看 Samba 了。首先是一些常規信息。 Samba 的主要網站是 http://fi.samba.org,Samba 的當前產品版本是 2000 年 4 月 25 號的 2.0.7,在這一系列文章中我們將使用這個版本。因為有些人會從 RPM 安裝 Samba,另一些人會嘗試讓 Samba 在 FreeBSD 或 Solaris (而非 Linux)下運行,又有許多人會從頭開始編譯 Samba,所以在文件位置上很可能有很多變數。(Samba 的預設文件位置可以在編譯時配置。)在某些系統上,特定的文件會在 /usr/local中,而在其它系統上,它們會在其它地方。我將按文件名來引用配置文件(而不是按它們的完整路徑)來避免任何不一致。

如果您從原始源碼中編譯和安裝 Samba,可以在 /usr/local/samba/etc/smb.conf 中找到 Samba 的配置文件。但如果您從二進位 RPM 或另一種 Linux 軟體包格式安裝軟體,就很可能在 /etc 中找到 smb.conf。這些都會很快造成混亂。為使事情簡化,我複查了從源碼中編譯 Samba 時文件的位置,並確保每個文件都安裝到 /usr/local/samba 中它的預設位置。請注意,這一部分的目的只是讓您熟悉 Samba 的 Unix 方的配置,並不想帶您一步步地完成編譯進程,這一內容將在下一篇文章中論述。剛才我們只是讓您熱熱身!在全新的 Samba 編譯和安裝后,文件的預設位置如下:



/usr/local/samba/bin
包含所有 Samba 二進位可執行文件

在 2.0.7 中,主要 Samba 可執行文件稱為 smbd 和 nmbd。Smbd 設計為提供 SMB/CIFS 文件共享服務,而 nmbd 通過對 NetBIOS 名利用 IP 地址查找來執行與 WINS 相關的功能。還有一些其它實用程序,包括 smbclient(一個類似於 ftp 的工具,可用來與 SMB/CIFS 共享連接和交互),以及 testparm(一個方便的實用程序,通過檢查來確保 Samba 的主要配置文件的語法正確)。


/usr/local/samba/etc
包含 smb.conf,主要的 Samba 配置文件

Smb.conf 是一個非常重要的文件,包含幾乎所有 Samba 的配置選項。在這個文件中,您可以找到控制全局 Samba 功能的設置,還有啟用特定目錄樹和印表機共享的配置選項。在獲得使用 Samba 的經驗的同時,您也將用額外的配置選項(對 Samba 進行微調來適應特定位置)來補充 smb.conf 文件。

對 Samba 最主要的一個抱怨是 smb.conf 文件有相當高的學習曲線。雖然這是事實,但請記住, Samba 不只是一個簡單的網路文件共享程序。它負有將兩個完全不同的系統(Windows 和 Unix)進行明智集成的責任。有時配置進程看起來很難對付,但不要怕。只要您能讓每件東西都能很好地發揮作用,所有努力就都值得了!


/usr/local/samba/private
包含 smbpasswd,Samba 的加密口令文件

安全性注意事項
在 smb.conf 中,可以將 Samba 配置為只偵聽特定網路介面上的連接,或只接受來自特定子網或 IP 地址的連接。這些方法可以用於更進一步加強安全性。


我在前面提到過 Samba 有自己的口令存儲器,它是與標準 Unix passwd 資料庫不同的。在 smbpasswd 文件中, Samba 存儲了所有允許訪問 Samba 共享的用戶和工作站(以及它們相關的口令)。可以進一步對特定用戶和組鎖定個別的共享。要修改 smbpasswd 文件,使用名稱相同的二進位可執行文件 smbpasswd。


/usr/local/samba/var
包含 Samba 的兩個日誌文件,log.smb 和 log.nmb

可能您已經猜到,log.smb 是 smbd 的日誌文件,而 log.nmb 是 nmbd 的日誌文件。


/usr/local/samba/swat
包含用於 SWAT(Samba 的 Web 管理工具)的文件

SWAT 是 Samba Web 管理工具,是靈巧的小 Web 應用程序,可以讓管理員遠程管理他們的 Samba 網路。我們在這一系列文章中不涉及 SWAT,但您可以在 SWAT 的主頁上找到有關 swat 的詳細信息(見參考資料)。

下一步
我們已介紹了許多 Samba 的關鍵功能和概念。還了解了 Samba Unix 方的文件結構概述。在下一篇文章中,我要帶您完成在自己的系統上設置 Samba 的過程。本文的重點集中在概念上,下一篇文章與本文不同,它將側重於 HOWTO 風格。我們已介紹完了關鍵概念,現在開始步伐要加快了。再見!

參考資料

主要的 Samba 網站
Amiga Samba 郵件列表
Ed Weinberg 撰寫的 Samba
Samba Unleashed,Steve Litt 著,其中包含 Daniel Robbins 的投稿
Using Samba (O\'Reilly Publishing; 1999)
有關 Samba 和 Redhat 的 Samba 注意事項
Samba/iX: MPE/iX 6.0 上的 Samba 支持
SWAT 主頁
威斯康星大學的 GhostScript

關於作者
Daniel Robbins 居住在美國新墨西哥州的阿爾布開克。他是 Gentoo Technologies, Inc. 的總裁/CEO、 Gentoo Project 的主創人、由 MacMillan 出版的幾本書(包括 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed)的投稿人。Daniel 自小學二年級起就與計算機結下不解之緣,那時他首先接觸的是 Logo 程序語言,並沉溺於 Pac-Man 遊戲中。 這也許就是他至今仍擔任 SONY Electronic Publishing/Psygnosis 的首席圖形設計師的原因所在。 Daniel 喜歡與妻子 Mary 和他們的女兒 Hadassah 一起共渡時光。可通過 drobbins@gentoo.org 與他聯繫。




[火星人 via ] 通用線程:Samba 簡介 第一部分已經有119次圍觀

http://www.coctec.com/docs/net/show-post-68509.html