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