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

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


  使 Samba 運轉起來:配置階段

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

內容:
添加一些共享
令人興奮的共享
共享主目錄
共享參數
snb.conf 選項
從 Samba 列印
參考資料
關於作者


在上一篇文章中,Daniel Robbins 指導您完成第一次設置 Samba 的過程。現在應該配置 Samba 使它執行您希望它執行的所有操作了。




這裡有一個我們曾使用過的 smb.conf 清單:


[global]

# set YOURWORKGROUP to the name of your workgroup

workgroup = YOURWORKGROUP
security = user
encrypt passwords = yes
guest account = guest

# enable *one* of the following two lines
# enable the first line if you want to use an existing
# WINS server on your subnet, otherwise, enable the
# second.

# wins server = IP address of WINS server
# wins support = yes

local master = yes
os level = 99
domain master = yes
preferred master = yes

# optional security options. Customize for your site.

# hosts allow = 192.168.1. 127.
# interfaces = eth1

[tmp]
path=/tmp
writeable=yes




添加一些共享
當這個 smb.conf 文件生效后,它所能做的就是通過創建一個名稱為 \"tmp\" 的共享,來和 Windows 一起共享 /tmp 目錄。這不夠讓人興奮。讓我們創建另一個更有用的共享。向 smb.conf 添加以下幾行,然後重新啟動 Samba。


[ftp]
path=/path/to/ftp/root
writeable=no




如果在 Samba 伺服器上有 ftp 位置或某種文件歸檔,那麼可以通過使用類似的代碼來在網路上共享數據。\"writeable=no\" 參數告訴 Samba 不允許任何人創建或修改該共享上的文件。任何具有有效 Samba 帳戶的人都能夠訪問這個共享。

令人興奮的共享
我知道您現在在想什麼。但這仍不夠讓人興奮。如果共享主目錄呢?下面是實現如何這個目的的代碼:


[drobbins]
comment=Home directory for drobbins
path = /home/drobbins
force user = drobbins
read only = no
valid users = drobbins administrator




這一個有趣得多。向 smb.conf 添加類似的代碼可以讓您共享主目錄。在該例中,創建了 \"drobbins\" 共享。它在網路上共享了 /home/drobbins 的內容。幸運的是,有了 \"valid users\" 那一行,並不是所有人都能訪問這個共享。這行導致 Samba 拒絕除 \"drobbins\" 或 \"administrator\" 帳戶之外任何人進行的訪問。因為使用的是 Windows NT,所以我經常作為 administrator 登錄。在這種情況下,仍能訪問 \"drobbins\" 共享。這一行 valid users 就可以允許這種情況發生。

您還會注意到 \"read only\" 參數的使用。您可能已猜到,\"read only\" 與 \"writeable\" 參數相反。我們只需要用 \"writeable=yes\" 就能替代這一行。這表示只要有合適的許可權,Samba 就允許寫入這個特定的共享。因為 Samba 的 \"drobbins\" 用戶直接映射成 Unix 的 \"drobbins\" 用戶,並且 drobbins 恰巧又是 /home/drobbins 目錄及其內容的所有者,所以就允許寫和修改文件。

您是否曾作為 root 用戶在主目錄中創建文件,然後在作為一般用戶登錄后嘗試修改它時被拒絕了寫訪問呢?對我來說,這種情況一直發生。要解決問題,需要執行 \"su\"、 \"chown drobbins.drobbins filename\",然後從 root 用戶中 \"exit\" (退出)。最後終於允許我修改該文件。

我提到這一點是因為在您共享主目錄並使用其它 Samba 用戶訪問它們時也可能產生類似的問題。請考慮以下情況。我作為 administrator 訪問共享並創建了文件。通常,這個文件是由 administrator 擁有的,不能由 drobbins 用戶修改。如果 drobbins 嘗試修改它,訪問就遭到拒絕。幸運的是,Samba 具有避免這種情況的 \"force user\" 選項。\"force user\" 選項將使所有對文件(在特定的 Samba SMB/CIFS 共享上)執行的操作將使用單一 Unix 帳戶來執行。在 \"drobbins\" 共享示例中,這意味著 administrator 創建的所有文件實際上都由 drobbins 擁有,防止任何所有權衝突。因為 \"drobbins\" 共享包含了主目錄的內容,我希望將 drobbins 帳戶擁有的所有內容都保存在其中。

在開始下一個主題之前,我應該提一下 \"comment\" 參數。這允許您用從 Windows 可見的描述性註釋來補充說明您的共享。

共享許多主目錄
我們已介紹了如何共享單個主目錄了。但如果恰巧您要管理包含幾百個用戶的伺服器,而所有用戶都希望能從 Windows 訪問他們的主目錄,在這種情況下您怎麼做呢?很幸運,Samba 有一個特殊的共享,稱為 \"homes\",專門用於這個目的。這裡說明它是如何工作的:


[homes]
comment=Home directory for %S
path=/home/%u
valid users = %u administrator
force user=%u
writeable = yes
browseable = no




我提到過,這是一個「特殊」的共享。它與一般共享的工作原理不一樣。Samba 能夠認識這種特殊的標識 \"[homes]\" 並用不同的方式處理這個共享。

這個共享最不同尋常的地方是使用了 \"browseable=no\" 參數。這種特殊的選項使共享在「網路鄰居」下不可見,它通常用於阻止那些想要「探索」它所能看到的所有共享的存心不良的用戶。但為什麼在這裡使用它呢?

答案有些耐人尋味。您看,\"homes\" 共享確實創建了一個名為 \"homes\" 的共享。但這個特定的共享對我們一點用處沒有。它不做任何事,所以我們把它隱藏起來。\"homes\" 共享所做的事非常多。它告訴 Samba 自動為每個個人用戶即時創建主目錄。例如,假設我們的 \"drobbins\" 共享沒有在 smb.conf 中定義,而我們作為 NT 用戶 \"drobbins\" 瀏覽「網路鄰居」。就會發現一個名為 \"drobbins\" 的共享,它的行為與原始 \"drobbins\" 共享的行為相同。如果使用 NT 用戶 \"jimmy\" 訪問 Samba,就會發現一個配置完善的 \"jimmy\" 共享。這是 homes 的魅力所在。添加一個特殊的共享會相應地創建所有主目錄共享。

現在,它的工作原理呢?當設置 \"homes\" 共享時,Samba 將檢測哪個 NT 用戶在訪問 Samba。然後,它將創建一個已經為這個特定用戶定製過的主目錄共享。好象這個共享是個正常的非動態共享一樣,它將出現在「網路鄰居」中。而 NT 用戶並沒有意識到這個特定的共享是提前創建的。讓我們看看每個特定選項是做什麼的:

comment 參數使用 %S 通配符,它可以擴展成實際的共享名。這將導致 \"drobbins\" 共享帶有註釋 \"Home directory for drobbins\",\"jimmy\" 共享帶有註釋 \"Home directory for jimmy\" 等等。path 參數還包含通配符 %u。%u 擴展成訪問共享的用戶名。在特殊情況下,%u 等價於 %S,因此我們就使用 path=/home/%S 代替。它可以讓 Samba 動態地將共享映射到磁碟上的正確位置。

我們再次使用 \"valid users=\" 那一行中的宏,以便只允許共享的所有者和管理員訪問它。\"force user\" 也使用一個宏,以便所有文件訪問將由一個帳戶執行。當然,我們會使共享對所有已認證的用戶可寫。當使用 \"browseable=no\" 參數時,動態創建的共享在創建它們時將是可瀏覽的。當然,它只隱藏不起作用的 \"homes\" 共享。

共享參數
我們已經看過一些在創建共享時使用的一些方便技術。在這一節中,我將介紹一些常用的選項,可以讓您根據每個共享定製 Samba 功能。也可以把所有與共享相關的選項放在 [globals] 這一節中,從而為所有共享設置預設值。

comment=
comment = 參數是非常方便的選項,可以使 Samba 系統從 Windows 方查看時更正規。它可以讓您指定特定共享所帶的註釋,描述共享的內容。指定註釋時(特別在使用 \"homes\" 時),我經常使用 %S 宏,它擴展成共享的名稱。

path=
path= 是最基本的 Samba 共享參數之一。它讓您將路徑設置成要導出的目錄。請注意,預設情況下,該目錄樹中的任何符號鏈接都會跟隨。因此用戶有可能「跳出」目錄樹。從 Windows 方,它們沒有跟隨符號鏈接的指示。它將只作為普通的文件或目錄出現。我們將討論一些參數,它們可以更改這種行為使符號鏈接更安全。

force user=
force user= 是我最喜歡用的參數之一。它強制所有文件修改都由單一用戶帳戶執行。通常需要和 valid users= 選項一起使用它來限制對某些用戶的訪問。因為所有文件操作都是使用單一用戶帳戶執行的,所以 force-user= 的一個副作用是您無法通過查看 Unix 文件許可權知道誰做了什麼。因此對於可寫的共享,force user= 選項應該帶有適當的安全性預設值。沒有這個選項,所有文件操作就將由正在訪問共享的 Samba 用戶執行。

force user 示例
force user=drobbins




browseable=
一種增強安全性的簡單方法是使特定共享不可見。預設情況下,共享在「網路鄰居」中是可瀏覽的。使它們不可見可以幫助阻止不希望的黑客攻擊。但不應該將它用作安全性的唯一方法。只是因為共享不列在瀏覽列表中並不能防止從 Windows 訪問它。它只能減少您可能提供給不懷好意用戶的信息量。要訪問隱藏的共享,可以將它的 UNC 名稱輸入到「運行...」(Run...) 對話框中。例如,可以通過從 Windows 輸入 \"\\\\myserver\\test\" 來訪問 myserver 上名為 \'test\' 的隱藏的共享。

browseable 示例

browseable=no




available=
預設情況下,available= 選項為 \'yes\',它只是禁用共享的一種方便的手段,而不是完全從 smb.conf 中註釋掉或刪除它。Available=no 將使共享在重新啟動 Samba 后變成非活動的。

available 示例
available=no




valid users=
明確利用 valid users= 選項來限制對特定共享的訪問。預設情況下,允許所有已認證的用戶訪問 Samba 共享。可以通過將 \"@\" 附加到組名上來引用一個有效的 NIS 網路組或 Unix 組。

valid users 示例
要允許 drobbins 和 wheel 組的成員能訪問共享:
valid users = drobbins @wheel




dont descend=
dont descend= 指定 Samba 不應該進入共享中的目錄。它可以方便地防止 Samba 進入一個包含遞歸符號鏈接的目錄,或者限制對如 /proc 和 /dev 等無關目錄的訪問。請務必測試 dont descend= 設置來確保它們能使用。例如,您可能需要將 \"dont descend= /dev\" 換為 \"dont descend= ./dev\"。

follow symlinks=
follow symlinks= 通常預設值為 \'yes\',將導致 Samba 跟隨所有符號鏈接,即使它們將 Samba 重定向至導出目錄樹以外的文件或目錄。將 follow symlinks 設置為 \'no\' 將關閉這項功能,並能完全防止跟隨符號鏈接。將 follow symlink 關閉將消除潛在安全性漏洞,它應該在不需要符號鏈接時執行。

follow symlinks 示例
follow symlinks=no




volume=
volume= 選項會導致 Samba 將 \"volume name\" 與特定的共享關聯起來。這在使用 Samba 共享導出 CD-ROM 的內容時特別有用。許多安裝程序都希望在 CD 上找到正確的卷名,沒有這些卷它們將無法使用。

volume 示例
volume=My Favorite CD




create mask=
Samba 使用 create mask 來設置對新創建的文件的正確許可權。create mask 定義新創建的文件將允許哪些許可權。使用二進位 \"and\" 操作將提供的八進位數與所需的許可權結合起來。將導致不在掩碼中的任何許可權都從新文件的許可權中刪除。

create mask 示例

create mask= 0755




directory mask=
directory mask= 的工作方式和 create mask= 的類似。它指定一個八進位數,這個八進位數定義了新目錄所允許的許可權。

smb.conf 的其它選項
在這一節中,我們只介紹了在配置實用並且安全的 Samba 系統中最關鍵的那些 smb.conf 選項。 Samba 本身有許多有用的額外配置選項。要了解更多選項,請查看 smb.conf 主頁,其中列出並詳細描述了它們。(請參閱參考資料。)

從 Samba 列印
Samba 的印表機共享能力非常方便和好用。重新回憶一下,Samba 可以讓您導出現有基於 lpd 的印表機,這樣 Windows 客戶機就可以與它們連接並列印。這種安排的一個好處是所有特定於印表機的代碼在 Windows 方生成。這意味著您的 Unix 系統不需要對特定印表機有顯式支持。只要 Unix 系統能將原始數據轉儲到印表機,它就可以運轉,而且運轉得很好。它甚至還可以讓您共享和使用純 Unix 環境中不完全起作用的印表機,例如 Adobe 基於 PrintGear 的 NEC SuperScript 870。

Samba 列印的工作原理
要使列印能夠工作,首先需要啟動 lpd 服務。但 lpd 配置不在本文的討論範圍內,它並不太困難,在 linuxdoc.org 上列印 FAQ (Printing FAQ) 中有詳細描述。(請參閱參考資料。)您需要將印表機配置為預設情況下的「原始」印表機,這樣所有使用 lpr 命令發送給印表機的數據就都一字不差地複製,沒有經過任何過濾或修改。測試 lpd 以確保它是以「原始」方式配置是很簡單的。在 Windows 方,為特定印表機安裝列印到 FILE 的印表機驅動程序:從常用的 Windows 字處理器列印一頁並將它存儲到文件中。然後將它複製到 Unix 機器並使用 lpr 列印它。如果得到正確的輸出,您就完成了自動使用印表機 Samba 的配置。

Samba 列印全局參數
要在 Linux 系統上使 Samba 列印能正確工作,需要將以下參數添加到 [global] 一節:


printcap name=/etc/printcap
printing=bsd




如果 printcap 位於其它地方,對 printcap name= 參數作相應調整。如果使用的列印系統不是標準 BSD lpd,請參考 smb.conf 主頁中的 printing= 選項來了解有關如何使 Samba 在您的列印系統中正確工作的信息。

現在設置印表機共享。以下是我在 smb.conf 中關於印表機的代碼。我們將它用作樣板:


[nec]
#my NEC SuperScript 870
path=/var/spool/smb
print command=/usr/bin/lpr %s
lprm command=/usr/bin/lprm -P%p %j
printer=lp
public=yes
printable=yes




首先理解 path 參數是很重要的。當 Samba 接受來自 Windows 的列印作業后,在 Samba 使用 lpr 提交作業之前,先要將它存儲在磁碟上 path 指定的某個位置。由 path= 參數指定的目錄應該具有 Unix 許可權 1777,這樣任何人都可以將文件寫入該目錄。通常不需要 print command= 和 lprm= 那兩行。只有在希望為列印命令指定確切的路徑,或者需要將任何命令行參數傳遞給 lpr 時才包括它們。使用以上宏作為示例。%s 擴展成臨時文件名,%p 擴展成印表機名,%j 擴展成作業號。

您可能已經猜到了,printer= 選項是告訴 Samba 列印到哪個 Unix 印表機。要確保這個印表機是以原始方式設置的。public=yes 甚至可以讓沒有口令的用戶與這個印表機連接。如果稍後希望加強安全性,則略去這個選項(需要使用 valid users= 那行來替換這行以真正加強安全性)。printable=yes 既告訴 Samba 這個共享應該配置成印表機,又讓這個共享接收列印作業。

重新啟動 Samba 后,應該能夠從 Windows 看到新的印表機了。這時您應該能夠在 Windows 方安裝該印表機,並向這個新的共享資源發出測試頁。(Windows 將告訴您是在為 NULL 的印表機安裝驅動程序。別擔心。只需從列表中選擇正確的印表機驅動程序。)如果出於某種原因,列印不能工作,確保檢查 /var/log/log.smb 找出所有錯誤消息。我還應該說明一下,還有許多與印表機相關的實用 smb.conf 配置選項。我只涉及最常用的那些。請務必仔細閱讀 smb.conf 主頁以熟悉所有選項。

結束語
在本文中,我們介紹了 Samba 功能的關鍵要素,包括共享主目錄和列印。我還嘗試重點介紹了一些與安全性有關的參數。但不要以為這些就是 Samba 的全部。Samba 不只非常強大,而且還是可配置的。它旨在讓您的管理員確定,如何在您的組織中使用以及在哪些範圍內使用。在 Samba 設置中涉及到許多手工 smb.conf 配置時,效果非常值得,因為您能讓每一樣都如您希望的那樣確切使用。

有一些額外的 Samba 功能我們還沒來得及接觸到,這其中包括使 Samba 成為整個 Windows NT 域的部分(甚至控制它)的能力。鼓勵您充分發掘這個極其強大的工具的潛力。

參考資料


從主要 Samba 網站下載 Samba
frgpasswrd 是為設置 Samba 並相伴隱蔽口令的口令同步化實用程序
GnoSamba 是配置 Samba 的 GUI 工具
KNetmon 是用於 Samba 和 smbsf 包的前端
SambaLink/Q 是用於 smb.conf 文件的與版本無關的編輯器
SMB Mode for Emacs 可以幫助您編輯 Samba 的配置文件 smb.conf
請參閱 linuxdoc.org 上的列印 FAQ
請閱讀 Ed Weinberg 所著的 Samba
IBM Learning Services 提供了關於 Samba 的為期 2 天的上機實踐課程。
Using Samba (O\'Reilly Publishing; 1999) 是關於 Samba 管理的綜合指南,包括一些最近添加的內容,例如與 Windows NT 域進行集成,還有 SWAT 圖形配置工具
訪問 SWAT 主頁
Samba Notes for Redhat 提供了最新的,但不完全是最終的,版本的說明,涵蓋 Red Hat 6 上的 Samba 2 和版本相對比較舊的 Red Hat 5.x 上的 Samba 1。
查看 Samba/iX,這是程序套件,可以使運行 MPE/iX 操作系統的 HP e3000 能夠通過使用微軟的 Message Block (SMB) 來提供服務。
請參閱 Linuxcare 上的 Kernel Cousin Samba
xSMBrowser 是 Samba 支持 WINS 和廣播網路的瀏覽實用程序
請閱讀 Samba Unleashed,Steve Litt 著,其中包含 Daniel Robbins 的投稿
訂閱 Amiga Samba 郵件列表
查看 Nerdgear 中的一系列 Samba clothes

關於作者
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 與 Daniel Robbins 聯繫。





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

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