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:
- 使用廣播的方式傳遞資料,在遇到 Roter 時, Router 是會直接將此封包丟棄.原因是不能讓這種封包傳送到 InterNet 上,而產生無限封包.
- NetBEUI 屬於 data-link layer protocol (第2層,資料連結層) 所以 Windows 與 Linux 之間協定關聯如下圖所示
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
設定檔主要可以分成兩個區塊
- [global] 中主要設定整個 samba 系統的組態
- [share] 中都是要分享的檔案目錄以及印表機
其中的 [global] 的 security 決定身份驗證要由誰處理,samba 3.X 提供了五種安全等級可設定,那我們就來看看這五種不同模式的 samba server 要怎麼樣來與現有的 Windows 網域結合
-
Share Level Security : 不使用密碼做身份驗證
security = share
-
User Level Security : 本身這台 samba server 做身份驗證,這也是設定檔的預設值
security = user
-
Server Security : 交由其他台 Windows NT/2000/2003 或 samba server 做身份驗證
encrypt passwords = Yes security = server password server = "NetBIOS_name_of_a_DC"
-
Domain Security Mode : 身份驗證交由 Windows AD (Domain 為 mixed mode)或者由 Windows NT 4 處理
workgroup = "name_of_NT_domain" security = domain
-
ADS Security Mode: 身份驗證交由 Windows AD 處理(Domain 為 native mode)
realm = your.kerberos.REALM security = ADS ads server = your.kerberos.server
Step4. samba 的其他功能
詳細設定方式請參考各連結
- samba(PDC) :主要是將 samba server 模擬成 windows NT 4.X 的 PDC(Primary Domain Controller)
- samba(winbind) :winbind 是一個獨立 daman ,它主要是能讓 Linux 系統能取得 NT/AD 網域內使用者帳號來當做 Linux 的身份驗證.
- samba(ACL) : 一般由samba server 分享出來的檔案無法直接在 windows 的檔案總管中進行權限設定,必須要修改 /etc/samba/smb.conf 的分享權限.所以這邊是要介紹如何讓 samba server 分享的檔案可以直接經由 windows 的檔案總管來修改權限.
- samba(Join Domain) : Linux 可以藉由 samba server 去 join windows 網域,可以藉此來存取 windows 網域的資料
- smb.conf : 其他設定資料
Step5: samba 的後端資料庫
samba 的使用者帳號密碼除了可以存成 /etc/samba/smbpassword 的文字檔外,還可以將這些資料存成資料庫的形式,除了可以增加效能外還可以同步多台的 samba server 帳號密碼
- Plain Text
- smbpasswd – Encrypted Password Database
- tdbsam
- ldapsam
一般的 samba server 密碼是存在 /etc/samba/smbpasswd 中,它是一般的文字檔,對於較少使用者的 samba server 並不會有太大的問題,但是當使用者眾多時就會有以下的問題產生
- 查詢是循序進行,所以效能將會是瓶頸.
- 每一台 samba server 必須自己維護 smbpasswd 檔,當有多台 samba server 帳號的同步就是問題了.
- smbpasswd 檔的格式限制了每個使用者可以維護的屬性.這時就可以使用 LDAP 目錄來做身份驗證來解決以上的問題.
- MySQL
- XML
Step6:與 samba 相關的其他指令/檔案
與 samba 相關的指令
- nmblookup 查詢 NetBIOS 所對應的 IP addresses
[root@benjr ~]# nmblookup unsvr querying unsvr on 192.26.0.255 192.26.0.1 unsvr
- 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
- 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 …………………略……………………….
- 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
- 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
- /etc/samba/smbpasswd 存放使用者登入 samba server 時所需的使用者帳號以及密碼
- /etc/samba/lmhosts 存放 NetBIOS name 與 IP 相對應關係
- /etc/samba/smb.conf samba 的設定檔
- /etc/samba/smbusers UNIX name 與 samb name 相對應關係
- /etc/samba/secrets.tdb 存放 samba 的密碼檔
這邊先不做說明,在後面的章節就會介紹到這些檔案的功能