Samba簡介

Samba簡介
 
一、Samba簡介
給Windows客戶提供文件服務是通過samba實現的,凡架設過MS Windows網絡的人都知道MS Windows網絡的核心是SMB/CIFS,而samba也是一套基於UNIX類系統、實現SMB/CIFS協議的軟件,作爲UNIX的克隆, Linux也可以運行這套軟件。和NT相比較,samba的文件服務功能一點也不亞於NT,效率很高,藉助Linux本身,可以實現用戶磁盤空間限制功能,NT到4.0版本還是無法實現這點,samba由samba小組(http;//samba.org)開發,更新速度很快,目前最高的版本是 2.0.7版,是2000年4月25日發佈的,每個更新版本在功能上都所增強,也修復了已知的BUG。本章所涉及到的技術內容以2.0.3版藍本。目前各種Linux發佈大都包含這套軟件,如果你的Linux發佈是Read Hat,則是以RPM形式提供,可以在安裝Linux的時候選擇這個軟件,也可以單獨安裝,以root身份。rpm -i samba-2.0.3-8.i386.rpm,就可以了。
如果你的Linux發佈沒有包含這個軟件,可以從ftp; //samba.org/pub/samba去下載。另外,您的Linux的核心要支持smbfs,一般各種發佈已經把smbfs的支持包含進去,如果沒有包含的話,就要重新編譯核心,獲得smbfs支持,具體如何編譯核心請參閱相關文章。
由於本章的內容是基於文件服務器, 重點介紹samba在文件服務器上的應用。目前samba還不能完全代替Windows NT,尤其是把samba設置成PDC,最好不要這樣做,NT PDC非常複雜,samba還只能實現其中一部分功能。希望未來的版本可以做到。
這套軟件由一系列的組件構成,主要的組件有:
smbd SMB服務器,給SMB客戶提供文件和打印服務;
nmbd, Netbios 名稱服務器,提供Netbios名稱服務和瀏覽支持,幫助SMB客戶定位服務器;
smbclient, SMB客戶程序,用來存取SMB服務器上的共享資源;
testprns 測試服務器上打印機訪問的程序;
testparms 測試Samba配置文件的正確性的工具;
smb.conf samba的配置文件;
smbstatus 這個工具可以列出當前smbd服務器上的連接;
make_smbcodepage 這個工具用來生成文件系統的代碼頁;
smbpasswd 這個工具用來設定用戶密碼;
swat samba的Web管理工具;
二、如何配置samba
實際上,samba安裝完後,只要把/etc/smb.conf這個文件裏的 workgroup=XXXXX這個參數該爲您的工作組,啓動samba就可以運行了,但這根本不能符合我們的需要。samba的配置都是圍繞 smb.conf來進行的,配置方式有很多種,如果熟練的話可以手工編輯這個文件,也可以通過linuxconf來配置,而且samba本身帶了一個基於 web的管理工具swat,使用901端口,安裝完samba後,它會在您機器的/etc/services的尾部加上一條:
swat 901/tcp #Add swat service used via inetd
在inetd.conf裏填上:
swat stream tcp nowait.400 root /usr/sbin/swat swat
在瀏覽器的地址欄裏鍵入 [url]http://youhostname:901/[/url] 就可以進入swat對samba進行管理。下面就介紹如何手工配置這個文件以達到讓samba成爲一個符合需求的文件服務器。
先看看一小段的smb.conf:
  # smb.conf example 

  [global]

  workgroup = WORKGROUP

  server string = Samba Server

  hosts allow = 192.168.1. 192.168.2. 127.

  load printers = no

  printcap name = /etc/printcap

  guest account = guest

  log file = /usr/local/samba/var/log.%m

  max log size = 50

  security = user

  socket options = TCP_NODELAY

  [homes]

  comment = Home Directories

  browseable = yes

  writable = yes

  [printers]

  comment = All Printers

  path = /usr/spool/samba

  browseable = no

  guest ok = no

  writable = no

  printable = yes

  printer driver = Epson LQ-1600K

  [tmp]

  comment = Temporary file

  path = /tmp

  read only = no

  public = yes

  [public]

  comment = Public Zone

  path = /home/samba

  public = yes

  writable = yes

1.段
從上面的例子可以看出,smb.conf的格式和Windows裏的INI文件很像,含有多個段,每個段由段名開始,一直到下個段名,每個段名放在方括號中間。段裏的參數的格式是:名稱 = 值。文件裏的每個段名、參數以及註釋都只能佔一行,換句話說就是一行裏只能寫一個段名或參數或註釋,如果一行寫不下或不想把一行寫的過長,可以在行尾用" \"來表示續行。段名和參數名不分大小寫。可以有註釋,註釋以;或#開始到該行結束。
除了[global]段外,所有的段都可以看作是一個共享資源,段名是該共享資源的名字,而段裏的參數就是共享資源的屬性。[global], [homes] 和 [printers]這三個段是比較特殊的,將在後面說明。而下面的注意事項則是針對普通的段。
一個共享資源段由要提供訪問的路徑和附加的訪問權限組成,可以是文件資源或打印資源。共享資源段可以給guest級的用戶服務,一般來說guest用戶是不需要密碼的,如果給guest提供服務,guest的權限是根據UNIX裏的 guest帳戶來賦予。如果共享資源段不是給guest提供服務的,則訪問這樣的段需要客戶的密碼。由於賦予用戶對共享資源段的訪問權限是基於該用戶在UNIX系統的對該資源的訪問權限,所以服務器是不能賦予超過UNIX系統賦予該用戶的權限的。
例如:
下面的共享資源段的例子定義了一個文件共享,用戶對路徑/home/abc有寫入的權限,共享資源段名是abc,也就是共享名。
  [abc] 

  path = /home/abc

  writeable = true
而這下面的段定義了一個打印共享,共享是隻讀的,但可打印,就是說唯一允許的寫訪問就是打開、寫入和關閉脫機文件。
  [myprinter] 

  path = /usr/spool/public

  read only = true

  printable = true

  guest ok = true
特殊段:
[global] 段
在這個段的參數是全局有效的。
[homes] 段
當用戶請求一個共享時,服務器將在存在的共享資源段中去尋找,如果找到匹配的共享資源段,就使用這個共享資源段。如果找不到,就將請求的共享名看成是用戶的用戶名,並在本地的password文件裏找這個用戶,如果用戶名存在且用戶提供的密碼是正確的,則以這個home段克隆出一個共享提供給用戶。這個新的共享的名稱是用戶的用戶名,而不是home,如果home段裏沒有指定共享路徑,就把該用戶的宿主目錄(home directory)作爲共享路徑。
通常的共享資源段能指定的參數基本上都可以指定給[home]段。但一般情況下[home]段有如下配置就可以滿足普通的應用。
  [homes] 

  writeable = yes
注意,如果在[home]段里加了guess access =ok, 所有的用戶都可以不要密碼就能訪問所有的宿主目錄!
[printers] 段
該段用於提供打印服務。
如果定義了[printers]這個段,用戶就可以連接在printcap文件裏指定的打印機。當一個連接請求到來時,smbd去查看配置文件裏已有的段,如果和請求匹配就用那個段,如果找不到匹配的段,但[home]段存在,就用 [home]段。否則請求的共享名就當作是個打印機共項名,然後去尋找適合的printcap文件,看看請求的共享名是不是個有效的打印共享名。如果匹配,那麼就克隆出一個新的打印機共享提供給客戶。
注意,[printers]服務必須是printable,如果指定爲其它,服務器將拒絕加載配置文件。
通常指定的路徑應該任何人都有寫入權限。
  [printers] 

  path = /usr/spool/public

  writeable = no

  guest ok = yes

  printable = yes

  printer driver = Epson LQ-1600K


2.參數
段裏可以指定的參數非常多,有些參數是全局段纔可以用的,而有些參數是任何段都可以用的,先介紹一些基本參數,明白這些基本參數,基本上就可以一般性地應用samba了,如果要更精細地控制samba,可以繼續參考一些高級配置。另外,本章假設讀者對MS WINDOWS 網絡是熟悉的,不熟悉的可以參考相關資料。
全局參數
2.1 基本參數
workgroup
說明:這個參數用來指定samba所要加入的工作組,另外如果在設置了security=domain,則workgroup可以指定域名。例如:
workgroup = wgp1
指明工作組爲wgp1
netbios name
說明:這個參數指定samba的netbios名,可以不設置,samba將會使用機器的DNS名的第一部分,如果你的機器的DNS名是host1.domain,就用host1 例如:
netbios name = public
指定NetBios名爲public
server string
說明:這個參數指定在瀏覽列表裏的機器描述,和MS WINDOWS 裏配置網絡時的描述是一樣的。可以是任何字符串。也可以不填,samba會用缺省的 samba %v,即samba 尾隨它的版本號,不過如果要模仿NT象一點的話,可以填一下。例如:
server string = Master File Server
2.2 安全參數
security
說明:這是個重要的安全配置參數,有4個值,分別是share、user、server和domain,定義了samba的基本安全級,通常是 user
security = user
這是samba的默認配置,這種情況下要求用戶在訪問共享資源之前資源必須先提供用戶名和密碼進行驗證。
securtiy = share
這是幾乎沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源。
security = server
和user安全級類似,但用戶名和密碼是遞交到另外一個SMB服務器去驗證,比如遞交給一臺NT服務器。如果遞交失敗,就退到user安全級,從用戶端看來,server和user這兩個級別是沒什麼分別的。
security = domain
這種安全級別要求網絡上存在一臺NT PDC,samba把用戶名和密碼遞交給NT PDC去驗證。
從用戶端看來,user級以上的安全級其實是沒什麼分別的,只是服務器驗證的方式不同,但這三種安全級都要求用戶在本Linux機器上也要系統帳戶。否則是不能訪問的。
encrypt passwords
說明:是否對密碼進行加密,samba本身可以維護一個密碼文件 /etc/smbpasswd,如果不對密碼進行加密則在驗證會話期間客戶機和服務器之間傳遞的是明文密碼,samba直接把這個密碼和Linux裏的 /etc/passwd密碼文件進行驗證。這其中有些問題,之一就是在Windows 95 OS/R2以後的版本和Windows NT SP3以後的版本缺省都不傳送明文密碼,要讓這些系統能傳送明文密碼必須在其註冊表裏更改。對於Windows 95 OS/R2以上的版本,可以在[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\ VNETSUP]里加一個十六進制值
EnablePlainTextPassword=00000001。對於 WINDOWS NT SP3 以上的版本,可以在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\ Parameters]里加一個十六進制值EnablePlainTextPassword=00000001,這樣就可以讓它們能在網絡上傳送明文密碼。
另外,還有一件很煩人的事情就是NT系統,如果一個服務器是處於用戶級別上的安全模式,又不支持密碼加密傳送的話,NT將拒絕和服務器連接,除非服務器向用戶提示要密碼。這在實際應用中會出現什麼情況呢。如果你在NT機器有個帳戶 user1,在Linux機器上也有個帳戶user1,密碼都是一樣,但你去和Linux機器上的共享連接的時候,NT就會提示你錯誤的密碼或未知的用戶名,要求你再次輸入用戶名和密碼,NT才和服務器連接。如果你映射了Linux上的共享資源作爲NT的一個網絡驅動器,那麼NT在下次啓動試圖重新連接這個網絡驅動器時,又會提示你錯誤密碼或未知用戶名.... 煩得很。所以一般samba的應用基本都設定爲yes:encrypt passwords = yes。
當然,samba的用戶是基於Linux系統用戶的,sambad的加密工具是 smbpasswd,最簡單的用法是smbpasswd -a username 這裏的username必須是/etc/passwd裏存在的用戶名,然後會提示輸入密碼和確認密碼,會生成一個新的密碼條目,放在 /etc/smbpasswd這文件裏。另外,samba提供了一個工具—mksmbpasswd.sh,這是shell腳本,可以從 /etc/passwd文件裏生成smbpasswd文件,用法是:cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd 。把passwd裏的用戶都加到smbpasswd裏。從安全起見,smbpasswd這個文件的存取權限請設爲600。 
username map
說明:這個參數可以讓你指定一個文件包含來自客戶機的用戶名與Linux系統用戶名之間的映射,文件的格式是每行一個映射,映射的格式是:Linux usename = client username ... 。
例如 root = admin adminstrator
這樣,當客戶機的用戶是admin或administrator時,就被轉換成root。
這個功能對用戶管理很方便,可以讓管理員不需要對客戶或服務器上的用戶帳號大動干戈。
文件名通常用默認的/et/smbusers
password level
說明:這是針對一些SMB客戶像Windows for Workgroup、OS/2之類而設的,像WFW這樣的系統在發送用戶密碼的時候,會把密碼轉換成大寫再發送,這樣就和samba的密碼不一致,這個參數可以設定密碼裏允許的大寫字母個數,這樣samba就根據這個數目對接收到的密碼進行大小寫重組,以重組過的密碼嘗試驗證密碼的正確性。這個值越大,組合的次數就越多,驗證時間就越長,安全性也越低!
例如:如果這個值是2,用戶的密碼是abcd,但發送出去其實是ABCD,samba就會把這個ABCD進行大小寫重組,組合的密碼可以是下列:Abcd, aBcd, abCd, abcD, abcd, ABcd, AbCd, AbcD,aBCd,aBcD,abCD。
所以如果沒有必要,就把這個值定爲是零(一般應該是沒這必要,現在誰還用WFW這樣的系統)。這樣的話samba只嘗試兩次,一個是接收到的密碼,另一個嘗試的是這個密碼都是小寫的情況。即使是這樣,也還存在着一定的安全性問題。
guest account
說明:這個參數指定guest級帳戶的用戶名,可以是nobody、ftp,guest級別的用戶可以不要密碼就訪問給定的guest服務。
host allow
說明:這個參數指定那些機器可以訪問samba,例如:host allow = 192.168.1. 127.
指定192.168.1.0裏的所有機器都可以訪問。
如果不允許子網裏的一臺機器訪問,可以這樣設:host allow = 192.168.1. EXCEPT 192.168.1.33
禁止192.168.1.33訪問
host deny
說明:和host allow 相反是指定那些機器不能訪問,格式一樣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章