在混合環(huán)境中創(chuàng)建和配置文件共享
本文內(nèi)容如下:
- 創(chuàng)建和配置文件共享
- 規(guī)劃文件服務(wù)遷移
- 隱藏管理共享,即 IPC$
- 創(chuàng)建用戶和組用來處理文件共享的腳本
- 使用與文件共享有關(guān)的命令行工具
先決條件
為了更好地理解本系列文章的內(nèi)容,您應(yīng)該精通 Linux 知識,并熟悉一個可供您練習(xí)本文介紹的命令的 Linux 系統(tǒng)。此外,您還應(yīng)該具有訪問 Windows 環(huán)境的權(quán)限,用 Windows 環(huán)境來測試文件和打印訪問數(shù)據(jù)。
創(chuàng)建文件共享
在《出于各種目的 輕松設(shè)置Samba》介紹了 Samba 能夠識別 smb.conf 文件中各個部分的共享名,除了 homes、printers和 global。除了共享名之外,將共享名映射到磁盤上的某個位置也是一個重要信息。下面是一個最簡單的有用共享:
[tmpdir] path = /var/tmp
這段代碼定義了一個共享 tmpdir,它將映射到 Samba 服務(wù)器的 /var/tmp 目錄。例如,如果服務(wù)器名稱為 phoenix,那么用戶就能夠通過通用命名規(guī)范 (UNC) 路徑 \\phoenix\tmpdir 訪問該文件共享。然而,這個簡短的配置實(shí)際上用處不大:默認(rèn)的共享設(shè)置是只讀的,所以上面的共享是不可寫的。
使用安全參數(shù)
Samba 有許多與安全性相關(guān)的參數(shù),它們能夠?qū)τ脩襞c文件進(jìn)行訪問控制。這些參數(shù)大多都會影響 Samba 與底層 UNIX 文件權(quán)限的交互,但這些不在本文的討論范圍之內(nèi),本文將介紹一些常用的參數(shù)。
Server Message Block (SMB) 服務(wù)器,包括 Microsoft 本機(jī)實(shí)現(xiàn),都包含一個名為 IPC$ 的共享,它是一種進(jìn)程間通信共享,可以使用它通過網(wǎng)絡(luò)執(zhí)行軟件功能。以美元符號($)結(jié)尾的共享都是隱藏共享,不會顯示在 Microsoft 客戶端,即使服務(wù)器會報(bào)告該共享的存在。
即使沒有 smb.conf,Samba 也會創(chuàng)建一個 IPC$ 共享。如果創(chuàng)建了該共享,則可以控制對它的訪問。下面是一個嚴(yán)格 IPC$ 共享的示例:
[IPC$] hosts allow = 192.168.1.0/255.255.255.0 browsable = no
這個代碼片段定義了 IPC$ 共享,并將它設(shè)置為只允許在 192.168.1.0 網(wǎng)絡(luò)內(nèi)訪問。這個示例還關(guān)閉了 Browsable 特性,這表示當(dāng)客戶端請求 IPC$ 共享時(shí),Samba 不會顯示它。
以前,常見做法是隱藏一些敏感共享,如 IPC$,這樣做主要是希望能夠逃過攻擊者的視線。對于 IPC$ 共享而言,這事實(shí)上不是一種很聰明的做法。例如,向服務(wù)器請求獲得一個共享清單時(shí),必須連接到 IPC$ 共享。如果查看 Samba 調(diào)試信息和數(shù)據(jù)包跟蹤信息,就會發(fā)現(xiàn)這個 Browsable 選項(xiàng)根本沒用。我提到這一點(diǎn)是因?yàn)榭荚嚧缶V也提到了這一點(diǎn)。保護(hù) IPC$ 共享的更好方法是限制能夠連接的主機(jī),而不是試圖隱藏 IPC$ 共享。
用戶可以在不指定用戶的情況下登錄一個共享,此時(shí)該用戶是一名 訪客。默認(rèn)情況下,不允許訪客訪問共享,但是您可以通過 guest ok = yes 在共享中啟用訪客帳號。默認(rèn)的訪客用戶是 nobody,但是您可以通過全局的 guest account 參數(shù)修改這個用戶。
UNIX 系統(tǒng)中大量使用符號鏈接來鏈接文件系統(tǒng)的兩個區(qū)域。例如,在 home 目錄中,您可以創(chuàng)建一個指向系統(tǒng)級臨時(shí)目錄的符號鏈接并使用它,就像它是 home 的目錄的一部分一樣。Samba 也支持使用這些符號鏈接,讓用戶訪問文件共享以外的區(qū)域。如果您不希望出現(xiàn)這種情況,那么您可以在共享配置中添加 follow symlinks = no。
如果您希望限制可以訪問共享的用戶,那么可以使用 valid users 參數(shù)。例如,valid users = sean, jon, isaac 表示只允許參數(shù)所指定的三種用戶訪問這個共享。除了文件級權(quán)限之外,您還可以使用該參數(shù)為敏感共享提供額外的安全保護(hù)。
Home 共享
人們經(jīng)常使用 home 目錄保存?zhèn)€人文件。UNIX 密碼文件中的每一個用戶都會分配一個 home 目錄。您可以直接通過 Samba 導(dǎo)出任意數(shù)量的 home 目錄,無需使用 [homes] 代碼段來鍵入單獨(dú)的配置代碼段。當(dāng)有人請求一個名為 joe 的共享時(shí),Samba 會查找一個名為 joe 的已配置好的共享;如果 Samba 找不到該共享,那么它會查找同名的用戶。如果找到了這個用戶,那么 Samba 就會使用[homes] 代碼段中的配置作為此共享的模板。
清單 1 顯示了一個典型的 [homes] 代碼段。
清單 1. 用戶 home 共享的模板
[homes] comment = Home Directories writable = yes browsable = yes valid users = %S
清單 1 中的配置可以執(zhí)行以下任務(wù):
- 開始配置 homes 代碼段
- 添加一個備注,該備注會顯示在服務(wù)器可用文件共享的詳細(xì)信息中
- 將這個共享標(biāo)記為可寫,這樣用戶就能夠修改他們的 home 目錄
- 指出用戶瀏覽共享列表時(shí)能夠看見這個共享;用戶可以同時(shí)看到 homes 以及與用戶名同名的共享
- 限制只有該共享的擁有者才能夠訪問這個共享
注意清單 1 中 %S 宏的用法:可以將這個宏擴(kuò)展到共享名稱。因?yàn)橛脩裘桥c共享名相同,所以 valid users 限制了只有該共享的擁有者才能夠使用這個共享。
現(xiàn)在,只要用戶查找共享列表,就會看到他們的 home 目錄,并且能夠連接到該共享。然后此共享會映射到用戶的 UNIX home 目錄上。
關(guān)于 homes 共享中的一個有意思的方面是:如果您直接訪問 \\server\homes 目錄,則會直接進(jìn)入自已的共享,效果與訪問 \\server\username 一樣。這是 Samba 團(tuán)隊(duì)提供的一項(xiàng)額外功能,旨在為共享主機(jī)上的用戶提供幫助和減少混淆。#p#
添加用戶和組的腳本
如果查看用戶列表的 Microsoft 域,就會發(fā)現(xiàn)連接您服務(wù)器的用戶可能沒有本地 UNIX 帳號。解決這個問題的一個方法是,在用戶連接服務(wù)器時(shí),讓 Samba 使用 add user script 參數(shù)為您創(chuàng)建該用戶??梢詫?%u 宏擴(kuò)展到這個用戶。您可以使用諸如 useradd 這樣的系統(tǒng)工具或編寫自己的腳本。
在使用 Microsoft 工具管理 Samba 時(shí),還可以使用為組 (group) 而存在的類似參數(shù) — add group script。如果您使用的工具是 add user to group 和 類似的 delete 腳本,那么這些參數(shù)也很有用的。smb.conf 的手冊頁中包含的可腳本化任務(wù)的完整列表。
讓守護(hù)程序根據(jù)需要創(chuàng)建用戶并不總是最好的方法。使用 winbind 或者基于 Lightweight Directory Access Protocol (LDAP) 的認(rèn)證機(jī)制效果可能更好一些,這樣 Samba 和 Linux 就能夠共享一個通用的用戶數(shù)據(jù)庫。
處理混合情況
文件或目錄名的字母大小寫與 Microsoft 域中不太一樣。例如,F(xiàn)ILE、file 和 FiLe 均指向同一個文件。然而,在 Linux 中,大小寫很重要,因此這三個文件是完全不同的。Samba 需要知道如何實(shí)現(xiàn)這兩種平臺之間的映射,以解決它們之間的沖突。這種大小寫映射進(jìn)程是稱為 名稱改編 的更大進(jìn)程的一部分。
有一些參數(shù)會影響名稱大小寫的改編。其中最重要的參數(shù)是 case sensitive,它可以設(shè)置為 yes、no 或 auto。如果啟用了 case sensitive,那么 Samba 就會使用客戶端要求的大小寫。如果禁用該設(shè)置,那么 Samba 會以大小寫無關(guān)的方式查找這個目錄。
與區(qū)分大小寫有關(guān)的一個問題是:如果設(shè)置不正確,您可能無法訪問一些文件。假設(shè)一個目錄有兩個文件,一個是 test,另一個是TEST。如果 Samba 以大小寫無關(guān)的方式訪問它們,則無法區(qū)分這兩個文件。
該設(shè)置的默認(rèn)值是 auto,它會尋找一個客戶端擴(kuò)展字段來指示客戶端是否支持區(qū)分大小寫的訪問。Windows 客戶端不支持這項(xiàng)功能,所以它們是大小寫無關(guān)的。
default case 和 preserve case 這兩個參數(shù)可以一起使用。如果將 preserve case 設(shè)置為 yes,則會使用客戶端的設(shè)置。如果preserve case 設(shè)置為 no,則會使用 default case 的值來確定新創(chuàng)建文件的大小寫。
啟用 Usershare
用戶可以使用 Usershare 特性創(chuàng)建自己的共享,不必修改 smb.conf。在管理員啟用 Usershare 特性之后,一般用戶即可使用命令行工具導(dǎo)出他們選擇的目錄。用戶還可以在完成操作之后刪除它們的共享。
使用 Usershare 的第一步是在全局范圍內(nèi)啟用這個特性。清單 2 顯示了啟用 Usershare 的 smb.conf 代碼的一部分。
清單 2. 啟用 Usershare
[global] usershare path = /var/lib/samba/usershares usershare max shares = 5 usershare prefix allow list = /home usershare prefix deny list = /var, /usr
清單 2 顯示的是 [global] 代碼段中的代碼。首先,usershare path 定義了一個目錄,Samba 使用這個目錄來保存與用戶共享相關(guān)的配置。這個目錄有一些限制條件,我們將在后面的內(nèi)容中進(jìn)行說明。接下來介紹的是用戶共享數(shù)量限制。最后兩個參數(shù)展示了如何限制可以共享的目錄。usershare prefix allow list 將所有共享都限制在給定目錄中,在這里,這些共享都必須位于 /home 目錄下。usershare prefix deny list 參數(shù)則相反,只允許共享給定目錄以外的目錄。
Samba 對用戶共享使用了其他兩個方面的限制。首先,創(chuàng)建共享的用戶必須能夠?qū)?usershare path 指定的目錄進(jìn)行寫入操作,這個目錄必須具有粘貼位 (sticky bit) 設(shè)置(1000 或 +t)。其次,用戶必須擁有共享的目錄,除非 usershare owner only 設(shè)置為 false。
與文件權(quán)限有關(guān)的第一個限制意味著創(chuàng)建 usershare path 時(shí)必須小心。如果您希望將用戶共享限制為只允許 usershares 組的用戶共享,則需要添加以下一系列的命令:
# mkdir -p /var/lib/samba/usershares # chown root:usershares /var/lib/samba/usershares # chmod 1770 /var/lib/samba/usershares
第一個命令創(chuàng)建了目錄以及所有必要的父目錄。第二個命令將目錄的用戶和組的所屬權(quán)分別設(shè)置為 root 和 usershares。最后一個命令將目錄的所有者和組權(quán)限設(shè)置為 Read/Write/Execute,即拒絕其他所有人訪問,并設(shè)置了粘貼位。因此,只有 root 和 usershares 組的成員能夠使用這個目錄;通過粘貼位設(shè)置,只有文件的擁有者才能夠刪除該文件。
創(chuàng)建共享可能是這個練習(xí)中最難的一部分。用戶可以執(zhí)行以下命令:
net usershare add docs /home/me/Documents/ "My docs" Everyone:F
上面這個命令會將 /home/me/Documents 導(dǎo)出為一個稱為 docs 的共享,并擁有完全控制所有人的控制權(quán)。其他允許使用的命令包括:
- net usershare list 列出用戶已經(jīng)創(chuàng)建的用戶共享。
- net usershare info docs 顯示 docs 共享的配置。
- net usershare delete docs 刪除 docs 共享。
命令行工具
Samba 提供了一些命令行工具。通過 Samba 提供的 libsmbclient,其他人可以開發(fā)一些常用的 SMB/Common Internet File System (CIFS) 工具。
UNIX 和 Windows 之間的一個顯著區(qū)別是 UNIX 有一個大型文件系統(tǒng),而 Windows 有一系列的驅(qū)動器名。smbclient 實(shí)用程序允許您通過一個類似 File Transfer Protocol (FTP) 的界面來瀏覽遠(yuǎn)程的 Windows 共享,但是遠(yuǎn)程 Windows 共享對應(yīng)用程序是透明的,所以它像其他文件系統(tǒng)一樣應(yīng)該是可掛載的。
Samba 提供了一個名為 smbmount 的工具,有時(shí)會將它重新打包為 mount.cifs。您可以直接調(diào)用這個命令,或者通過 mount 命令調(diào)用它。清單 3 顯示的是將遠(yuǎn)程 CIFS 共享掛載到常規(guī)文件系統(tǒng)的 Linux 系統(tǒng)。
清單 3. 掛載遠(yuǎn)程 CIFS 共享
# mount -t cifs '\\192.168.1.134\docs' /mnt -o user=myuser Password: # mount ... \\\\192.168.1.134\\docs on /mnt type cifs (rw)
第一個命令將一個 CIFS 文件系統(tǒng)掛載到指定的 UNC 路徑,然后將它放到 /mnt 下。與 UNC 路徑不同的是,它看起來好像是一個標(biāo)準(zhǔn)的 mount 調(diào)用。選項(xiàng)是通過 -o 傳遞的。這里所需的唯一選項(xiàng)是用戶名。mount.cifs 手冊頁中概括了其他所有選項(xiàng),其中可能包含一個密碼和一個域。如果您沒指定一個密碼,系統(tǒng)會提示您輸入一個密碼。最后,mount 命令會顯示已掛載的文件系統(tǒng)。
另一個命令是 smbsh。smbsh 沒有通過標(biāo)準(zhǔn)的 UNIX 方法掛載文件系統(tǒng),而是攔截文件請求的庫調(diào)用,然后在必要時(shí)將請求重定向到某個 CIFS 共享。但是,大多數(shù)系統(tǒng)都不再提供這個命令,因?yàn)橛盟幌駫燧d文件系統(tǒng)那樣穩(wěn)定。
遷移文件共享
當(dāng)您將一個文件服務(wù)從一臺服務(wù)器移到另一臺服務(wù)器時(shí),用戶可能會忘記訪問新的服務(wù)器。Samba 允許您讓服務(wù)器響應(yīng)另一個名稱。例如,如果您將文件共享從服務(wù)器 phoenix 移動到服務(wù)器 fs2 時(shí),您可以讓 fs2 來響應(yīng) phoenix 的請求。當(dāng)然,您必須保證 phoenix 不會響應(yīng)請求,或者關(guān)閉或重命名它。
要為服務(wù)器添加別名,可以使用全局參數(shù) netbios aliases。如果您希望將 Samba 服務(wù)器的名稱修改為不同于服務(wù)器的 UNIX 名稱的其他名稱,則可以使用參數(shù) netbios name。
在準(zhǔn)備遷移時(shí),您目前為止所了解的有關(guān)掛載文件系統(tǒng)的命令還有助于將文件從一臺服務(wù)器復(fù)制到另一個服務(wù)器。您可能還希望使用一些 UNIX 工具(如 rsync)來幫助您解決問題。
原文:http://www.ibm.com/developerworks/cn/linux/l-lpic3-312-2/index.html?ca=drs-
【編輯推薦】