摘要
本文包括了在IBM Rational ClearCase協作開發環境中編譯、安裝、配置和修改Samba,包括一些常見錯誤的深入解決方法。本文描述基于標準模板的配置,這種配置在世界上大多數Nortel 網站使用。
回頁首
相關的文章
下面的zip文件包括模板樣例,詳細的指導和其它的資源。要想查看這些文件,下載zip文件到本地,解壓縮,然后打開文件 samba.html
.
下載
回頁首
IBM Rational ClearCase-Samba 協同環境的設置和問題解決
本文包括以下主題:
- 什么是協同環境?
- 如何從源代碼構建Samba
- 如何配置Samba
- 從Samba 2.0.X升級到Samba 2.X
- Samba和Rational ClearCase問題解決
我非常愿意告訴你一點背景,關于我為什么關心更有效地設置和配置Samba這個主題。我從1999年3月開始使用Samba,配置幾個服務器。每個服務器都需要手工配置,這一點是很痛苦的。此外,我們有多種不同的環境:從擁有500個VOB的8個VOB服務器到只有22個VOB的一個VOB服務器。另外,我們的環境是分布的,在美國和加拿大有幾個工作場所,還在巴西、英國、法國有工作地點。因此,我一直努力工作以使得配置和設置過程變得更容易。
ClearCase 協同環境
為了更好地理解本文的內容,回答下面的問題是有幫助的:
- 什么是ClearCase協同環境?ClearCase支持UNIX和Microsoft Windows客戶端混合環境。
- 為什么我們需要它?你必須使用NFS或者SMB服務器產品來得到客戶端的數據。
- 為什么我們要使用Samba?
- 它是開源的,也就意味著是免費的。
- 它的配置是以服務器為中心的--我僅僅需要在很少的地方進行配置(我可不愿意出去配置每個客戶端)。
我已經試過TAS、Hummingbird Maestro、和其它NFS客戶端產品,但是我已經在使用Samba上有最少的麻煩和最好的成果。
構建Samba
得到源代碼是很容易的。當前的版本是2.2.8a,它已經被證實可以用在ClearCase上。你可以從 Samba website得到源代碼。注意它有一個優勢是源代碼可以編譯為64位的應用程序。我在2001年遇到的問題是我不能夠Build。即使我限制了mnode設置,它仍然不能工作。我給出了一個補丁可以讓我打開更多的文件,并把它提交給了Samba開發組。64-Bit 編譯可以讓你打開更多的文件而不用限制 mnodes
的個數(稍后討論)。一些操作系統可能不需要編譯成64-bit。圖1描述了在Solaris環境中構建Samba。
|
圖 1: 在Solaris中構建Samba |
如果你想要關于這個patch的更多詳細信息,我可以提供下面的鏈接:
在32-bit環境中,有與使用系統調用 fopen
有關的另一個限制。Samba使用這個系統調用來打開一些文件,通常是log文件。當打開超過256個文件時,Samba服務器將出現錯誤。這時,將終止Samba的安裝,Samba將不可用。
圖 2 顯示你可以使用不同的編譯器把Samba編譯成64-bit的應用程序。Forte編輯器是你可以從Sun買到的一種編譯器。你也可以使用GCC (GCC 3.x流需要進行64-bit編譯).
|
圖 2: 使用Sun Forte或者GCC Build Samba |
你也可以在HP-UX 上構建(圖 3),HP-UX 11.x 是一個64-bit的操作系統。此外,在圖3的第2小節中,有一些可以更改的設置,這些設置可以用來改善性能。
|
圖 3: 在HP-UX上構建Samba |
一個附加的編譯步驟可以編譯兩個運行Samba時很有用的實用程序,如圖4所示。缺省時,常規的編譯并不構建這些程序。它們可以幫助你管理數據庫密碼和其它一些對操作Samba很重要的參數。
|
圖 4: 安裝附加的Samba實用程序 |
圖5顯示在你使用 SWAT--一種基于Web的管理Samba的工具--時可能出現的編譯問題。
|
圖 5: 可能的編譯問題 |
問題的現象是:在你輸入你的用戶名和密碼準備訪問SWAT時,它返回一個空的頁面或者什么也不返回。這應該是 SWAT返回了一個SEGV信號。問題的原因是有壞的文件頭,但是如果你使用最新的發布版本的話,這個問題應該已經解決,他們修正了這個問題。如果在你試圖使用SWAT時出現這個問題,運行:
CPPFLAGS=' -D_EXTENSIONS_'; export CPPFLAGS
最常見的原因是,在有人試圖使用GCC 2.x代替3.x時GCC 64-bit編譯失敗,前面已經討論過,你必須使用GCC 3.x或者以后的版本。最后,在2.2的Stream中有一個中間的Bug:如果你試圖構建一個共享庫時,共享庫會失敗,因為它不能通過所有的編譯器修正標志。這個問題可以通過定義一個特殊的SHLD宏來解決:
make SHLD=' ${CC} ${CFLAGS} ' |
在HP-UX 11中,如果你使用這個選項構建 libsmbclient
,它似乎失敗,但是它對正常操作是沒有必要的(它是一個實用程序庫,你可以在你自己的程序中使用)。我不能夠確定它為什么失敗和如何修復它,因此當前的工作很簡單,不包括它就可以了。最后,在使用Sun編譯器構建64-bit的一些附加選項(圖6):
|
圖 6: HP-UX 編譯問題和Sun Forte選項 |
配置 Samba
關于配置文件的結構,我進行了一些修改以便使得可以更加容易地把配置文件發布到很多個服務器,而不需要在每個服務器上進行更多的配置工作。缺省時,配置文件的名字為 smb.conf
。我仍然有這個文件,但是我增加的兩個Hook配置 smb.conf.global.<hostname>
和 smb.conf.shares.<hostname>
。Global文件維護一些與系統相關的參數。你只需要在初始設置服務器時配置它,以后不需要進行修改。
The smb.conf.shares.<hostname>
是用來配置你的Samba服務器可用共享的文件。這個配置文件你可以隨著時間的推移進行修改,因為共享將被不斷地創建、刪除和修改。
Example templates 是這些文件的示例模板--它們是機器可讀的格式。初始文件, smb.conf
,不需要進行任何修改。你僅僅需要做的事情就是,如果你的操作系統是32-bit的,你要設置 max open files一個較小的數值。但是,我仍然建議你盡可能不使用32-bit操作系統。
如果在系統有多個網絡接口時,你想要獨立運行 smbd
和 nmbd
daemons,你必須修改 smb.conf
文件。我們下面再討論為什么你要有分開的daemon。如果你正在使用多個daemon,你要分開保存你的Log文件。注意log文件是很重要的文件,因為它們可以幫助你跟蹤調試問題。我使用的缺省配置是每個客戶端有獨立的log文件:如果你僅僅使用一個Log文件來處理數千個客戶端,要想在文件中找到你所需要的信息是非常困難的。這種情況下Log文件一般有10M左右。如果你有上千個客戶端,每個都有10M的Log文件,它將占有大量的空間。當然一般情況下,事情不會這么糟,但是你一定要記住這一點。
如果你使用多個daemons,需要在 smb.conf.global.<hostname>
中用主要的主機名代替 include directive %h參數。這將使你對每個主機/接口有一個獨立的文件。
轉到下一個文件, smb.conf.global.<hostname>
,你需要考慮的第一步是你要如何處理認證。認證指令有:安全、工作組和口令服務器。安全指令有四個選項,但是我不準備詳細描述它們的意義。如果你想要詳細了解這些選項的意義,可以參考 Samba 的文件: DOMAIN_MEMBER.txt
。首要的選項是 security=domain
,它提供最好的性能。主要的一點是在設置 security=domain
時,Samba服務器完全在域中共享。它有一個機器帳號,可以通過域控制器的認證請求,以及可以讓域控制器處理認證。
繼續下去,口令服務器指令是在你認證時需要的域控制器的名字。在Nortel中有些變化:前面我們有分離的機器資源域和用戶資源域。你必須能夠指定兩個域控制器,因為Samba服務器必須使用 機器域進行認證,而用戶必須使用 用戶域進行認證。我不知道其它組織是怎么做的,但是我們把機器和用戶域合并為一個單獨的域,我們也移動到Active Directory。
你在多子網環境下需要使用WINS服務器,也為了進行瀏覽。你并不需要真的使Samba服務器支持瀏覽,但是口令服務器指令處理IP地址。注意到這一點很重要:即使你提供了多個IP,它只使用第一個IP,從來不會使用其余的。
配置多網絡接口
為什么你要這么做?一個原因是管理每個獨立網絡接口的性能。 The ClearCase Administrator's Guide 討論了在不同的子網管理不同的ClearCase區域,這里隱含了不同的網絡接口。你可以限制Samba到服務器的一個可用的子網接口。在我們的實例中,我們使用不同的網絡接口進行備份,因此沒有理由在備份接口上運行Samba -- 沒有人愿意從那個位置訪問
示例
下面給出一些例子,以顯示你可以如何修改配置文件。例如,你可能想要在一些接口上運行Samba,而不是在全部接口上運行。在這個例子中,我選擇兩個私有地址,并使用 interfaces
指令來列出你想要訪問的接口。你需要第二個指令, bind interfaces only=yes
,來完成配置。Samba監聽所有接口,因此你必須指定 bind interfaces only=yes
來限制它只監聽在接口指令中列出的接口。
前面的例子僅僅需要在一些接口上有 smbd/nmbd
daemon,而不是全部。如果你正在使用多個daemon,一個(只有一個) smb.conf.global.<hostname>
文件必須在接口指令中包括loopback接口。使用與首要主機名對應的 smb.conf.global.<hostname>
文件。其它的 smb.conf.global.<hostname>
文件需要 netbios
命名指令設置到主機的其它接口。圖7更加清楚地顯示,這里有一個主機名alpha,是首要的主機名,我們在接口指令中包括loopback接口。主機名beta是另外一個接口,它不是首要主機名,因此我們必須包括 netbios
命名指令beta.
|
圖 7: 配置 smb.conf.global.<hostname> |
如果你有 security=domain
,有多個接口,并且你運行多個daemon,你需要對每個接口有一個機器帳號。你不能對于機器只使用一個帳號,因為 每個daemon都是獨立的,需要它們自己的機器帳號。問題是加入域的命令不允許你指定其它的配置文件。這里我提供了一些解決的例子,你可以通過重命名文件和使用符號鏈接來解決這個問題。一旦你加入了域,你就不需要維護主機的文件,因為實際運行的daemons可以讓你指定其它的配置文件。
配置共享
現在轉到你如何配置共享上, smb.conf.shares.<hostname>
文件包括一個單個共享的模板。很多參數不必要修改,因為它們已經設置為缺省值或者推薦值。僅僅需要考慮的是 共享名 和 共享目錄路徑。下面是一些特殊的限制:
- 共享名要符合NetBIOS 命名限制,這意味著你只能使用字母和下劃線,并且最多14個字符。
- 如果你仍然使用Windows NT的話有一個Bug -- 如果共享名超過11個字符它將不會工作。
在進行配置時要牢記這一點,并考慮你的環境。
圖8列出了其它常用的各種指令。它們基本上都是自解釋的。如果你想要限制特定的機器或者特定的用戶訪問一個共享,可以使用 valid users
指令。我在實際中發現 hosts allow
指令工作的不是很好,特別是在你使用DHCP或者是遠程用戶的主機名變更時。 最好使用valid users,因為這樣的話,如果用戶挪到不同的機器上時,用戶仍然可以訪問數據。
|
圖 8: 配置 smb.conf.shares.<hostname> 文件 |
與用戶名和密碼相關問題
現在我要扯得遠一點。我在這里假定你已經設置了一個類似的協同環境。保證在Windows下和UNIX下有相同的用戶名是很重要的。另外一個重要的考慮是 lmhosts
文件。這個文件Samba用來解析NetBIOS名。正常情況下,WINS服務器可以用來進行這個工作,但是根據我們的經驗, WINS服務器的架構并不是很穩定和可靠。事實上,我們經常能夠碰到WINS服務器出問題給我們帶來的麻煩。一個解決這個問題的方法就是在 Samba 服務器上使用 lmhosts
文件。 lmhosts
主要列出你要訪問的域控制器。這也許相當安全,因為域控制器并不經常修改主機名或者IP地址。修改域控制器的主機名和IP地址會導致Windows環境的崩潰。在客戶端創建同樣的 lmhosts
文件以避免類似問題也是值得的。我給出Windows下的 lmhosts
文件的路徑(在問題解答節有更詳細的討論)。
username.map
文件是一個把Windows帳號映射到UNIX中不同的名字的一種方法。它的首要用途是把Windows的ClearCase ALBD服務帳號映射到UNIX的有效帳號。缺省的ALBD用戶是clearcase_albd,它的名字很長,你不能在UNIX環境下看到。在過去,用戶名超過8個字符將導致問題。在現在的很多系統中,它一點也不會導致問題,但是這一點你要記住。一個可能的解決方案是把clearcase_albd帳號映射成VOB所有者帳號,因為你知道,VOB所有者有權訪問VOB對象和VOB元素。
另一個方法是創建一個與VOB所有者帳號同名的ALBD服務帳號,但是我不建議這樣做,因為可能導致安全問題。如果有人能夠作為VOB所有者帳號登陸到Windows,那么他就可以進入VOB做任何VOB所有者想做的事情,這可能是一個很不好的事情。
最后一個選擇的方法是我們使用的方法:創建一個與VOB所有者帳號類似的ALBD服務帳號。例如,如果VOB所有者帳號是vobadm,你可以使用vobadm01。如果 有人以vobadm01登陸,他不能做任何事情,因為他不是VOB所有者帳號。
要記住的一點是,這種映射僅僅用于訪問cleartext 和source containers,這就是ALBD 服務為你做的事情。它并不處理正常的 ClearCase訪問控制。如果有人以vobadm01登陸并試圖check out文件,它并不映射為vobadm帳號,仍然是vobadm01帳號。
很多組織正在轉到大的、合并的環境,就像我們那樣。我們把幾個擁有他們自己服務器的組合并成一個單一的一組服務器。在這種情況下,可能有多個VOB所有者帳號、多個開發環境和多個項目。這時進行帳號映射有一點困難。記住你可以把多個帳號映射到一個單一的UNIX帳號。
你不能把一個ALBD服務帳號映射到多個VOB所有者帳號。在下面的例子中我試圖把albd1映射到三個不同的帳號,只有最后一個被映射。在圖9的例子中,我試圖把ALBD帳號albd1 映射到vobadmin、ccadmin和 vobadmcc。然而,albd1帳號只能映射到vobadmincc (最后一個定義)。使用vobadmin和ccadmin訪問將出現問題,因為albd1映射到vobadmcc。
|
圖 9: 你不能把多個VOB所有者帳號映射到單個ALBD服務帳號 |
關于ALBD服務帳號的密碼更新有一些附加的考慮。在我們的環境中,公司的安全策略需要所有帳號的口令每6個月就到期。我們不能得到豁免。當然,如果你的ALBD服務帳號不工作將會出現問題,你的用戶都會down掉。因此我們不得不找到一種處理這個策略的方法。如果你的ALBD帳號永不過期,那當然很好。如果你做不到,那你就應該知道,如果ALBD帳號過期或者被鎖定,將有很多用戶 down掉。
按照規定,我們必須面對ALBD密碼過期的限制。我們使用ALBD服務帳號索引的方法來保持跟蹤ALBD服務帳號。當密碼快要到期時,我們準備了第二個帳號,這個帳號的密碼是新的,再過6個月才會到期。然后我們在舊的帳號密碼還 有效的時候,把帳號切換到新的ALBD服務帳號上。這樣做的好處是,如果我們切換過去后,其它帳號過期后只會影響很少的用戶,帶來最小的損失。然后,你可以告訴受到影響的用戶:“你需要更新你的ALBD服務帳號”。帳號過期只會給沒有更新的人帶來一點影響。
如果你使用了帳號索引,記住需要重新配置 username.map
文件。在你切換帳號的時候這一點很重要,你也必須更新Samba。如果你忘記更新 username.map
文件。你將出現訪問的問題。
從Samba 2.0.x升級到Samba 2.2.x
Samba 2.0.7是上一個穩定版本,現在2.2 stream已經發布。2.2 stream有幾個性能的問題,直到2.2.7。一個問題是Solaris平臺的,即使當前的發布版本仍有問題,你需要一些補丁來避免CPU高利用率的問題。這個問題的原因是他們修改了他們管理鎖的方法。從使用共享內存改為了使用他們自己的文本數據庫。這個文本數據庫使用 fcntl
系統調用和 F_SETLK
來管理鎖。在鎖的數量增加時性能呈指數降低。我沒有實際碰到這個問題,因為我從來沒有使用過Samba 2.2.2,但是我曾經在mailing list中看到過有人碰到過CPU利用率非常高的問題。一旦你的CPU利用率超過75%,一定是一個問題。所有的Solaris版本都有解決這個問題的補丁,因此我建議你使用這些補丁。
我應該使用哪個版本的Samba? 除了Solaris,你應該使用最新的穩定版本,目前是2.2.8a。如果你使用了圖10的補丁,可以繼續使用2.2.8。如果基于某種原因你不能使用這些補丁,你可以選擇2.0.10a。
|
圖 10: Samba Solaris 補丁 |
2.2.8a的配置有一些不同,一些以前獨立的文件被合并成一個新的文件。有兩個文件,機器帳號密碼文件(類似于 <domain name>.<hostname>.mac)和 machine.SID
文件(包含安全標識符)。在我的附加文章, SCM04.pdf,中給出了關于如何安裝新版本的Samba、創建新的目錄結構和拷貝舊的配置文件的指導。私有目錄包括機器帳號密碼和機器SID文件。如果你使用共享的 mem size
指令的話,你也需要修改配置文件。這個指令在 2.2中取消了,因此你必須注釋掉這個指令。如果你不修改也沒有任何問題,只是會在日志中收到一個錯誤信息。
你需要做的其它事情是--因為在2.2.x日志的行為改變了-設置調試級別為1以便你得到更多的日志信息。如果你沒有設為1,你只能在你的日志中看到錯誤信息。有時在你想詳細跟蹤問題時,你可能需要有關連接和用戶如何登陸的信息。你當然可以在錯誤發生后設置這個級別,但是你就失去了得到信息的機會。你不得不等到錯誤再次出現或者有用戶試圖登陸。如果你先進行設置,將很容易得到信息。
在你準備切換Samba時,完成以下步驟:
- 停止 Samba.
- 重命名目錄
- 最后更新私有目錄。(香我說得那樣,這個機器帳號密碼每周更新,但你不知道它什么時候更新,即使你十分鐘前拷貝了,它有可能十分鐘后更新。你只能確保它盡可能的新)
- 重起 Samba.
這個切換過程小于5分鐘,很容易換回來。
一旦完成切換,你最好驗證一下是否工作正常。你可以登陸到客戶端,連接VOB。更容易的方法是在UNIX機器上使用 smbclient
命令(它是Samba發布的一部分)來連接一個共享UNIX。在Windows機器上,可以在命令行輸入net use命令。如果連接失敗,你可以切換回來,查看日志文件以確認問題的原因。
我們在升級時發現了三個問題。第一個問題是在日志消息中顯示Samba試圖修改信任帳號密碼失敗。問題是在 2.0.7的配置移植到2.2.x時,它并不在文本數據庫中創建用來改變密碼的key。Samba服務器仍然繼續工作,也不影響性能。這是一個潛在的安全問題,因為你的機器帳號密碼沒有改變,但它并不是一個嚴重的問題。一個解決的方法是刪除和重建機器帳號,然后重新加入服務器。這將是破壞性的,因為所有的認證在你刪除帳號時都將失敗,你的用戶都會中斷。然后,你必須重新創建一個機器帳號,并重新把Samba服務器加入到域。我的替代方法是在一個測試服務器上創建了一個 secrets.tdb
文件,包括那個key。文件中有其它數據,但是在服務器移植數據時將覆蓋。這個方法似乎更容易一些。
我們看到的第二個問題是在從2.2.5升級時。你啟動服務器,但是你不能連接。當你查看日志文件時,你看到不能取得信任帳號密碼的消息。這個問題是Key的儲存信息被破壞了。這是一個二進制文件,因此你不能編輯和修復它。最容易的方法是停止Samba。你也可以把信息轉儲到 secrets.tdb
文件,或者從舊的安裝復制數據以創建 <domain>.<hostname>.mac
文件。在CD上,我也提供了一個小程序用來更容易地轉儲 secrets.tdb
文件。一旦你重新創建了 <domain>.<hostname>.mac
文件,Samba服務器將把它合并到 secrets.tdb
并創建正確的key。這個問題可能只有少數人會遇見。
最后一個問題更加困難一些。在升級后,Samba 不能夠正確的解析UNIX文件系統的符號連接。不幸的是,我們只在一臺機器上看到這個問題,并且我不能重現這個錯誤。我用同樣的補丁和相同的配置,但是沒有一點問題。你可以看到一個錯誤"not a valid win32 application" 或者"unable to run exec format error"。在這個例子中,我們試圖訪問文件 syee_test1.bat
,因為日志文件中的錯誤消息顯示遺漏了部分路徑。這個問題極其罕見,但是你在升級時要記住。在升級后你需要檢查一下符號連接是否正常工作。
Samba 和 Rational ClearCase的問題與解決
日志文件是你的好朋友;你可以從那里得到大量信息,因此你顯然應該知道如何增加調試的級別。調試級別可以從0設到10。0表示幾乎沒有細節信息,10表示有最多的細節。有兩種方法改變調試級別。一種方法是修改 smb.conf
文件,改變指令,然后停止再重起Samba。另一種方法是傳遞 HUP信號到Samba daemon。如果你傳遞了一個HUP信號,只有新的連接才能有新的調試級別。我不經常使用這個方法,因為它影響所有的 Samba 客戶端。在你調試時,你通常只想調試特定的客戶端。要想調試一個客戶端,我就進入日志找到特定客戶端的進程ID
我使用一個配置文件進行設置,模板中有日志文件中包括的進程ID。這個配置文件已經使用了很長時間,大約進行了7、8次修改。我增加信息和選項以便對任何類型的問題都能很容易地調試。在圖11的例子中,PID 是 4539,對2.0 stream,你給進程發一個信號。你發一次信號只能增加一個調試級別。如果你想增加2或3個級別,你只能發2到3次信號。對于 2.2.x,他們包括一個實用程序可以讓你設置任何級別,這會更容易一些。
|
圖 11: 調試Samba |
圖12顯示我經常碰到的錯誤。我曾經在一個ClearCase 用戶組看到這個問題。這大概是你最常碰見的問題:你得到一個信息:"Unable to construct cleartext for object X in VOB Error: Type manager 'text_file_delta' failed construct_version operation." 這幾乎都歸結為許可問題。有意思的是你能夠碰到多少種許可問題。另一個用戶經常碰到的問題是,錯誤消息:"incorrect function",經常可以在視圖日志和視圖主機上看到。這個信息也可以在彈出式對話框中出現。
|
圖 12: 最常見的錯誤 |
我們怎么樣才能跟蹤到問題在什么地方?你需要做的第一件事情就是,你需要知道ALBD 服務帳號名。你可以通過services控制面板找到它。然后你問自己, 這個服務帳號是否有相應的UNIX帳號? 如果是,你可以進行下一步。如果沒有,它大概被映射了,因此你要查看 username.map
文件。如果那里沒有,你要加上它。在你加上以后,新的連接將使用新的值,但是已經存在的連接則不會。有問題的客戶端應該與VOB斷開,等幾分鐘到Samba連接刪除,然后再連接到VOB。讓用戶啟動一次很容易。當然你也可以停止然后重新啟動Samba,但是這樣要影響所有用戶,而不是只影響有問題的用戶。
UNIX帳號是否有權限?這里假定ALBD服務有一個UNIX帳號,或者映射了合適的帳號。 這個帳號能否訪問VOB存儲目錄和子目錄? 我看過很多次,他們的VOB目錄的UNIX權限類似700或者 750,這將使得只有很少的用戶可以訪問VOB中的數據。解決的方法很簡單,給VOB目錄設置正確的權限。如果問題在pool自己身上,你必須使用 cleartool protectvob
命令來修正。你一定不想用UNIX命令來修改這一堆權限。
其它的事情也會發生,比如你基于某種原因,你限制了某些組的權限。你必須保證由ALBD使用的UNIX帳號在正確的組中。如果你遇見了問題,你要修改權限或者把用戶添加到正確的組中。
訪問VOB或者訪問共享的難點
即使上面的都可以通過,你仍然會遇到不能訪問VOB數據的問題。有很多其它的因素會導致錯誤。典型地,你下一步需要做的是,增加調試級別,以便得到更多的相關信息。我通常做的第一步是不通過ClearCase,試著訪問共享目錄,以保證網絡部分工作正常。我使用net use命令試著訪問共享。在這里你肯定希望看到錯誤。如果用戶指定了錯誤的密碼,你可以在Samba日志中清楚地看到。它說:"NT_STATUS_WRONG_PASSWORD"。這經常發生在用戶剛剛修改了密碼但是沒有重新登陸時。解決方法很簡單,退出并重新登陸。
如果用戶修改了密碼并用錯誤的密碼試圖登陸很多次后,用戶帳號可能被鎖定。日志中的錯誤消息也很明顯地指出,帳號被鎖定。你只需要等幾分鐘,到帳號釋放,或者如果它不工作你問用戶是否重設了他們的密碼。
一個很難調試的權限的限制是,如果你使用了 valid users
或者hosts allow 指令,這些指令我在前面提過,它們只允許特定的用戶或者主機連接。如果你在使用net use命令要求輸入密碼時輸入了正確的密碼,但是命令仍然失敗,你就必須查看共享配置文件,看是否限制了共享。如果有共享的限制,你就需要研究哪些用戶或者機器有權限。你必須增加調試級別到5級才能看到這個錯誤。
在圖13的例子中, smbd
daemon 在SUPPORT_USERS中尋找我的userid, boehm。我的userid沒有在組中,因此我沒有訪問共享的權限。
|
圖 13: VOB 和共享訪問權限 |
其它可能發生的事情有-- 有意或者無意的 -- 用戶帳號被刪除或者不存在。這時我試圖訪問一個共享時,他們將做為用戶 "nobody",沒有訪問共享的權限,然后操作將失敗。你可以在日志中看到錯誤指示(圖14),boehm-1做為nobody連接到服務器ccaserls。代替用戶boehm,它用nobody。這就是一個UNIX帳號丟失的例子。
|
圖 14: 用戶帳號不存在或者被刪除 |
我們在使用WINS服務器時仍然會遇到其它問題。用戶可能訪問VOB,工作得很好,突然,他們不能訪問VOB了。我們發現這時WINS服務器可能出問題了,或者我們從WINS服務器中得到錯誤的VOB服務器的入口。這一點很糟糕,我們的解決方法是,雖然不是很好的方法, 在客戶端創建包括VOB 服務器入口的 lmhosts
文件。這可以幫助加速訪問VOB服務器,因為客戶端不需要等待WINS告訴它VOB服務器的地址。另外,這時不應該頻繁改變VOB服務器的主機名或者IP地址。這個方法的不利之處就是如果你在每個客戶端都創建文件的話,工作量將會很大,而且你必須保證新的客戶端也能很好地更新。我們可以把這個問題放到ClearCase的安裝過程中,作為其中的一步。在安裝時創建正確的入口文件。
你需要創建的文件位于 %SystemRoot%\SYSTEM32
目錄。這個目錄下有一個示例 lmhosts.sam
文件。在圖15中,我給出了我以前用過的 lmhosts
文件,#PRE 告訴機器把主機名預先加載到緩存中,這樣可以更快一點。
|
圖 15: 一個lmhosts文件的示例 |
另外一個你可能遇見的錯誤是Samba服務器機器帳號損壞。這時,如果你使用 net use
命令登陸,你輸入正確的密碼,但是仍然不工作,你可以在日志文件中看到類似"NT_STATUS_NO_TRUST_SAM_ACCOUNT" 或者 "NT_STATUS_ACCESS_DENIED"的信息。這個問題稍微大一些,因為它影響所有的用戶,不僅僅影響一個客戶端。這時你一般在域控制器上沒有任何權限來修復機器帳號,這時必須設置'security=server'直到你可以得到一個修復的帳號。一旦修復,你可以重新加入域,然后重起Samba。這一般需要導致2-3分鐘的不可用。
最后一個錯誤是你不應該看見的。"Out of file structures" 錯誤在使用32-bit Samba時試圖打開太多文件時經常發生。如果你使用了64-bit Samba 和版本2.2.x的話,你不應該看到這個錯誤。
需要注意的一點是Rational的文檔仍然設置mnodes到800。我曾經設置過更多的值沒有任何問題。
解決這個問題的方法是增加'max open files' 并使用64-bit Samba。如果你使用32-bit Samba,增加'max open files'的值沒有用處。如果你不能使用64-bit Samba,那你就不得不減少mnode設置。在ClearCase 控制面板下的 MVFS performance可以修改。你可以從800開始。你甚至可以減少到200。如果你仍然有問題,就像我最初開發這個補丁時那樣,你就必須使用64-bit版本的Samba。
最后一個問題更加罕見,或者應該罕見。Samba 2.0使用共享內存表管理鎖。在有100-200個客戶端時很容易超出這個表的大小。缺省的大小大約是1M。在我使用的配置文件中,我把它設置為4M。即使這樣,一旦你超過了100個客戶端或者更多,它很容易超出4M的水平,然后你將會看到類似"panic error, delete share mode hash bucket empty"的信息。這特別令人沮喪,因為用戶將會發現他們前面還能讀的文件現在不能讀了。他們可能重起他們的機器或者重起他們的視圖。然后他們可以讀這個文件,但是他們又不能讀以前可以讀的其它文件了。這依賴于共享內存多快地填滿,以及他們在填滿的時刻訪問哪個文件。
解決的方法是增加共享 mem size
指令。當然這是在2.0,在2.2中應該沒有這個問題。如果你增加了這個參數,你或許必須增加kernel參數。Solaris的kernel參數是 shmsys:shminfo_shmmax
。HP-UX有類似的設置。為了讓改變的kernel參數生效,你必須重起系統,這將更糟糕。
如果由于某些原因,你設置kernel參數足夠高,你需要知道的一件事情是,如果你修改了它的大小,你必須刪除存在的共享內存。這是由于Samba代碼會看內存表是否在,如果找到共享內存,它將試圖使用錯誤的大小。圖16顯示移去共享內存的命令。
|
圖 16: 增加共享內存大小的指令 |
回頁首
問題與解答
如果你不能使用64-bit Samba的話該怎么辦?
解決方法是打開Rational ClearCase 控制面板。有一個名為 MVFS Performance的tab,有兩個檢查框( maximum number of mnodes to keep in the VOB free list 和 maximum number of mnodes to keep for the cleartext free list)。你可以手工把它們改為800,你必要時可以減少到200。
你的Samba配置的例子是Windows NT-centric。在Active Directory環境下有什么變化?
問題是關于在Active Directory 環境下的PDC (主域控制器) 和 BDC (后備域控制器)的。
我不知道你需要的改變 -- 我的意思是,你在Active Directory中仍然有域控制器,因此你仍然需要有密碼服務器,不管你的active directory服務器在哪里。我不知道Active Directory中是否仍然使用WINS服務器。但我相信它仍然使用。因此你即使在active directory環境下仍然需要這些信息。
Samba日志保存在什么目錄?
如果安裝在/usr/local/samba,日志文件在/usr/local/samba/var。日志文件名為 log.<machine name>
.
在多個ALBD帳號時我們如何處理密碼過期?
我們有我們自己的工具更新客戶端,但是最容易通用安裝方法是到發布區域更新 sitedefs.dat
文件,這個文件包含加密的密碼。你也可以再次運行 siteprep.exe
,提供一個新的密碼。它會更新文件,然后用戶重新安裝ClearCase以更新密碼
64-bit Samba 是否需要64-bit 操作系統?
是的。你必須運行在Solaris 7 (64-bit)及以上,或者HP-UX 11.
如果你運行64-bit Linix 是否會出現問題?
不會,因為Linux不會碰見這個問題。它們的設置不同,在LINUX下使用 fopen
系統調用時不會遇到這個問題,有一些kernel調整可以讓你設置Linux 允許打開足夠的文件。
緩存問題 -- 服務器數據已經變更,但是客戶端幾分鐘后才能看到
問題是有人在Solaris服務器上進行了變更,但是客戶端直到幾分鐘后才能看到。這個問題可能是配置文件的問題,在我的配置文件中有一個選項op locks,ClearCase使用 op locks=Off
。它會緩存一些東西,有可能導致問題。我不知道你的設置是什么,但這是我要解決問題的第一個猜想。
如果你有用戶登陸到多個windows域,多daemons是否需要考慮這個問題?
可以有一種方法處理。我們在我們的環境中有多個daemons,但是我們不需要尋址它們因為在不同的域之間有信任關系。你的問題可能是一個域中的人試圖登陸,但他們不能認證,如果他們引用了錯誤的域控制器(那里他們的帳號不存在,即使有信任關系)。一個解決方法是在一個域中有一個機器帳號接口,另一個域中有另外一個機器帳號接口。
我怎么處理UNIX帳號同步?
這不是一個問題,因為所有的UNIX帳號都通過NIS處理。如果一個UNIX改變了,它由NIS處理。認證并不真正發生在UNIX一邊。如果我做為用戶boehm連接到Samba服務器,它只是在UNIX邊看用戶是否存在。如果存在,它就通過域控制器的認證請求,從來不會涉及UNIX一邊。
有人看到這樣的Samba問題,在用戶增加是,他們不得不停止并重起Samba?
我從來沒有見到這樣的問題。我知道在早于2.2的版本會有一些問題。我相信在2.2.8a版本已經修正了問題。如果你仍然有這樣的問題,我不知道如何幫你。它可能與操作系統有關,但我知道在早于2.2的版本有內存泄漏。
你是否認為Samba比TAS要好?
是的。我考慮過TAS。我想我不喜歡license費用。我們的組織有其它部門是用過TAS,其中一個站點出現問題。他們不能正確地認證用戶,因為他們沒有權限。我們聯系技術支持,但是我們沒有從他們那里得到滿意的結果。上千個用戶不能正常工作。幸運的是,我們能夠在幾分鐘內切換到Samba。我花時間創建了配置文件。我們切換過去,他們很高興。我們最近在巴西也遇到類似的事情,那里的TAS也不能正常工作,出一些奇怪的現象。我們又一次不能從技術支持那里得到結果,因此我們切換到Samba,然后就很好了。
在我的觀點中Samba好一點的另一件事情是: valid users
和 hosts
。我可以使用NIS netgroups確定誰可以訪問我的服務器。在TAS中你不得不在每個TAS服務器上手工編輯所有用戶ID的列表。在RTP,我有8臺服務器。我不想早服務器上編輯8個文件,并保持他們的同步。
在客戶端使用PC NFS 并確定哪個協議用來訪問VOB服務器時是否會有問題?
不會的,ClearCase文檔中寫的很清楚。我相信它能夠告訴你如何確定。你要做的是進入服務控制面板,找到properties,那里有服務提供的瞬息。它看起來可能是"Microsoft Windows Network", "Hummingbird Network",如果你使用Hummingbird Maestro,會有一些其它選項。你可以改變協議的順序,以便你可以把"Microsoft Windows Network"放在NFS協議前面,這樣將使用Samba代替NFS。我在調試問題的時候做過類似的事情:我想要強制使用NFS,因此我改變順序,把NFS放在Microsoft Windows Network前面。
Samba服務器的容量如何?
我們有的最大的一個前面已經講過。我們在加拿大有一個單一的機器為大約上千人服務。大概600或者更多的人是Samba 或者PCs 或者Samba 用戶。它是一臺Enterprise 6500,擁有8個處理器。我從來沒有碰見用戶數太多不能支持的Samba問題。我傾向于使用多個VOB服務器因為我喜歡配置更好的性能。這樣我通常有2-4個服務器每個支持幾百個用戶。我在使用這個配置的時候從來沒有遇見Samba的性能或者容量問題。
我可以把Samba放到VOB服務器上嗎?
是的,你可以這么做。
關于作者
Stephen Beneteau 是Rational軟件的軟件開發人員, Rational軟件是IBM Software Group 的幾個品牌之一。IBM 是世界上最大的信息技術公司和最大的商業和技術服務供應商。Rational 軟件在開放的業界標準工具,最佳實踐和商業應用開發服務,軟件產品和系統構建,包括嵌入式設備軟件如蜂窩電話和醫療器械等方面每年提供$90億的收益。