Samba服務簡介
Samba的起源:
對於windows的網上鄰居來講,共享文件的方式用的是SMB和CIFS協議以及NETBIOS協議Linux/Unix之間用的是NFS協議。
但是Linux和Windows之間是不能共享的,所以澳大利亞國立大學的Andrew Tridgell,決定開發一款軟件,這款軟件就是為了實現不同的系統之間互相共享文件的,於是一款叫做SMB的軟件橫空出世了,但是這個名字不能被注冊成商標,因為已經有SMB協議了,於是作者給名字上加了兩個A,就成了我們即將使用的功能強的文件共享服務器: SAMBA。
什么是Samba:
Samba是一個能讓Linux系統應用Microsoft網絡通訊協議的軟件,而SMB是Server Message Block的縮寫,即為服務器消息塊 ,SMB主要是作為Microsoft的網絡通訊協議,后來Samba將SMB通信協議應用到了Linux系統上,就形成了現在的Samba軟件。后來微軟又把 SMB 改名為 CIFS(Common Internet File System),即公共 Internet 文件系統,並且加入了許多新的功能,這樣一來,使得Samba具有了更強大的功能。
Samba的功能:
Samba最大的功能就是可以用於Linux與windows系統直接的文件共享和打印共享,Samba既可以用於windows與Linux之間的文件共享,也可以用於Linux與Linux之間的資源共享,由於NFS(網絡文件系統)可以很好的完成Linux與Linux之間的數據共享,因而 Samba較多的用在了Linux與windows之間的數據共享上面。
Samba的工作原理:
SMB是基於客戶機/服務器型的協議,因而一台Samba服務器既可以充當文件共享服務器,也可以充當一個Samba的客戶端,例如,一台在Linux 下已經架設好的Samba服務器,windows客戶端就可以通過SMB協議共享Samba服務器上的資源文件,同時,Samba服務器也可以訪問網絡中 其它windows系統或者Linux系統共享出來的文件。
事實上, 就像 NFS 是架構在 RPC Server 上面一樣, SAMBA 這個文件系統是架構在 NetBIOS (Network Basic Input/Output System, NetBIOS) 這個通訊協議上面所開發出來的。
Samba在windows下使用的是NetBIOS協議,如果你要使用Linux下共享出來的文件,請確認你的windows系統下是否安裝了NetBIOS協議。
組成Samba運行的有兩個服務,一個是SMB,另一個是NMB;SMB是Samba 的核心啟動服務,主要負責建立 Linux Samba服務器與Samba客戶機之間的對話, 驗證用戶身份並提供對文件和打印系統的訪問,只有SMB服務啟動,才能實現文件的共享,監聽139 TCP端口;而NMB服務是負責解析用的,類似與DNS實現的功能,NMB可以把Linux系統共享的工作組名稱與其IP對應起來,如果NMB服務沒有啟動,就只能通過IP來訪問共享文件,監聽137和138 UDP端口。
Samba使用的 damons:
NetBIOS 機器間的溝通
取得對方主機的NetBIOS name 定位該主機所在:
利用對方給予權限存取可用資源
SAMBA 使用下面兩個服務來控制上面兩步驟,分別是:
nmbd
這個daemon是用來管理工作組,NetBIOS name等等的解析。
主要利用 UDP 協議開啟 port 137 138 來負責名稱解析的任務。
smbd
這個daemon主要用來管理SAMBA主機分享的目錄,檔案與打印機等等。
主要利用可靠的TCP協議來傳輸數據,開放端口為139.
所以SAMBA每次啟動至少都需要有這個daemon,而當我啟動了SAMBA之后,主機系統就會啟動137,138 這兩個UDP 及139這個TCP端口。
Samba聯機模式介紹:
兩種最常見的局域網的聯機模式
peer/peer(對等模式)
domain model(主控模式)
(1)peer/peer (workgroup model,對等模式)
圖:對等模式原理
使用 peer/peer 的架構的好處是每部計算機均可以獨立運作,而不受他人的影響!不過, 缺點就是當整個網域內的所有人員都要進行數據分享時,光是知道所有計算機里面的賬號與密碼,就會很傷腦筋了! 所以, Peer/Peer 的架構是比較適合 :
1、小型的網域
2、沒有需要常常進行檔案數據分享的網絡環境
3、每個使用者都獨自擁有該計算機的擁有權
(2)domain model(主控模式)
圖:主控模式原理
將所有的賬號與密碼都放置在一部主控計算機 (Primary Domain Controller, PDC) 上面,在我的網域里面,任何人想要使用任何計算機時,都需要在屏幕前方輸入賬號與密碼,然后通通藉由 PDC 服務器的辨識后,才給予適當的權限。也就是說,不同的身份還具有不一樣的計算機資源權限。
Samba的常見應用:
Samba能做什么?
1、分享檔案與打印機服務
2、可以提供用戶登入Samba主機時的身份認證,以提供不同身份者的個別數據。
3、可以進行windows網絡上的主機名解析
4、可以進行裝置的分享
Samba服務器的應用實例:
1、利用軟件直接編修WWW主機上面的網頁數據
用FTP修改,后上傳;不方便,很有可能傳上去舊版本的。
在線修改比較能迅速看到結果。
2、做成可直接聯機的文件服務器
因為每個人登陸的賬戶名不同,這樣對目錄的權限也不同,實現權限控制。
Samba服務器的搭建
一、安裝軟件
yum -y install samba samba-common samba-client
二、主要相關文件
/etc/samba/smb.conf samba的主要配置文件
/etc/samba/smbusers samba的用戶別名,比如可以將root用別名administrator、admin代替等(作用:可以只告知samba用戶該別名,這樣可以保護真實的samba服務器/etc/passwd的用戶不泄漏)
/etc/samba/lmhosts samba的IP和域名對應,類似/etc/hosts文件功能
/etc/samba/smbpasswd 該文件為手動創建,用於存放samba用戶及密碼
三、smb.conf主要說明
[global]
workgroup = WORKGROUP
//說明:指明共享所在的工作組,可以是NT域名、工作組名
server string = samba server on Centos
//說明:客戶端看到的服務器的描述信息
netbios name = centos_smb
//說明:設置Samba Server的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了
interfaces = lo eth0
//說明:設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址
hosts allow = 192.168.1. 0/255.255.255.0
//說明:表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。我這里允許192.168.1.0網段里的所有客戶端訪問samba server。(注釋掉表示允許所有IP)
security = user
//說明:設置用戶訪問Samba Server的驗證方式,一共有四種驗證方式。
1. share:用戶訪問Samba Server不需要提供用戶名和口令, 安全性能較低。
2. user:Samba Server共享目錄只能被授權的用戶訪問,由Samba Server負責檢查賬號和密碼的正確性。賬號和密碼要在本Samba Server中建立。
3. server:依靠其他Windows NT/2000或Samba Server來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows用戶和口令集中到一個NT系統上,使用Windows NT進行Samba認證, 遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作為替代的方式。
4. domain:域安全級別,使用主域控制器(PDC)來完成認證。
我只需要user級別的安全驗證就可以了。
username map = /etc/samba/smbusers
//說明:用來定義用戶名映射,比如可以將root換成administrator、admin等。要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,以保護Linux的系統賬號root。后面會介紹這個文件
encrypt passwords = true
//說明:是否將認證密碼加密。因為現在windows操作系統都是使用加密密碼,所以一般要開啟此項。
passdb backend = smbpasswd
//說明:passdb backend密碼驗證后端。目前支持的有三種:smbpasswd、tdbsam和ldapsam。其中smbpasswd方式是使用smb自己的工具smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件。這里我選用smbpasswd。
smb passwd file =/etc/samba/smbpasswd
//說明:用來定義samba用戶的密碼文件。smbpasswd文件如果默認不存在,要手工新建。
log file = /var/log/samba/log.%m
//說明:設定 samba server 日志文件的儲存位置和文件名(%m代表客戶端主機名)。
max open files = 1000
//說明:同一客戶最多能打開的文件數目
socket options = TCP_NODELAY
//說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。
[xxxxx] 共享目錄
//說明:xxxxx表示共享名
comment = code string
//說明:comment是對該共享的描述,可以是任意字符串。
path = /home/songyd/code
//說明:path用來指定共享目錄的路徑。
writable = yes
//說明:writable用來指定該共享路徑是否可寫。這里我們允許寫入,以滿足文件雙向共享。
writelist = mysql, jack
//說明:只允許mysql和jack2個用戶對此資源可以寫,其他的為read only
browseable = yes
//說明:browseable用來指定該共享是否可以瀏覽。
available = yes
//說明:available用來指定該共享資源是否可用。
guest ok = no
//說明:是否允許允許來賓訪問
read only = yes
//說明:設置權限為只讀權限
public = no
//說明:共享目錄允許所有用戶訪問及上傳文件
valid users = jack sunny
//說明:只允許jack sunny訪問該共享資源
四、一個完整的smb.conf實例
[global]
workgroup = WORKGROUP
server string = samba server on Version %v
netbios name = centos_smb
interfaces = lo eth0
#hosts allow = 192.168.16.0/255.255.255.0
security = user
username map = /etc/samba/smbusers
encrypt passwords = true
passdb backend = smbpasswd
smb passwd file =/etc/samba/smbpasswd
log file = /var/log/samba/log.%m
max open files = 1000
socket options = TCP_NODELAY
[webfile]
comment = frontend web
path = /home/wwwroot/frontend/web
browseable = yes
writable = yes
create mask = 0664
directory mask = 0755
guest ok = no
public = no
available = yes
五、新建samba用戶
smbpasswd -a mysql (mysql為/etc/passwd下存在的用戶,不存在會報錯)
New SMB password:
Retype new SMB password:
Added user mysql.
輸入完該samba用戶密碼后,會在/etc/samba/smbpasswd文件生成mysql用戶密碼信息,如果不想讓samba用戶使用mysql作為samba用戶名訪問的話,則可以在/etc/samba/smbusers 設置改用戶別名,如下寫出了添加mysql后的smbpasswd文件和smbusers文件信息
[root@nginx samba]# cat smbpasswd
mysql:500:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:FDB5CFC19C8AC660A21CA41FE95E7D8:[U ]:LCT-5874994E:
[root@nginx samba]# cat smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
mysql = sql (samba用戶可以使用sql作為samba帳號來訪問samba服務器)
六、重啟、啟動samba
service smb start
service nmb start (nmb作用是netbios,可以使用主機名方式訪問samba)