歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

菜鳥手冊之認識Samba及安裝配置

一、Samba基礎 1、 簡介 1).SMB協議 SMB(Server Message Block,服務信息塊)協議可以看作是局域網上的共享文件/打印機的一種協議,它可以為網絡 內部的其它Windows 和Linux機器提供文件系統、打印服務或是其他一些信息。 SMB的工作原理是讓NetBIOS(Win95
  一、Samba基礎
  1、 簡介
  1).SMB協議
  SMB(Server Message
  Block,服務信息塊)協議可以看作是局域網上的共享文件/打印機的一種協議,它可以為網絡內部的其它Windows和Linux機器提供文件系統、打印服務或是其他一些信息。
  SMB的工作原理是讓NetBIOS(Win95網絡鄰居通信協議)與SMB這兩種協議運行在TCP/IP的通信協議上,且使用NetBIOS
  nameserver讓用戶的Linux機器可以在Windows的網絡鄰居裡被看到,所以就可以和Win95/NT主機在網絡上相互溝通,共享文件與服務了。
  目前Microsoft正在開發一種新的文件和打印共享協議--CIFS(Common Internet Files
  System,通用網絡文件協議),該協議支持TCP/IP和DNS等協議,能在www上支持文件和打印共享。在CIFS下服務器實際上是DNS名,由主機名和域名組成。這種變化是從NetBIOS命令結構中分離出來的。目前CIFS還沒有得到廣泛的應用。現在在Linux和Win95/NT之間的文件共享注意還是SMB和NFS。
  
  2).什麼是Samba
  Samba是用來實現SMB的一種軟件,由澳大利亞的Andew Tridgell開發,是一種在Linux(Unix)環境下運行的免費軟件。
  通過使用Samba,Linux系統可以實現如下功能:
  文件服務和打印服務(在Linux和Win95/NT之間系統之間提供打印機和磁盤的共享)
  登陸服務器,使用Windows客戶能注冊到網絡上
  作為主要域控制器和域中成員的功能
  WINS服務器以及浏覽功能
  支持SSL(Secure Socket Layer)
  支持SWAT (Samba Web Administration Tool )
  Samba除了支持Linux(Unix)和Win95/NT之外,還支持DOS、IBM OS/2、Macintosh 等操作系統。
  
  在Samba的軟件包中所包括的組件參看表1-1:
  
  表1-1 Samba軟件包的組成列表
  
  2、Samba的記錄文件
  Samba為smbd、nmbd和訪問Samba的客戶提供了下列記錄文件,分別記錄有關smbd、nmbd運行信息和每個客戶的訪問信息:
  記錄smbd 信息
  /var/log/samba/log.smb
  記錄nmbd信息
  /var/log/samba/log.nmb
  記錄客戶訪問信息
  /var/log/samba/log.%m
  
  3、啟用Samba服務器
  Samba的運行包含兩個後台守護進程:smbd和nmbd,它們是Samba的核心,在全部時間內運行。nmbd程序使得通過企圖計算機可以浏覽Linux服務器。Smbd守護進程在SMB軟件包到達網上時對它們進行處理,並且為使用或共享它的資源與Linux進行協調。如果指定的是一個文件,該資源就是一個文件;而一個打印機請求就要求訪問一台打印機。實際上,在請求訪問打印機時,Smbd把要打印的信息存儲到打印機隊列中;在請求訪問一個文件時,Smbd把數據發到內核,最後將它存到磁盤上。
  你可以從inetd選擇啟動它們,但這種方法會使Samba變慢。建議使用下面命令可以啟動這兩個進程:
  /etc/rc.d/init.d/smb start
  /usr/sbin/samba start
  如果想要在系統啟動時自動啟動samba,可以使用/usr/sbin/turboservice命令,選中其中的"SMB (Windows)File
  Services"。
  
  二、Samba配置及使用
  1、定制文件/etc/smb.conf
  在安裝完Samba後,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由於SMB是一個非常復雜的協議,所以配置Samba的工作也是比較繁瑣的,大約有超過170條配置項出現在smb.conf文件中。
  
  1).smb.conf的語法
  smb.conf文件有一個清晰的語法結構,與Windows的*.ini文件十分類似。如下所示:
  該文件被分成幾部分,每一部分都包括幾個參數,用來定義Samba輸出的共享及其詳細操作。
  
  文件被分隔成若干節,每一節都由一個被方括號括起來的標識開始(例如,[global]、[home]、[printers]),每一個配置參數或是一個全局參數(影響或控制整個服務器),或是一個服務參數(影響或控制服務器提供的某項服務  )。
  global部分定義的參數用來控制Samba的總特性。除global部分外,每一部分都定義了一個專門的服務。
  你可以使用下面的語句來指定一個參數:
  name=VALUE
  name可以是一個單詞或者用空格隔開的多個單詞。VALUE可以是布爾值(ture或false;yes或no;1或0)、數字或字符串。
  注釋以分號開頭,可以單獨一行,也可以跟在一條語句之後。
  通過在一行的最後一個字符後加反斜槓"\"可以將一行分成多行。
  每一部分的名字和參數都不區分大小寫,例如,參數browseable=yes與browseable=YES是完全等價的
  
  2).smb.conf文件的功能
  smbd和nmbd這兩個守護進程啟動時(通常為系統引導時)讀配置文件smb.conf,這一配置文件向這兩個守護進程說明輸出什麼共享、共享輸出給誰以及如何進行輸出等等。
  因為安全問題是最重要的,所以你必須指定哪些計算機可以訪問這一共享,smb.conf文件可以很靈活的明確指定每一服務有哪些用戶可以訪問。隨著Linux網絡的增大,這一控制越來越重要。
  
  3).smb.conf文件結構
  smb.conf文件主要包括三部分:
  global(全局)參數
  directory shares (目錄共享)部分--包括標准的[home]部分
  printer shares(打印共享)部分
  其中,global參數用來設置整個系統的規則;[home]部分和[printer]部分是服務的特定例程,services(服務)這一術語是網絡客戶機共享或輸出的目錄和打印機的Samba術語。這些服務定義了哪些用戶可以訪問這些目錄和打印機以及如何訪問這些目錄和打印機。
  
  清單1-1給出了smb.conf文件的一個簡單的例子。
  清單1-1 smb.conf文件的一個簡單示例
  [global]
  netbios name = FRODO
  workgroup = UAB-TUCC
  server string = John Blair's Linux Box
  security = user
  printing = lprng
  log file = /var/log/samba
  lock directory = /var/lock/samba
  [homes]
  comment = Home Directory
  browseable = no
  read only = no
  [printers]
  browseable = no
  guest ok = yes
  printable = yes
  在 [global] 段中設置了主機名稱, 主機所在的工作組名稱和浏覽時可看到的對本機的描述。安全參數告訴 Samba使用"用戶級別"的安全保護方式。 SMB 有兩種安全模式: 共享級別, 將資源加密碼控制;用戶級別, 可以使用某一用戶的所有資源。
  這裡不能詳細解釋兩種方式的微妙差別, 但大部分情況下, 你會想用用戶級別安全控制。
  [global] 段中還定義了日志文件目錄和鎖定文件的位置。日志文件在解決故障和完善系統時是很有用的,鎖定文件可以阻止多個用戶同時修改相同的文件。
  [homes] 段中的設置控制了每一個用主目錄的共享權限。comment 參數指定的字符串在你浏覽本機資源時出現在指定資源的旁邊。
  browseable 參數控制一項服務是否能夠出現在網絡資源浏覽表中。這裡是一些非直覺的東西, browseable = no意味著這個目錄將在浏覽時顯示為要驗證的用戶名稱。 舉例來說, 指定 browseable = no, 當我浏覽這個 Samba 服務器時,我將看到一個名稱為 cuckoo 的共享目錄。當指定 browseable = yes 時, 我將看到一個名為 homes 和 cuckoo的共享目錄。設置 read only = no 將允許通過驗證的用戶對主目錄有寫入的權限。 但是, 如果他們的主目錄的 UNIX 權限 不允許寫入,那麼他們就沒有寫的權限。 無論 UNIX 的權限怎樣, 設置 read only = yes 後, 他們的主目錄是只讀的。
  printing 命令描述了本地打印系統類型, 這可以讓 Samba 知道怎樣提交打印任務, 顯示打印隊列, 刪除打印任務和其它操作。
  如果打印系統是 Samba 所不知道的, 你必須在每次執行打印操作時指明命令。
  清單中[printing]一段配置允許任何能夠登錄到 Samba 服務器的用戶使用 printcap 中出現的 每一台打印機。 正常情況下,如果使用用戶級別安全控制, guest ok = yes 並不能授權每一個用戶(使用系統)。 每一個打印服務必須定義為 printable =yes。
  下面的一段配置片斷增加了一個命名為 public 的共享目錄, 直接對匿名FTP目錄有只讀的 權限。 你必須在客戶機上建立打印機驅動程序。 對於Windows 95 和 Windows NT 客戶機, 你可以使用printer name 和 printer driver命令自動建立打印驅動。
  
  [public]
  comment = Public FTP Directory
  path = /home/ftp/pub
  browseable = yes
  read only = yes
  這段描述並不是解釋一些微妙的主題,
  例如用戶級和共享級安全性的區別或者其它的授權認證主題。它僅僅讓我們看到了Samba這座冰山的一角。另一方面,這是一個良好的例子,從中我們可以了解產生一個簡單但可工作的smb.conf文件是多麼容易。
  下面,我們舉另一個例子說明如何通過Samba把Linux的打印機共享給Windows機器。
  為了共享Linux的打印機給Windows機器,必須確定Linux機器上的打印機已經設置好。如果能從Linux上打印,那麼設定Samba的打印機共享是很簡便的。只要根據自己的情況,對smb.conf文件有關打印的部分進行修改就可以了。在修改中唯一需要注意的是確保打印機的路徑要與/etc/printcap中的spool目錄相符合,然後就可以在Win95/NT上配置網絡打印機了(關於如何在Win95/NT上配置網絡打印機,本文不做介紹)。
  
  4).標准smb.conf文件清單
  在Samba的軟件包裡的example目錄中有一個缺省的配置文件smb.conf.defaults。我們可以對它做適當修改後拷貝到你的安裝目錄下的lib目錄裡,並改名為smb.conf。清單1-2是Samba系統提供的標准的配置文件。為方便讀者閱讀,本文翻譯了文件中的注釋並適當的添加了解釋。
  
  清單1-2 標准smb.conf 文件
  # 這是服務器的主要配置文件。您應該閱讀smb.conf(5)的用戶手冊以了解下面列出的每一個選項。Samba有很多的選項,它們之中的大多數並沒有出現在這個例子中。
  #
  # 以分號";"或井號"#"開始的每一行都是注釋,在執行時被忽略。在本例中我們使用"#"作為注釋而使用";"作為可選配置的注釋。
  # 注意:無論何時修改了這個配置文件,您都要運行"testparm"命令來檢查您所做的修改有沒有基本的語法錯誤。
  #
  #=================== 全局變量設置Global Settings ====================
  [global]
  # workgroup用來指定您的機器在網絡上所屬的NT域名或組名。格式是
  # workgroup = NT-Domain-Name or Workgroup-Name。缺省的組名是 MYGROUP。
  workgroup = MYGROUP
  # server string 用來設置NT描述域。缺省值是Samba Server 。
  server string = Samba Server
  # 下面的選項對於安全很重要。它允許您設置哪些領域的機器可以訪問您的Samba服務器。下面的這個例子允許兩個C類子網和"lookup"的連接請求而禁止來自其他網段機器的連接請求。有關的例子請參看smb.conf的用戶手冊。
  ; hosts allow = 192.168.1. 192.168.2. 127.
  # 允許自動加載打印機列表,而不需要您單獨設置每一台打印機。
  load printers = yes
  # 您也許希望覆蓋原有的printcap 文件。
  ; printcap name = /etc/printcap
  # 對於SystemV系統,如果將printcap名設置為lpstat 將允許您從SystemV 的spool中自動獲得打印列表。
  ; printcap name = lpstat
  # 除非您的打印機不是標准型號,否則您沒有必要在下面指定打印機系統的類型。
  # 目前支持的打印機系統包括:bsd, sysv, plp, lprng, aix, hpux, qnx printing = bsd
  # 如果希望建立一個客戶帳號,去掉下面語句前面的分號";"。同時,您必須在/etc/passwd中加入這個帳號的定義,否則將使用用戶"nobody"作為客戶帳戶。
  ; guest aclearcase/" target="_blank" >ccount = pcguest
  # 此選項將為每一個與服務器連接的機器定義一個單獨的日志文件。
  log file = /usr/local/samba/var/log.%m
  # 此選項設置最大的日志文件的大小(以KB為單位)max log size = 50
  # 定義安全模式。大多數人都喜歡用戶級安全模式,詳細內容參看security_level.txt
  security = user
  # 只有當安全模式設置為服務器級(security = server)時,才定義下面選項。
  ; password server = <NT-Server-Name>
  # 如果用戶想使用加密口令的話,請參閱ENCRYPTION.txt、Win95.txt和 WinNT.txt
  # 文件,請在閱讀以上文件後使用下面選項。
  ; encrypt passwords = yes
  # 使用此選項允許您對每一個機器使用不同的配置。%m將被替換成與服務器請求連接機器的NetBIOS名。
  ; include = /usr/local/samba/lib/smb.conf.%m
  # 大多數人會發現此選項將顯著提高服務器的執行效率,請參讀speed.txt和用戶手冊以了解更多細節。
  socket options = TCP_NODELAY
  # 配置Samba來使用多個網絡界面,如果您有多個網絡界面,那麼必須按照下面格式在這裡列出。請參閱用戶手冊以獲得更多的細節。
  ; interfaces = 192.168.12.2/24 192.168.13.2/24
  # 浏覽控制選項
  #如果不想使您的Samba服務器成為局域網內部的主浏覽服務器,將此選項設為no local master = no
  # OS Level決定了該服務器在局域網內的訪問優先權。
  ; os level = 33
  # Domain Master將Samba服務器定義為主域浏覽器。此選項將允許Samba在子網列表中比較浏覽。如您已經有一台Windows NT域控制器,不要使用此選項; domain master = yes
  # Preferred Master使Samba在啟動時選擇一個本地浏覽器並給它獲得選擇的較高的機會; preferred master = yes
  #僅當您的網絡中有一台在安裝時設置為主域控制器的NT服務器時使用此選項。domain controller = <NT-Domain-Controller-SMBName>
  # 如果想使Samba成為Windows95工作站的登錄服務器,則使用此選項。
  ; domain logons = yes
  # 如果允許域登錄服務,那麼您也許希望每台機器或每個用戶的登錄腳本運行一個特定的每工作站的登錄批處理文件。
  ; logon script = %m.bat
  # 運行一個特定的每用戶名登錄批處理文件。
  ; logon script = %U.bat
  # 放置roving profiles 文件的位置(僅用於 Win95 和WinNT) ,%L代表該服務器NetBIOS名,%U是用戶名,您必須取消後面定義的[Profiles]前面的注釋號。
  ; logon path = \\%L\Profiles\%U
  # Windows的Internet名服務支持記錄部分
  # WINS Support告訴NMBD守護進程支持WINS服務器。
  ; wins support = yes
  # WINS Serve選項告訴NMBD守護進程作為WINS的客戶機。
  # 注意:Samba既可以作為WINS服務器也可以作為 WINS客戶機,但不能兼而有之。
  ; wins server = w.x.y.z
  # WINS Prox代表一個非WINS客戶通知Samba響應名字解析請求。要使此選項正常工作必須保證網絡中至少有一台WINS服務器。缺省值是NO。
  ; wins proxy = yes
  # DNS Proxy選項決定Samba是否通過DNS 的nslookups 去解析主機的NetBIOS名。對於1.9.17 以前的版本內置值是yes ,對於1.9.18之後的版本內置值是no 。
  dns proxy = no
  #================== 定義共享服務Share Definitions ===================
  # 所有使用者的home目錄
  [homes]
  comment = Home Directories
  # 當一個客戶程序以客人用戶類出本服務器的共享服務時,不列出homes服務。
  # 但是本機用戶創建的主目錄服務仍使用[global]節設定的browseable。
  browseable = no
  writable = yes
  # 如果要創建一個netlogon目錄則取消下面的注釋。
  ; [netlogon]
  ; comment = Network Logon Service
  ; path = /usr/local/samba/lib/netlogon
  ; guest ok = yes
  ; writable = no
  ; share modes = no
  # 如果要提供一個特定的共享roving profile則取消下面的注釋。
  # 缺省值是使用用戶的home目錄。
  ;[Profiles]
  ; path = /usr/local/samba/profiles
  ; browseable = no
  ; guest ok = yes
  # 注意:如果您有一個BSD 風格的打印系統,您不需要單獨定義每台打印機。
  [printers]
  comment = All Printers
  path = /usr/spool/samba
  browseable = no
  # 設置public = yes 將允許以guest 帳號登錄的用戶使用打印機。
  guest ok = no
  writable = no
  printable = yes
  # 此選項定義網絡用戶共享文件的臨時目錄。
  ;[tmp]
  ; comment = Temporary file space
  ; path = /tmp
  ; read only = no
  ; public = yes
  # 一個用戶共享目錄,除了在"staff "組裡的用戶有些寫的權限之外之外,對其它用戶是只讀的。
  ;[public]
  ; comment = Public Stuff
  ; path = /home/samba
  ; public = yes
  ; writable = yes
  ; printable = no
  ; write list = @staff
  # 其他例子:
  #
  # 下面定義了一台只有fred可以使用的私人打印機。Spool數據放在fred的home目錄裡。注意:fred必須對Spool目錄有寫的權限,不管這個目錄在什麼位置。
  ;[fredsprn]
  ; comment = Fred's Printer
  ; valid users = fred
  ; path = /homes/fred
  ; printer = freds_printer
  ; public = no
  ; writable = no
  ; printable = yes
  # 下面定義一個只有用戶fred才能使用的私人目錄。fred 必須對這個目錄擁有寫的權限。
  ;[fredsdir]
  ; comment = Fred's Service
  ; path = /usr/somewhere/private
  ; valid users = fred
  ; public = no
  ; writable = yes
  ; printable = no
  # 下面定義的是對每個域服務器連接的機器有不同的目錄的服務。這將允許您對於不同的機器使用不同的配置,同樣也可以使用%U選項為每個用戶使用不同的配置。%m在連接時將被替換為客戶機的主機名。
  ;[pchome]
  ; comment = PC Directories
  ; path = /usr/pc/%m
  ; public = no
  ; writable = yes
  # 下面定義一個所有用戶都可以讀寫的共享目錄。注意用戶在這個目錄中創建的文件都將歸默認用戶所有。所以任何可以訪問這個目錄的用戶都可以刪除別的用戶在這個目錄裡放置的文件。顯然,這個目錄對於默認用戶必須是可寫的。當然,也可以指定某個用戶,這時,該目錄的所有文件將為此用戶所有。
  ;[public]
  ; path = /usr/somewhere/else/public
  ; public = yes
  ; only guest = yes
  ; writable = yes
  ; printable = no
  # 下例說明了如何定義讓兩個用戶共享一個目錄,他們在這個目錄裡放置的文件歸他們各自所有。在此例中,這兩個用戶對該目錄都有寫的權限。當然文件的保護應該設置恰當。很顯然,這個例子可以擴展到適合於多個用戶的情況。
  ;[myshare]
  ; comment = Mary's and Fred's stuff
  ; path = /usr/somewhere/shared
  ; valid users = mary fred
  ; public = no
  ; writable = yes
  ; printable = no
  ; create mask = 0765
  
  2 共享訪問限制
  1).通過主機地址
  使用以下參數來限制通過主機地址訪問:
  allow hosts
  hosts allow
  deny hosts
  hosts deny
  "allow hosts"、" hosts allow"這兩個功能相同的參數指定允許訪問一個服務的主機列表,主機列表用","號、空格或制表符隔開。如用於[global]段,則應用於所有服務,而忽略在每個服務中的各自的設置。
  主機列表的組成可以是主機名、IP地址、子網地址或網絡號碼/掩碼。也可以使?quot;EXCEPT"關鍵字來限制子網中的個別主機的訪問。例如:hosts allow = 202.204. 3 EXCEPT 202.204.3.30允許在202.204.3子網上的主機訪問,但禁止其中的202.204.3.30訪問。
  "deny hosts"、" hosts deny"這兩個功能相同的參數指定禁止訪問某個服務的主機列表,與"allow hosts"相反。當與"allow hosts"列表沖突時,"allow hosts"列表優先。
  
  2).通過用戶口令
  使用以下參數來限制通過用戶口令訪問:
  security
  參數security可以確定對客戶用戶名/口令的驗證方式。缺省為"user",即對Samba服務器的任何訪問都要通過用戶名/口令的驗證。如果客戶登錄客戶機,如Windows所用的用戶名與Samba服務器上的UNIX用戶名一致,則通過口令驗證後就可以訪問;如Windows所用的口令也與UNIX一樣,那麼不經任何提示就可以訪問。
  但如果客戶機上登錄的用戶名與Samba服務器上的UNIX用戶名不一致,則需要在一個映射文件中(如/etc/smbusers)寫入客戶機用戶名到UNIX用戶名的映射,同時使用"username
  map"參數指定映射文件,例如:
  username map = /ect/smbusers
  在/etc/smbusers文件中的內容如下:
  cuckoo = "cuckoo doo"
  這樣,在客戶機上以"cuckoo
  doo"注冊後,再與Samba服務器連接時,輸入UNIX客戶cuckoo的口令就可以進入,因為Samba已經把"cuckoo doo"映射為cuckoo。
  security參數的另一個值是"share",表示Samba服務器不需要客戶機使用用戶名/口令來登錄,而是根據每個共享的設置來決定是否需要用戶名/口令驗證。設置security為share一般用於客戶機上大多數用戶名與Samba服務器上UNIX用戶名不相同的情況,以及Samba服務器主要提供guest訪問。
  在smb.conf文件中,如果沒有設置"encrypt passwords",Samba將使用UNIX的password數據庫來驗證用戶口令。這需要客戶機將口令以"普通文件"的方式傳遞過來。如果設置了"encrypt passwords",Samba則使用另一個加密口令文件,通過"smb passwd file"來設置,例如:
  encrypt passwords = yes
  smb passwd file = /etc/smbpasswd
  
  3).通過用戶名
  public
  guest ok
  上面的兩個參數的功能相同,都可以使用相應的服務允許guest用戶,即不需要用戶名/口令驗證。如果還指定了"guest only",那麼相應的服務器只允許由guest用戶來訪問。
  invalid users
  valid users
  這兩個參數分別設置不允許注冊某個服務和允許注冊某個服務的用戶列表。一個用戶同時出現在兩個列表中的時候,不允許注冊優先。列表中的用戶名可以用空格隔開,以"@"開頭的名字被認為是NIS組名或UNIX組名;以"+"開頭的名字被認為是UNIX組名;以"&"開頭的名字只被認為是NIS組名。
  only user
  此參數控制是否只允許在"user ="列表中指定的用戶訪問某個服務。如果設置為true,則只有在"user ="列表中的用戶才能訪問。
  
  4).通過是否可以讀寫來控制
  read only
  此參數設置為"yes",則使用服務的用戶不能在該服務的目錄中創建或修改文件。
  writable
  writeable
  write ok
  這三個參數功能相同。如果它們被設置為"no",則使用服務的用戶不能在該服務的目錄中創建或修改文件。
  read list
  write list
  這兩個參數分別指定只允許對一個服務進行只讀訪問或同時有"寫"權限的主機列表,這裡,如果一個主機同時在兩個列表裡,則"寫"優先。
  
  5).通過是否在浏覽器列表中顯示來控制
  browsable
  browseable
  這兩個功能相同的參數控制該段是否在浏覽列表中列出。浏覽列表列出的是可獲得的共享列表。一般[home]段禁止浏覽,以提高安全性。
  
  3、Windows 9x做為SMB客戶的設置
  1).配置microsoft網絡客戶
  在客戶機(WIN9X)上,在控制面板裡添加microsoft網絡客戶。選中microsoft網絡客戶--標識--計算機名--my_computer_name--my_group,其中,my_computer_name將作為表示客戶機的NetBIOS名,my_group為組名
  
  2).編輯注冊表記錄
  如果在SMB服務器上的smb.conf 文件中沒有用到"encrypt
  passwords",即使用"普通文本"格式的口令,則必須要編輯注冊表,來允許使用"普通文本"格式的口令。
  在Windows的注冊表的以下條目中:
  /HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP新建DWORD值,將新建的值命名為EnablePlainTextPassword;雙擊EnablePlainTextPassword,將鍵值設為1。
  
  3).重新啟動
  重新啟動計算機,以用戶名/口令登陸。該用戶名/口令將用於與SMB服務器連接時進行用戶身份認證,所以如果要訪問SMB服務器上用戶自己的home目錄,建議使用與SMB服務器上相同的用戶名/口令。
  
  4).訪問Samba服務器
  通過網絡鄰居浏覽訪問Samba服務器,可以在列表裡選擇,也可以在命令窗口裡使用命令:\\sambaserver
  
  4 、Samba服務器提供的其他命令
  smbstatus
  smbstatus指令用於顯示當前的SMB服務器的連接狀態。例如,在IP地址為202.204.3.16的"cuckoo"客戶機上,用戶john訪問SMB服務器的"public"服務時,命令輸出如下:
  /usr/bin/smbstatus
  Samba version 2.0.3
  Service uid gid pid machine
  ----------------------------------------------
  public john john 10009 cuckoo (202.204.3.16) Fri Jul 21 20:3
  No locked files
  Share mode memory usage (bytes):
  1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total
  此命令可以附加一些開關來顯示不同的內容,下表列出了主要的開關及其含義:表1-2 smbstatus命令主要選項表
  
  nmblookup
  nmblookup命令用於把一個NetBIOS名字映射到IP地址。對於上面的例子,可以使用下面的命令查找主機cuckoo:/usr/bin/nmblookup sale可以使用合適的選項來允許nmblookup查詢一個IP廣播域或是一個單獨的機器,該命令常用的選項參看表1-3。表1-3 nmblookup 命令主要選項列表
  
  smbclient
  smbclient是訪問SMB服務器資源的客戶程序。該程序提供的接口與ftp程序類似,訪問操作包括從SMB服務器下載文件到本地,或從本地上載文件到SMB服務器,還可以在SMB服務器上檢索目錄信息等。
  命令語法如下:
  /usr/bin/smbclient //smbserver/service [passwd][-U username]
  其中,smbserver是SMB服務器的NetBIOS名,一般與服務器的主機名一樣,但不是必須的。"service"為服務器提供的服務,如文件服務public或打印服務printer。
  passwd是訪問某些服務時需要的口令。如果在命令行輸入,後面則不會再提示輸入口令。否則,將在後面提示輸入口令。雖然有些要訪問的服務器不需要口令,但仍然會有輸入口令的提示。如果不希望有口令提示,則可以在命令行使用"-N"選項。如果要使用其他的端口與SMB服務器進行TCP連接,可以使用"-p"選項來指定,缺省值為139。
  "-U"可以指定與SMB服務器連接時使用的用戶名。如果沒有指定,smbclient使用環境變量USER指定的值作用戶名。如果沒有USER環境變量,則用"guest"。
  在環境變量USER中,可以設置"USER=username%password",這樣就不用在命令行上輸入口令。同時,使用ps命令看不到命令行參數,具有一定的安全性。同樣,也可以使用"-Uusername%password"的形式指定用戶名和口令。?quot;-U"指定的口令"%password"要優先於在命令行[password]中指定的口令。
  
  "-L"選項可以列出在一個服務器上提供的服務,例如:
  /usr/bin/smbclient -L smbserver
  使用下面的命令可以進入與ftp類似的提示狀態:
  /usr/bin/smbclient //smbserver/service
  執行結果:
  smb:\>
  其中"\"表示服務器當前的工作目錄。在該提示符下可以使用的命令可以通過"?"、"help"命令列出。命令不分大小寫。
  在該提示符下除了可以使用很多與ftp類似的命令外,還有命令recurse,它可以被設置為on,以便在使用mget或mput命令時能夠get或put匹配的子目錄。recurse缺省為off,即只get或put當前目錄中的文件。
  
  在該提示符下還可以使用下面的命令:
  smb:\>tar c localfile filename
  將服務器上文件名為"filename"的文件和目錄(可以使用通配符)經過tar 拷貝到本地的"localfile "文件中。或者:
  smb:\>tar x localfile filename
  可以把本地tar 文件localfile 中的文件filename拷貝到服務器上;如果filename省略,則拷貝所有的文件。
  上面的命令也可以在smbclient命令行上來執行,如:
  /usr/bin/smbclient //smbserver/service [passwd] -T c local file filename
  /usr/bin/smbclient //smbserver/service [passwd] -T x local file filename
  smbprint
  smbprint是在Linux系統下將打印文件提交給遠地SMB服務器打印的腳本程序。程序中調用的命令就是smbclient。下面舉例說明此命令的使用方法。
  例如,遠端SMB服務器NetBios名為prtserver(Windows9X),提供打印服務。服務名為netpcl(NEC激光打印機),不需要口令。
  在Linux系統中配置如下:
  1. 編輯/etc/printcap文件,加入下面一行
  smb:lo=/dev/null:sd=/usr/spool/smb:sh:if=/usr/bin/smbprint:af=/var/spool/lpd/smb/acct
  2.建立目錄/usr/spool/smb、/var/spool/lpd/smb
  3.用下面命令建立記帳文件
  touch /var/spool/lpd/smb/acct
  4.建立/var/spool/lpd/smb/.config文件,包含下面內容:
  server = prtserver
  service = necpcl
  password = ""
  5.編輯/usr/bin/smbprint文件,在smbclient命令參數中使"echo translate"有效,這樣可以使UNIX文件到Windows 9x系統打印時,進行<LF>與<CR/LF>的轉換。
  6.啟動lpd:
  /etc/rc.d/init.d/lpd start
  7.使用lpr命令打印/etc/hosts文件
  /lpr -P smb/etc/hosts
  lpr缺省使用的打印機名為lp,這裡使用的是smb。
  
  5、使用Samba加密口令
  客戶機訪問Samba服務器時進行的用戶身份認證包括使用"普通文本"格式的口令,通過網絡傳送給SMB服務器,與UNIX的帳戶數據庫(如/etc/passwd)進行核查;或者使用加密口令,通過"SMB challenge/response"驗證進行核查。本文著重介紹加密口令的用法。
  在Samba服務器中使用了與Windows NT兼容的口令加密算法,因此可以像Windows NT一樣對Samba的客戶進行用戶口令核實。
  Windows NT使用一個包含用戶口令hashed值的文件,是通過對用戶的"普通文本"的口令經過加密算法得到的,稱為"hashed口令"。不能從該hashed值返回得到原始的"普通文本"的口令。在Samba服務器上可以形成同樣的hashed口令,保存在smbpasswd文件中。
  當一個Samba客戶(如Windows 9x
  或NT)使用Samba資源時,它先請求一個連接,並商討連接使用的協議。Samba回答客戶請求時產生一個隨機值,發送給客戶,並且還儲存在Samba服務器上,稱為"challenge"。"challenge"對於每一個客戶連接是不一樣的。
  客戶然後使用hashed口令與"challenge"進行加密運算,產生24個字節的"response",發送給Samba服務器。
  Samba服務器使用自己保存的hashed值的用戶口令(保存在smbpasswd文件中)與先前產生的"challenge"進行同樣的加密運算,將產生的結果與客戶發送過來的結果進行比較,如果結果相同,則客戶被允許訪問;否則,禁止用戶訪問。
  
  對於Samba服務器來說,它不存儲"普通文本"格式的口令,儲存的是從"普通文本"口令轉換的hashed口令。並且在網絡連接時,"普通文本"和"hashed口令"都不被傳送,所以比UNIX安全。因為當客戶程序與UNIX服務器連接時(如telnet),口令往往是以"普通文本"在網絡上傳送的,可以被網絡竊聽軟件(如tcpdump)截獲。Samba加密口令文件smbpasswd會被利用成為潛在的漏洞。所以該文件是要由root所有,讀寫權限應該為600。
  Windows 9x或NT缺省的用戶認證方式是使用加密的口令,這?quot;普通文本"不在網絡上傳送。相應的,Samba也要使用加密口令的認證方式。但如果想使用"普通文本"格式的口令,可以編輯Windows NT的注冊表來允許。這樣,Samba服務器就可以使用/etc/psswd文件來驗證用戶口令,而不需要smbpasswd文件。
  要想讓Samba使用與WindowsNT兼容的口令加密算法,則必須在Samba服務器上保存包含與用戶名對應的hashed值的口令文件。可以使用/usr/bin/mksmbpasswd.sh程序產生加密口令文件的框架,文件名由"smb passwd file"參數設置,這裡是/etc/smbpasswd,命令行格式為:
  
  cat /etc/passwd |mksmbpasswd.sh >/etc/smbpasswd
  
  然後root可以使用smbpasswd命令可以設置用戶口令,例如設置客戶cuckoo的smb口令為smbpassword:/usr/bin/smbpsswd cuckoo smbpassword root還可以使用smbpsswd 進行添加用戶、取消口令等操作。但添加的用戶必須在/etc/psswd文件中存在。普通用戶使用smbpsswd命令只能像使用passwd程序一樣更改自己的smb口令。
  
  三、Samba常見故障排除
  Samba的故障排除可以在SMB服務器和SMB客戶機上通過各自的命令來完成。
  1 SMB服務器上的操作
  1).使用下面的命令來查看是否有錯誤的配置。
  /usr/bin/testparm /etc/smb.conf
  2). 在服務器上以及客戶機上用ping命令檢查tcp/ip是否正常工作。
  3). 在SMB服務器上用
  /usr/bin/smbclient -L SMBserver
  命令將得到一個共享的列表。
  如果出現失敗信息,則要檢查與服務器相關的"hosts allow"、"hosts deny"、"valid users"、"invlid users"等參數的設置。如果出現"connection
  refused",則檢查Samba服務器進程是否啟動;若Samba以守護進程形式運行的話用"netstat -a"命令檢查端口是否處於監聽狀態。
  4). 運行了命令"/usr/bin/nmblookup SMBserver",將返回SMB服務器的IP地址。否則nmbd沒有正確的運行。
  5). 運行"/usr/bin/nmblookup -d 2 '*'
  "命令,在子網中運行NetBIOS/TCPIP的主機將會響應。否則說明nmblookup不能正確的得到廣播地址,可以嘗試在smb.conf文件中用interfaces參數人工設置IP地址、廣播地址和子網掩碼。
  6). 運行"/usr/bin/smbclient'\\SMBserver\homes"命令,需要輸入客戶在SMB服務器上的用戶口令,然後會出現類似"smb>"的提示符。這時可以使用dir命令浏覽客戶在SMB服務器帳戶目錄下的文件,用help命令可以得到其他命令的幫助。如果不能出現類似"smb>"的提示符,並且有"invalid network name"的錯誤信息,則有可能homes共享沒有正確的設置;或者有"Bad password",則要檢查"shadow password"、"password encryption"以及參數"valid users"和"path"的設置。
  
  2、SMB客戶機上的操作
  1). 運行"net view \\SMBserver"命令,應該能夠列出SMB服務器上的共享。
  如果出現類似"network name not found"的錯誤,則要檢查客戶機上DNS或WINS的設置。如果出現"Invalid network name"或"bad password error"的錯誤,則參照與上面"smbclient-L"命令中同樣的錯誤結果的解決方法。要注意客戶機將要用客戶注冊客戶機時所用的用戶名/口令去與SMB服務器連接,所以在SMB服務器上,用戶最好有同樣的用戶名/口令。
  2). 使用"net use x;\\SMBserver\homes"命令,可以把SMB服務器上客戶home目錄映射到客戶機"x:"盤,"x:"應該是一個客戶機上未用的盤號。這樣,共享的目錄可以在客戶機上以"x:"盤來看待。正常的信息為"command complete successfully"。
  如果要停止使用"x:"盤,可以使用"net use x:/delete"命令。如果不能正常的把客戶的home目錄映射到"x:"盤,則要檢查SMB服務器上"hosts allow"等參數的配置。如果客戶機上的用戶名不能與服務器上的用戶名匹配,嘗試使用"username map"選項。
  3). 如果在SMB服務器上沒有使用"encrypted passwords",則在客戶機上要在注冊表中允許使?quot;普通文本"格式的口令。
  
  小結
  Samba是SMB的一種實現方法,主要用來實現Linux系統的文件和打印服務。Linux用戶通過配置使用Samba服務器可以實現與Windows用戶的資源共享。
  守護進程smbd和nmbd是Samba的核心,在全部時間內運行。nmbd程序使得通過企圖計算機可以浏覽Linux服務器。Smbd守護進程在SMB軟件包到達網上時對它們進行處理,並且為使用或共享它的資源與Linux進行協調。
  在安裝完Samba後,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。smb.conf文件的的語法結構與Windows的*.ini文件十分類似;文件結構主要包括三部分:全局參數部分、目錄共享部分、打印共享部分;本文著重介紹了如何配置各選項以完成特定的功能。
  通過使用不同的參數,可以實現對Samba的不同訪問控制:通過主機地址限制訪問、通過用戶口令限制訪問、通過用戶名限制訪問、通過驗證讀寫權限限制訪問、通過是否在浏覽器列表裡顯示來控制等。所有這些方法,大大的增強了Samba服務器的安全性。

Copyright © Linux教程網 All Rights Reserved