使用Active Directory執行Linux客戶端身份驗證

轉貼 [url]http://linux.chinaitlab.com/administer/775180.html[/url]

長久以來Linux和 Windows一直對立存在並快速發展着,企業中的應用也逐漸分爲兩大陣營。它們彼此既不互相競爭,也不互相協做。雖然 Windows與Linux之間的競爭水火不容,但目標都但願爲公司提供高質量且經濟高效的IT服務。做爲企業IT管理者,實現此目標的方法之一是共享Active Directory。幾乎全部的IT組織都採用Active Directory,爲它們的Windows桌面和 服務器提供身份驗證服務。與其針對Linux環境維護一個不一樣的身份驗證基礎結構(加上一組不一樣的用戶名和密碼),還不如讓Linux計算機也採用Active Directory,這樣豈不是更好?本文中向您介紹如何實現這一目的。
  Windows身份驗證
  Windows推出集成網絡身份驗證和單一登陸系統至今已有一段時間了。在Windows 2000以前,Windows NT域控制器(DC)使用NT LAN Manager (NTLM) 協議爲 Windows客戶端提供身份驗證服務。雖然NTLM不像當初想象的那樣 安全,但它仍是很是有用的,它完美地解決了須要在網絡上跨多個 服務器維護重複用戶賬戶的問題。
  自Windows 2000開始,Microsoft便從NTLM移到了Active Directory及其集成Kerberos身份驗證服務。與NTLM相比,Kerberos更 安全,並且更適合調整。此外,Kerberos更是Linux和UNIX系統早已採納的行業標準,從而爲這些平臺打開了與Windows集成的大門。
  Linux身份驗證
  Linux(以及在其上面運行的GNU 工具和庫)當初並非以單一身份驗證機制的設計理念進行構建的。所以,Linux 應用程序開發人員就逐漸養成了一種習慣,即建立屬於本身的身份驗證方案。他們設法經過在/etc/passwd中查詢名稱和密碼哈希,或者提供大相徑庭 (和個別)的機制,來實現這一目標。
  由此產生了不少身份驗證機制,以致於沒法對其進行管理。1995年,Sun提出了稱爲「可插入身份驗證模塊」(Pluggable Authentication Modules, PAM) 的機制。PAM提供了一組全部應用程序開發人員均可以使用的通用身份驗證API,以及管理員配置的後端,容許多種「可插入」身份驗證方案。經過使用 PAM API 進行身份驗證以及使用Name Server Switch (NSS) API來查詢用戶信息,Linux應用程序開發人員能夠少編寫一些代碼,而且Linux管理員可從同一個地方配置和管理身份驗證過程。
  大多數Linux發佈版本都會隨附多個PAM身份驗證模塊,其中包括支持對LDAP目錄進行身份驗證和使用Kerberos進行身份驗證的模塊。用戶可使用這些模塊對Active Directory進行身份驗證,但這其中存在一些明顯的限制。
   Samba和Winbind
  Samba是一種開放源代碼項目,旨在在Windows與Linux環境之間提供集成。Samba包含的組件使Linux計算機有權訪問 Windows文件和打印服務,同時還提供了基於Linux的服務來模擬Windows NT 4.0 DC。使用Samba客戶端組件,Linux計算機即可利用Windows NT和Active Directory DC 所提供的Windows 身份驗證服務。
  Samba 在這個項目中對咱們來講最有趣的一部分叫作Winbind。Winbind 是在Samba客戶端上運行的後臺程序(在Windows中稱爲服務),它的做用是充當在Linux計算機上運行的PAM和NSS與在DC上運行的 Active Directory之間通訊的代理。具體來講,Winbind 使用Kerberos來對Active Directory和LDAP進行身份驗證,以檢索用戶和組信息。Winbind 還提供其餘服務,如使用相似於Active Directory中DCLOCATOR的算法來查找DC的功能,以及經過使用RPC與DC進行通訊來重置Active Directory密碼的功能。
  Winbind解決了多個僅使用Kerberos和PAM沒法解決的問題。具體來講,Winbind並非將DC進行硬編碼以便按照PAM Kerberos模塊的方式進行身份驗證,而是以相似於Microsoft DC LOCATOR模塊運行的方式經過搜索 DNS 定位程序記錄來選擇DC。
   三種身份驗證策略
  假設Linux計算機上提供了LDAP、Kerberos 和 Winbind 三種身份驗證,咱們能夠採用三種不一樣的實現策略容許Linux計算機使用Active Directory來進行身份驗證。
  使用LDAP身份驗證使用Active Directory進行身份驗證的最簡單但成效最低的方法是,將PAM 配置爲使用 LDAP 身份驗證,如圖1 所示。雖然 Active Directory 屬於 LDAPv3 服務,但 Windows 客戶端使用Kerberos(回退到 NTLM)而不是 LDAP 進行身份驗證。
  LDAP身份驗證(稱爲 LDAP 綁定)經過網絡以明文形式傳遞用戶名和密碼。對於大多數用途來講,這不只不安全,並且也是沒法接受的。
  圖1 使用 LDAP 對 Active Directory 進行身份驗證

 
     下降以明文形式傳遞憑據的風險的惟一方法是使用相似於SSL 的 協議加密客戶端與Active Directory 進行通訊所使用的通道。這絕對可行,但會增長在DC和Linux計算機上管理 SSL 證書的負擔。此外,使用 PAM LDAP 模塊並不支持更改已重置的或過時的密碼。
  使用 LDAP 和 Kerberos 利用 Active Directory 進行 Linux 身份驗證的另外一種策略是,將 PAM 配置爲使用 Kerberos 身份驗證,以及將 NSS 配置爲使用 LDAP 查找用戶和組信息,如圖 2 所示。此方案的優勢是,它相對來講比較安全,並且它利用的是 Linux 的「內置」功能。可是它不利用 Active Directory DC 發佈的 DNS 服務位置 (SRV) 記錄,因此您會被迫挑選一組特定的 DC 來進行身份驗證。對於管理即將過時的 Active Directory 密碼或是直至最近的適當組成員身份查詢,它提供的方法也不是很直觀。
 
  
  圖2 使用LDAP和Kerberos對Active Directory進行身份驗證
    
    使用Winbind、 Active Directory進行 Linux 身份驗證的第三種方法是,將PAM和NSS配置爲調用Winbind後臺程序。Winbind 將使用LDAP、Kerberos 或 RPC(使用其中最合適的一個),將不一樣的PAM和NSS請求轉換爲相應的Active Directory調用。圖3說明了這一策略。
  圖3 使用 Winbind 對 Active Directory 進行身份驗證

實施計劃
  因爲與Active Directory 的集成的加強,我選擇在Red Hat Enterprise Linux 5 (RHEL5) 上使用Winbind 來進行個人Linux與Active Directory 集成項目。RHEL5是最新的商用Red Hat Linux 發佈版本,並且它在企業數據中心中至關受歡迎。
  使RHEL5 對 Active Directory 進行身份驗證基本上須要下列五個不一樣的步驟:
  ·查找並 下載適當的 Samba 以及其餘依存組件。
  ·構建 Samba。
  ·安裝並配置 Samba。
  ·配置 Linux,特別是 PAM 和 NSS。
  ·配置 Active Directory。
  本文的下面幾節將詳細介紹這些步驟。
   查找適當的軟件
  Linux 與 Windows 之間最大的區別之一是,Linux 由一個小型操做系統內核和大型的可單獨 下載和 安裝的組件集構成。這雖然能夠建立爲某些任務而進行優化的特定 Linux 配置,但也會使服務器的配置和管理變得極爲複雜。不一樣的發佈版本處理這種狀況的方式也不同。Red Hat(及其非商用版 Fedora)使用 Red Hat Package Manager (RPM) 來安裝和管理這些組件。
  適用於 Red Hat 的 Linux 組件包含兩種形式。RPM 文件包含針對組件版本、Linux 發佈版本和 CPU 體系結構的特定組合而預先編譯和構建的二進制文件。所以,您能夠 下載和 安裝二進制文件,例如,針對在 Intel x86 體系結構 CPU 上運行的 Fedora 版本 10 構建的通用 UNIX 打印系統 (Common UNIX Printing System, CUPS) 的 1.3.8-5 版本。假若有十多種不一樣的 CPU 體系結構、100 多個 Linux 發佈版本,還有上千個程序包和版本,則要選擇的二進制 RPM 的數量之多即可想而知。
  另外一方面,源 RPM 文件包含給定程序包的實際源代碼。但您須要本身下載和安裝源、配置構建選項,以及編譯和連接二進制文件。構建您本身的操做系統組件這一想法使習慣於 Microsoft 在 Windows 安裝 CD 上提供什麼就安裝什麼的 Windows 用戶十分畏怯,可是程序包管理器可以使整個過程至關輕鬆,並且很是可靠。Samba 小組發佈更新和安全修補程序的速度驚人,僅在 2008 年7、八月兩個月內,就發佈了四個版本的 Samba 3.2,總共包含 100 多個錯誤和安全修補程序。對於此項目,我下載了最新的 Samba 穩定版本 3.0.31 版的源。
  爲何要下載 Samba 源,而不下載預先編譯的二進制文件集呢?固然,我剛開始也嘗試過這麼作,但在調試器上花了數小時以後,我發現下載的二進制文件並非使用支持 Active Directory 身份驗證的正確選項構建而成的。具體來講,在 Active Directory 中支持 Linux ID 映射的代碼在默認版本中被關閉了,所以我必須使用適當的構建選項重建 Samba。稍後,我將在本文中詳細討論 ID 映射。
  雖然 Linux 本來是小型內核,但 Red Hat Enterprise 發佈版本預先安裝了許多程序包。這一般會使生活變得更輕鬆,由於您從徹底正常運行的操做系統開始着手,但預先安裝的程序包有時會與您之後想要安裝的軟件發生衝突。
  我在安裝 Red Hat 時,由於想要使用較新的版本,因此並無包含 Samba(一般會默認安裝 Samba)。可是,較新版本的 Samba 要求已安裝的幾個其餘庫和實用工具也要使用新版本。這類的依賴問題很是煩人,不過,使用 RPM 就能夠輕鬆解決。
  承載二進制 RPM 程序包的網站不少。我使用的網站(勿庸置疑,是我找到的第一個網站)稱爲 PBONE,網址爲 rpm.pbone.net。該網站提供了搜索程序包的簡便方法,而且具備個人 CPU 體系結構 (i386) 和操做系統發佈版本 (Red Hat Enterprise Linux 5/Fedora 7&8) 所需的全部二進制文件。
  我必須下載和更新程序包來構建和安裝最新的 3.0 版 Samba(但我從何嘗試過較新的 3.2 版)。請注意,這些程序包主要針對 Fedora Core (fc) 發佈版本。Red Hat 以 Fedora 使用的相同源爲基礎,並且徹底可與它交互。針對 Fedora Core 7 及更高版本構建的程序包,不須要任何修改便可在 RHEL5 上運行。請將下載的 RPM 文件放在 /usr/src/redhat/RPMS 目錄中。
  構建和安裝 Samba 3.0.31 所需的程序包:
  
      samba-3.031-0.fc8.src.rpmSamba 3.0.31 源 RPM
  gnutls1.6.3-3.fc7.i386GNU 傳輸層安全性 (TLS) 庫
  gnutils-devel-1.6.3-3.fc7.i386GNU TLS 開發文件
  popt-1.12-3.fc8.i386命令行參數分析庫
  popt-devel-1.12-3.fc8.i386命令行參數分析開發文件
  cups-libs-1.2.12-11.fc7.i386通用 UNIX 打印機系統庫
  cups-devel-1.2.12-11.fc7.i386通用 UNIX 打印機系統開發文件
  cups-1.2.12.11.fc7.i386通用 UNIX 打印機系統二進制文件

    構建Samba
  構建 Samba 的第一歩是下載適當的源 RPM。我從 PBONE 站點下載了 Samba 3.0.31 的源 RPM。而後,將下載的源 RPM 文件放到 /usr/src/redhat/SRPMS 中,這是構建過程當中用於源 RPM 的標準目錄。
  打開終端會話(在 Windows 中稱爲命令行窗口)並移至 SRPMS 文件夾。完成後,使用該命令安裝源程序包,如圖4所示。
 
   
 圖4 安裝 Samba 源 RPM
    
    若是您看到「用戶 mockbuild 不存在,請使用根」錯誤警告,請不要擔憂。這個錯誤指出還沒有安裝 Mock 構建實用工具,但沒有這些實用工具,構建過程也能夠進行。
  而後,移至 /usr/src/redhat/SPECS 目錄並編輯文件 SAMBA.SPEC,該文件包含了 Samba 構建選項。搜索以「CFLAGS=」開頭的那一行,並確保存在「--with-shared-modules=idmap_ad,idmap_rid」選 項。此選項可確保構建過程包含將 Linux UID(惟一標識符)適當轉換到 Active Directory 的代碼。圖5顯示了此選項。
 
   圖5 with-shared-modules 構建選項
    
    接下來,您可能必須更新計算機上的一些庫,才能適當構建和安裝 Samba,具體取決於您安裝的是哪一個版本的庫。在個人例子中,我必須使用 rpm --install 命令安裝圖 4 中列出的程序包;在某些狀況下,我必須使用 --force 選項來克服一些依賴問題。
  要構建 Samba,請移至 /usr/src/redhat 目錄,並運行命令 rpmbuild –bb SPECS/samba.spec,如圖6所示。此過程將新的 samba-3.0.31-0.i386 RPM 文件留在 /usr/src/redhat/RPMS 目錄中。咱們稍後將在此項目中安裝這個 RPM 文件。
 
   
  圖6 建立 Samba 二進制 RPM 文件
配置 Linux 網絡
  爲了使用 Active Directory 進行身份驗證,您的 Linux 計算機必須可以與 DC 通訊。您必須配置三個網絡設置才能與 DC 通訊。
  首先,重要的是經過使用動態主機配置 協議 (DHCP) 或使用 ifconfig 命令爲 Linux 計算機分配適當的 IP 地址和網絡掩碼,來確保適當配置該計算機的網絡接口。在 RHEL5 下,經過從「系統」|「管理」菜單中選擇「網絡」來配置網絡,如圖7所示。
 
   
  圖7 配置網絡
    
    接着,確保將 Linux 計算機的 DNS 解析程序設置爲與 DC 使用相同的 DNS 名稱服務器;在大多數狀況下,假定您要使用 Active Directory 集成的 DNS,則該 DC 是您想要加入 Linux 計算機的域中的 DC。在用於配置網絡的相同網絡配置實用工具的 DNS 選項卡上,配置 DNS 解析程序,如圖8所示。
 
 
  圖8 設置主 DNS 解析程序
    
    最後,完成上述步驟後,您必須設置 Linux 計算機的主機名稱以反映它在域中的名稱。雖然您可使用網絡配置應用程序設置主機名稱,但這一方法不必定始終適用。
  可是,可直接編輯 /etc/hosts 文件,並在具備 <主機名稱> 形式的 localhost.localdomain 條目下添加條目。(例如,「10.7.5.2 rhel5. linuxauth.local linuxauth」)。請注意,若是不這麼作,當您將 Linux 計算機加入到域後,會在目錄中建立錯誤的計算機對象。
  配置Linux 時間同步
  Kerberos 協議須要身份驗證系統具備能在相對較小的時間內同步的時鐘。默認狀況下,Active Directory 可容許的誤差時間最長爲五分鐘。爲了確保您的 Linux 系統與 DC 的系統時鐘維持在這個時間內,您應該將 Linux 系統配置爲使用 DC 的網絡時間協議 (NTP) 服務。
  而後,在 Linux 服務器上,從「系統」|「管理」菜單中運行日期與時間實用工具,而後單擊「網絡時間協議」選項卡。選中「啓用網絡時間協議」框,而後添加您要用做網絡時間 源的 DC 的 IP 地址。請注意,這一般應該是在域中擔任主域控制器 (PDC) 仿真器靈活單主機操做 (FSMO) 角色的 DC。圖9顯示瞭如何設置 Linux 網絡時間源的一個示例。
 
  圖9 配置網絡時間協議

配置PAM和NSS
  PAM和NSS提供Linux 應用程序(如桌面)與Winbind之間的聯繫媒介。與許多Linux 服務同樣,您能夠經過文本文件來配置 PAM 和 NSS。咱們先來討論一下如何配置 PAM。
  PAM 爲使用它的應用程序提供了四個與身份驗證相關的功能。身份驗證設施容許應用程序肯定使用它的用戶。賬戶設施提供的賬戶管理功能(如登陸時間限制)與身份驗 證並非特別相關。密碼設施提供請求和管理密碼的機制。會話設施執行與用戶相關的安裝和應用程序的拆卸任務,例如,在用戶特定的目錄中記錄或建立文件。
  Red Hat 下的 PAM 將它的配置文件 存儲在 /etc/pam.d 目錄中,其中包含使用 PAM 進行身份驗證的每一個應用程序的文本文件。例如,文件 /etc/pam.d/gdm 包含 Gnome Desktop Manager (GDM) 的 PAM 配置信息,即 Red Hat 的默認窗口運行環境。每一個 PAM 配置文件都包含多行內容,其中每行分別定義 PAM 身份驗證過程的某個方面。圖10顯示了 GDM 的 PAM 配置文件的內容。
 
 
  圖10 Gnome Desktop Manager 的 PAM 配置文件
    
    PAM 配置文件中的每一個項目都具備 <管理組> <控制> <模塊> <參數> 的形式,其中 <管理組> 對應於配置條目所屬的設施:身份驗證、賬戶、密碼或會話。該文件的第三欄包含 /lib/security 目錄中的 PAM 共享庫的名稱。共享庫包含可動態加載的可執行代碼,相似於 Windows 中的 DLL。模塊名稱後的其餘術語都是 PAM 傳遞到共享庫的參數。
   PAM 控制關鍵字
   Required若是模塊成功,則 PAM 將繼續評估管理組的其他項目,而且結果將由其他模塊的結果決定。若是模塊失敗,PAM 將繼續評估,但向調用應用程序返回失敗消息。
   Requisite若是模塊成功,PAM 將繼續評估管理組條目。若是模塊失敗,PAM 將返回到調用應用程序,而且不作進一步處理。
   Sufficient若是模塊成功,PAM 將向調用應用程序返回成功消息。若是模塊失敗,PAM 會繼續評估,但結果將由後續模塊決定。
   Optional除非模塊是爲管理組指定的惟一模塊,不然 PAM 將忽略模塊的結果。
   IncludePAM包括引用的 PAM 配置文件的內容,而且還會處理該配置文件包含的條目。
  您能夠看到每一個管理組都包含多個條目。PAM 按照調用命名的模塊的順序處理條目。而後,該模塊返回成功或失敗消息,而 PAM 將繼續根據控制關鍵字進行評估。
  您可能會注意到,GDM 的 PAM 配置文件在它的全部管理組中都包含系統身份驗證。這正是 PAM 爲 GDM 創建默認身份驗證行爲的方式。經過修改系統身份驗證,您能夠修改在其 PAM 配置中包含系統身份驗證文件的全部應用程序的身份驗證行爲。圖11中介紹了默認系統身份驗證文件。
 
  圖11 PAM 系統身份驗證文件
    
    Name Service Switch (NSS) 模塊將隱藏系統數據 存儲的 詳細信息以防應用程序開發人員看見,這與 PAM 隱藏身份驗證的詳細信息的方式大致類似。NSS 容許管理員指定存儲系統數據庫的方式。具體來講,管理員能夠指定如何存儲用戶名和密碼信息。由於咱們但願應用程序使用 Winbind 在 Active Directory 中查詢用戶信息,因此咱們必須修改 NSS 配置文件才能顯示此信息。
  Red Hat 包含一個小型的圖形小程序,可用來配置 PAM 和 NSS,稱爲 system-config-authentication。它負責管理您須要對系統身份驗證和 nss.conf 文件進行的大部分(而非所有)更改。
  運行 system-config-authentication 應用程序後,您會看到如圖12 所示的對話框。選中「用戶信息」(用於配置 nss.conf 文件)和「身份驗證」(用於修改系統身份驗證文件)這兩個選項卡上的 Winbind 選項。
 
   
  圖12 systemconfig-authentication 對話框
    
    單擊「配置 Winbind」按鈕,您將看到如圖13所示的對話框。在 Winbind 域字段中輸入要對用戶進行身份驗證的域的名稱,並選擇「ads」做爲安全模式。在 Winbind ADS 領域字段中輸入 Active Directory 域的 DNS 域名稱。在 Winbind 域控制器字段中,輸入您但願該 Linux 系統對其進行身份驗證的 DC 的名稱,也能夠輸入星號,代表 Winbind 應經過查詢 DNS SRV 記錄來選擇 DC。
 
   
  圖13 配置 Winbind 對話框
    
    選擇您的 Active Directory 用戶應該具備的適當默認命令行界面,在本例中,我選擇的是 Bourne-again Shell 或 BASH。此時,不要按下「加入域」按鈕,稍後,再將此計算機加入到域。
  在將 /etc/pam.d/system-auth 文件修改成支持 Winbind 後,還須要對其進行另外一個更改。當 Linux 用戶登陸時,系統要求該用戶必須擁有主目錄。主目錄包含許多用戶特定的首選項和配置條目,與 Windows 註冊表很是類似。問題在於,由於您要在 Active Directory 中建立用戶,因此 Linux 不會自動爲用戶建立主目錄。幸運的是,您能夠將 PAM 配置爲在其會話配置期間爲用戶建立主目錄。
  打開 /etc/pam.d/system-auth 文件,而後向下滾動到底部,在標有「session optional map_mkhomedir.so skel=/etc/skel umask=0644」會話部分中的最後一行以前插入一行(請參見圖14)。這一行將 PAM 配置爲建立用戶的主目錄(若是用戶沒有主目錄)。它將目錄 /etc/skel 用做「框架」或模板,並且將權限掩碼 0644(全部者具備的讀寫權限、主要組具備的讀取權限,以及其餘人具備的讀取權限)分配給新文件夾。
 
   
  圖14 爲用戶建立主目錄

安裝和配置Samba
  要安裝您剛剛建立的 Samba 二進制文件,請轉至 /usr/src/redhat/RPMS 目錄。由 rpmbuild 命令建立的全部 RPM 文件都會顯示在此目錄中。請記住,Samba 包括容許 Linux 客戶端訪問 Windows(或 Samba)文件共享的二進制文件,以及容許 Linux 系統充當 Windows 文件服務器、Windows 打印機服務器和 Windows NT 4.0-style DC 角色的代碼。
  要讓 Linux 對 Active Directory 進行身份驗證,咱們根本用不到這麼多角色,其實咱們只須要使用 Samba 公共文件和 Samba 客戶端二進制文件就能夠了。爲了方便起見,這些文件可爲兩個 RPM 文件:samba-client-3.0.31-0.i386.rpm 和 samba-common-3.0.31-0.i386.rpm。使用 rpm --install 命令安裝 RPM 文件,請看下面的示例:rpm --install samba-common-3.0.31-0.i386.rpm。(請注意,您須要先安裝 –common RPM 文件。)
  安裝了Samba 客戶端二進制文件後,您必須修改默認 Samba 配置,以確保 Winbind 使用 Active Directory 適當處理身份驗證。全部 Samba 配置信息(包括客戶端和服務器)均可以在 smb.conf 文本文件中找到,該文件在默認狀況下位於 /etc/samba 目錄中。Smb.conf 可能包含大量配置選項,本文只會對其內容進行簡要介紹。samba.org 網站和 Linux 主頁簡要討論了 smb.conf。
  第一步是將 Winbind 配置爲使用 Active Directory 進行身份驗證。您必須將 smb.conf 中的安全模式設置爲「ads」。system-config-authentication 實用工具應該已經幫您設置好了,但檢查一下老是比較保險。編輯 smb.conf 文件,並搜索標有「域成員選項」的部分。找出以「security」開頭的那一行,並肯定它的內容是「security = ads」。下一個配置步驟是肯定 Winbind 如何將 Windows 安全主體(如用戶和組)映射到 Linux 標識符,這須要進行進一步的說明。
   ID 映射問題
  經過 Active Directory 對 Linux 用戶進行身份驗證時有個大問題我尚未提到,那就是用戶和組的 UID 問題。Linux 和 Windows 在內部都不是根據用戶名來引用用戶的,而是使用惟一的內部標識符。Windows 使用安全標識符(即 SID),它可以惟一標識 Windows 域中的每一個用戶,其結構長度能夠變化。SID 也包含惟一域標識符,以便 Windows 區別不一樣域中的用戶。
  Linux 的方案則簡單得多,Linux 計算機上的每一個用戶都有一個 UID,而此 UID 只是一個 32 位的整數。可是 UID 的範圍受限於計算機自己。在某臺 Linux 計算機上具備 UID 436 的用戶,不必定與另外一臺 Linux 計算機上具備 UID 436 的用戶相同。所以,用戶必須登陸他須要訪問的每臺計算機,這顯然不是理想的狀況。
  Linux 網絡管理員解決此問題的經常使用方法是,使用 Network Information System (NIS) 或共享 LDAP 目錄來提供網絡身份驗證。網絡身份驗證系統提供用戶的 UID,而使用該身份驗證系統的全部 Linux 計算機都將共享相同的用戶和組標識符。在這種狀況下,我將使用 Active Directory 來提供惟一的用戶和組標識符。
  要解決此問題,我能夠採用兩種策略。第一個(也是最明顯的)策略是,爲每一個用戶和組建立 UID,並將該標識符與各自的對象一塊兒存儲到 Active Directory 中。這樣一來,當 Winbind 對用戶進行身份驗證時,它就能夠查詢該用戶的 UID,而後將它提供給 Linux 做爲該用戶的內部標識符。Winbind 將此方案稱爲 Active Directory ID 映射,或 idmap_ad。圖15介紹了 Active Directory ID 映射的過程。
 
  
  圖15 Active Directory ID 映射
    
    Active Directory ID 映射的惟一缺點是,咱們必須提供一種機制來確保每一個用戶和組都擁有標識符,並且這些標識符在林中都是惟一的。有關詳細信息,請參閱「針對 Active Directory ID 映射配置 Active Directory」邊欄。
  幸虧,還有另一種 ID 映射策略,這種策略的管理負荷要少得多。回想一下,咱們在前面曾提到過 Windows SID 能夠惟一標識域中的用戶和域自己。SID 中能惟一標識域中用戶的部分稱爲相對標識符(或 RID),並且這部分事實上是一個 32 位的整數。所以,Winbind 可在用戶登陸時直接從 SID 中提取 RID,而後將該 RID 用做惟一的內部 UID。Winbind 將此策略稱爲 RID 映射,或 idmap_rid。圖 18 描述了 RID 映射的實際工做方式。
 
   
  圖16 RID 映射
    
    RID 映射具備零管理負荷的優勢,可是您不能將它用在多域的環境中,由於不一樣域中的用戶可能擁有相同的 RID 值。可是,若是您擁有單個 Active Directory 域,則可使用 RID 映射。
  要配置 Winbind ID 映射策略,請再次編輯 /etc/samba/smb.conf 文件,而且添加「idmap backend = ad」行來使用 Active Directory 映射策略;若是您要使用 RID 映射策略,請添加「idmap backend = rid」行。確保該文件中不存在任何其餘指定映射策略的行。
  對於 Winbind,咱們還須要在 smb.conf 文件中添加其餘配置選項。雖然咱們已將 PAM 設置爲在每一個用戶登陸時爲其建立主目錄,可是還須要告訴 Winbind 主目錄的名稱是什麼。咱們能夠經過將「template homedir = /home/%U」行添加到 smb.conf 來執行此操做(請參見圖17)。這會告訴 Winbind,使用 Active Directory 進行身份驗證的每一個用戶的主目錄都將是 /home/<用戶名>。但務必要先建立好 /home 目錄。
 
  圖17 指定主目錄的名稱
    
    加入域並登陸
  既然網絡、PAM、NSS 和 Samba Winbind 都已配置成功,如今應該將 Linux 計算機加入到域中。可以使用 Samba NET 命令來執行此操做。在外殼程序提示符下,運行「net ads join –U <管理員名稱>」。使用具備足夠權限來將計算機加入到域的賬戶名稱替換 <管理員名稱>。
  net 命令會提示您輸入用戶的密碼。若是一切運行正常,net 命令會將您的計算機加入到域中。您可使用 Active Directory 用戶和計算機來查找剛剛建立的計算機賬戶。
  您可使用稱爲 wbinfo 的 Winbind 測試工具來 測試加入的狀態。運行 wbinfo –t 將測試計算機與域之間的信任關係。運行 wbinfo –u 將列出域中的全部用戶,而運行 wbinfo –g 將列出域中的全部組。
  若是您成功將 Linux 計算機加入到域中,則下一步是嘗試使用 Active Directory 用戶賬戶和密碼登陸。註銷 Linux 計算機,而後使用 Active Directory 用戶名登陸。若是一切運行正常,您應該可以登陸。
   要是行不通怎麼辦?
  使用Winbind 設置Linux 計算機以便使用Active Directory 進行身份驗證並不是易事。要配置的東西有不少,並且不少地方均可能會出錯,而 Linux 的每一個版本和 Samba 的每一個版本之間又都存在一些細微差異,這更是雪上加霜。可是您能夠查找幾個地方,以幫助肯定怎樣操做。
  首先是Linux 系統日誌文件,它保存在 /var/log/messages 中。Samba 將重大事件的消息(例如,丟失文件或配置失敗)存儲在這個文件中。除了系統日誌文件外,還有 Samba 和 Winbind 的日誌文件。您能夠在 /var/log/samba 中找到這些文件,並且它們還會爲您提供一些其餘信息。
  您能夠經過修改Winbind 的啓動腳原本設置調試級別,來提升 Winbind 發出的日誌消息的詳細程度(和數量)。編輯 /etc/init.d/winbind 外殼腳本,而後在 windbindd 命令中添加「-d 5」。這可將調試級別增長到 5(容許的值範圍爲 1 至 10),使 Winbind 生成更詳細的錯誤消息。
  若是Winbind 最後可與 DC 通訊,您能夠運行網絡數據包捕獲實用工具,如 Netmon 3.1。這使您能夠精確分析 Winbind 要進行的操做。並且,您還能夠檢查 DC 上的 Windows 安全日誌,此日誌會顯示身份驗證嘗試。
   若是行得通,您又應該作些什麼呢?
  若是一切都能順利進行,如今您就可使用在 Active Directory 中保存的憑據登陸 Linux 系統中了。與在 Linux 計算機上本地管理標識,或與使用諸如 NIS 之類的不安全系統相比,這是一項重大改進。它使您能夠將您的用戶管理任務集中到一個標識存儲上:Active Directory。
  可是,要讓這套解決方案真正具有實際用途,還缺幾樣東西。首先,沒法保證能得到技術支持,有點像撞大運。大多數 Linux 組織對於 Active Directory 都不是很瞭解,並且您能夠從 Linux 社區得到的支持徹底取決於誰恰好讀到您的帖子以及他們當天的心情。
  Samba 也沒有遷移或部署工具。若是您具備現有的 Linux 賬戶及其相關的用戶 ID 和權限,則您在將它們遷移至 Active Directory 時,必須手動確保它們維護其 UID。
  最後,Samba 仍然沒法使用最重要的 Active Directory 應用程序之一,即組策略,儘管已經實施了此策略。雖然您可使用 Samba 將 Linux 系統加入到 Active Directory 中,但沒法使用組策略來管理它。
   第三方解決方案
  使用Active Directory 對 Linux 計算機進行身份驗證顯然是件好事,但使用 Samba Winbind 推出您本身的解決方案,即便不把您累死,也會讓您感到枯燥無味。您可能會想,一些創新的軟件供應商可能會提出易於使用的解決方案,您猜得沒錯。
  對於我在本文中演示的版本,有四家商用軟件供應商已經開發了易於安裝和使用的相應版本。它們幾乎爲每一個受歡迎的 Linux、UNIX 和 Apple Macintoshes 版本都提供了代碼和遷移工具,另外也支持使用組策略管理 Linux 計算機。
  這四家公司分別爲Centrify、Likewise Software、Quest Software 和 Symark。這四家供應商都提供了類似的功能,其中包括跨越各個 Linux 發佈版本的組策略管理。Likewise Software 最近還公開了它實現的開放源代碼,稱爲 Likewise Open,但它的組策略組件仍舊是商用產品。Likewise Open 將可用於多個主要的 Linux 發佈版本。
  有了可用的商用產品後,還有必要使用 Samba 和 Winbind 來構建本身的身份驗證系統嗎?若是花錢購買集成軟件不在預算以內,則能夠利用免費的 Samba 開放源代碼 路由。您還能夠得到全部的源代碼,這樣的好處真是使人難以抗拒。可是,遷移現有的 Linux 計算機及其現有的 UID 是很是棘手的問題。
  另外一方面,假如您想要省下安裝和實現的時間、須要遷移現有的 Linux 計算機,或是但願有人對您的問題提供權威性的解答,那麼尋求其中的一種商用解決方案比較划算。另外,若是您須要使用組策略管理功能,那麼商用產品是您惟一的選擇。
  可是,不管您採起哪一種方式,將Linux 身份驗證與 Active Directory 集成均可以減小您爲管理多用戶賬戶投入的精力、加強系統安全性,併爲您提供單一的標識存儲來進行管理和審覈,而這些全都是至關吸引人的理由,值得試一試。
相關文章
相關標籤/搜索