1,507 瀏覽數

samba

Step0:前言

Windows 的系統透過 SMB (Session Message Block protocol, 也叫做 NetBIOS 或 LanManager protocol.) ,來進行檔案分享的傳輸協定,而 samba 是在 Linux 系統下使用 SMB(NetBIOS) 協定來進行檔案分享的傳輸方式.也因此藉由 samba 來讓 Windows 與 Linux 系統的檔案能夠使用同一種方式來進行分享.那什麼是 SMB(NetBIOS)呢!!下面可以看到這個協定的演化過程.

  • NetBIOS
    最早由 IBM 開發出來的 NetBIOS API(Network Basic Input/Output System Application Program Interface),這個 NetBIOS 由 18 個 API 組成,可以用來命令當時的電腦建立連線服務. 因為 NetBIOS 使用廣播(broadcasts)來傳送資料.也因此資料無法繞送(routed).所以只能用在小型網路中傳輸.NetBIOS 屬於 session layer protocol(第5層,交談層)
  • NetBEUI
    接下來就有了NetBIOS的改良版,NetBEUI(NetBIOS Extened User Interface),不過他已經是一個完整的傳輸協定了.NetBEUI 屬於 data-link layer protocol (第2層,資料連結層).
  • SMB(NetBIOS)
  • Windows NT4.0 之前的網路芳鄰(檔案和印表機分享),名稱解析(wins)…皆是使用 NetBIOS over NetBEUI所實而做成.後來的 NetBIOS 也可以 over TCP/IP 如 Windows 2000 的網路芳鄰(檔案和印表機分享), Linux 的 samba server or NETBIOS over IPX(Internetwork Packet Exchange) 如 NT 下的 NWLINK

note:

  1. 使用廣播的方式傳遞資料,在遇到 Roter 時, Router 是會直接將此封包丟棄.原因是不能讓這種封包傳送到 InterNet 上,而產生無限封包.
  2. NetBEUI 屬於 data-link layer protocol (第2層,資料連結層) 所以 Windows 與 Linux 之間協定關聯如下圖所示

samba20
Samba 的官方網站為 http://www.samba.org

Step1.首先檢查 samba 是否安裝

[root@benjr ~] # rpm -aq | grep samba 
samba-common…..
samba-client…..
samba-…..

檢查是否有安裝.沒有安裝就繼續下一個步驟.安裝完成請跳至第三個步驟.

Step2.安裝 samba

在 RedHat 第二片光碟片中的目錄 /ReaHat/RPMS/可以找到所需的程式

[root@benjr ~] # mount /mnt/cdrom
[root@benjr ~] # cd /mnt/cdrom/RedHat/RPMS/
[root@benjr ~] # rpm -ivh samba-common…..rpm
[root@benjr ~] # rpm -ivh samba-client…..rpm
[root@benjr ~] # rpm -ivh samba-…..rpm

目前 samba 的版本為 3.X

Step3. samba 的身分驗證模式

我們先來看看 samba 的設定檔 /etc/samba/smb.conf

[root@benjr ~] # vi /etc/samba/smb.conf
[global]
workgroup = MYGROUP
server string = Samba Server
security = user
…………………略……………………….
#======== Share Definitions ========
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest = no
writable = no
printable = yes

設定檔主要可以分成兩個區塊

  1. [global] 中主要設定整個 samba 系統的組態
  2. [share] 中都是要分享的檔案目錄以及印表機

其中的 [global] 的 security 決定身份驗證要由誰處理,samba 3.X 提供了五種安全等級可設定,那我們就來看看這五種不同模式的 samba server 要怎麼樣來與現有的 Windows 網域結合

  1. Share Level Security : 不使用密碼做身份驗證

      security = share
      
  2. User Level Security : 本身這台 samba server 做身份驗證,這也是設定檔的預設值

      security = user
      
  3. Server Security :  交由其他台 Windows NT/2000/2003 或 samba server 做身份驗證

      encrypt passwords = Yes
      security = server
      password server = "NetBIOS_name_of_a_DC"
      
  4. Domain Security Mode : 身份驗證交由 Windows AD (Domain 為 mixed mode)或者由 Windows NT 4 處理

      workgroup = "name_of_NT_domain"
      security = domain
      
  5. ADS Security Mode: 身份驗證交由 Windows AD 處理(Domain 為 native mode)

      realm = your.kerberos.REALM
      security = ADS
      ads server = your.kerberos.server
      

Step4. samba 的其他功能

詳細設定方式請參考各連結

  1. samba(PDC) :主要是將 samba server 模擬成 windows NT 4.X 的 PDC(Primary Domain Controller)
  2. samba(winbind) :winbind 是一個獨立 daman ,它主要是能讓 Linux 系統能取得 NT/AD 網域內使用者帳號來當做 Linux 的身份驗證.
  3. samba(ACL) : 一般由samba server 分享出來的檔案無法直接在 windows 的檔案總管中進行權限設定,必須要修改 /etc/samba/smb.conf 的分享權限.所以這邊是要介紹如何讓 samba server 分享的檔案可以直接經由 windows 的檔案總管來修改權限.
  4. samba(Join Domain) : Linux 可以藉由 samba server 去 join windows 網域,可以藉此來存取 windows 網域的資料
  5. smb.conf : 其他設定資料

Step5: samba 的後端資料庫

samba 的使用者帳號密碼除了可以存成 /etc/samba/smbpassword 的文字檔外,還可以將這些資料存成資料庫的形式,除了可以增加效能外還可以同步多台的 samba server 帳號密碼

  1. Plain Text
  2. smbpasswd – Encrypted Password Database
  3. tdbsam
  4. ldapsam

一般的 samba server 密碼是存在 /etc/samba/smbpasswd 中,它是一般的文字檔,對於較少使用者的 samba server 並不會有太大的問題,但是當使用者眾多時就會有以下的問題產生

  1. 查詢是循序進行,所以效能將會是瓶頸.
  2. 每一台 samba server 必須自己維護 smbpasswd 檔,當有多台 samba server 帳號的同步就是問題了.
  3. smbpasswd 檔的格式限制了每個使用者可以維護的屬性.這時就可以使用 LDAP 目錄來做身份驗證來解決以上的問題.
  4. MySQL
  5. XML

Step6:與 samba 相關的其他指令/檔案

與 samba 相關的指令

  1. nmblookup 查詢 NetBIOS 所對應的 IP addresses
    [root@benjr ~]# nmblookup unsvr
    querying  unsvr on 192.26.0.255
    192.26.0.1  unsvr
    
  2. smbstatus 查詢 samba server 分享資源被使用的情況
    [root@benjr ~] # smbstatus
    Samba version 2.2.7a
    Service      uid      gid      pid     machine
    ———————————————-
    IPC$         user     user      4596   sun01 (10.6.101.46) Tue Aug 12 14:27:14 2003
    IPC$         user1    user1     4591   sun01 (10.6.101.46) Tue Aug 12 14:25:04 2003
    No locked files
    
  3. testparm 測試 /etc/samba/smb.conf 檔案設定是否正確,有無拼錯字等問題.
    [root@benjr ~] # testparm /etc/samba/smb.conf
    Load smb config files from /etc/samba/smb.conf
    Processing section “[homes]"
    Processing section “[printers]"
    Loaded services file OK.
    Press enter to see a dump of your service definitions
    …………………略……………………….
    
  4. smbclient 查詢 samba server 提供哪些分享目錄
    [root@benjr ~]# smbclient -L unsvr
    Password:
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.2-6.3E]
    Sharename      Type      Comment
    ———      —-      ——-
    share          Disk
    tmp            Disk      Temporary file space
    IPC$           IPC       IPC Service (Samba Server)
    ADMIN$         IPC       IPC Service (Samba Server)
    Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.2-6.3E]
    Server               Comment
    ———            ——-
    UNSVR                Samba Server
    Workgroup            Master
    ———            ——-
    MYGROUP              UNSVR
    SUN                  SIT-82416EFAEF1
    
  5. smbmount 掛載 smaba 所提供的目錄
    [root@benjr ~] # smbmount //server/share /mnountpoint
    Password:
    

與 samba 相關的檔案

[root@benjr ~] # ls -l /etc/samba
total 24
-rw-r–r–    1 root     root           20 Apr 11  2002 lmhosts
-rw——-    1 root     root          696 Dec 16 11:30 secrets.tdb
-rw-r–r–    1 root     root        10999 Apr 11  2002 smb.conf
-rw——-    1 root     root           309 Apr 11  2002 smbpasswd
-rw-r–r–    1 root     root           97 Apr 11  2002 smbusers
  1. /etc/samba/smbpasswd 存放使用者登入 samba server 時所需的使用者帳號以及密碼
  2. /etc/samba/lmhosts 存放 NetBIOS name 與 IP 相對應關係
  3. /etc/samba/smb.conf samba 的設定檔
  4. /etc/samba/smbusers UNIX name 與 samb name 相對應關係
  5. /etc/samba/secrets.tdb 存放 samba 的密碼檔

這邊先不做說明,在後面的章節就會介紹到這些檔案的功能

發表迴響