Samba服務器和FTP服務器都是資源共享的兩種文件服務器,但Samba服務器通常用於局域網共享,而FTP服務器則用與internet中,
Samba在linux/unix系統中實現了SMB/CIFS網絡協議,使的跨平臺文件共享變的更加方便,適用Samba可以很好的解決不同系統之間的文件互訪問題。
samba的工作原理:
步驟1協議協商:
客戶端在訪問Samba服務器時,發送negprot指令數據包,告知目標計算機其支持的SMB類型。Samba服務器根據客戶端的情況,選擇最優的SMB類型,並做出迴應。
--------negprot請求------->
客戶端 服務器
--------negprot響應------->
步驟2.建立連接
當SMB類型確認後,客戶端會發送session setup指令數據包,提交帳號和密碼,請求與Samba服務器建立連接,如果客戶端通過身份驗證,Samba服務器會對session setup報文作出迴應,併爲用戶分配唯一的UID,在客戶端與其通信時使用。
--------session setup &X請求------->
客戶端 服務器
--------session setup &X響應------->
步驟3.訪問共享資源
客戶端訪問Samba共享資源時,發送tree connect指令數據包,通知服務器需要訪問的共享資源名,如果設置允許,Samba服務器會爲每個客戶端與共享資源連接分配TID,客戶端即可訪問需要的共享資源哈。
--------tree connect &X請求------->
客戶端 服務器
--------tree connect &X響應------->
步驟4.斷開連接
共享使用完畢,客戶端向服務器發送tree disconnect報文關閉共享,與服務器斷開連接。
--------tree disconnect請求------->
客戶端 服務器
--------tree disconnect響應------->
下面我就來搭建下Samba文件服務器:(在這裏我忽略了防火牆,特簡單就是把udp137-138端口,tcp139端口和445端口開放就可以)
(一)掛載光盤並安裝Samba包:
[root@localhost Server]# mount /dev/cdrom /mnt/
安裝下面四個包: rpm -ivh samba-*
samba-3.0.28-0.el5.8.i386.rpm(samba服務器端包)
samba-common-3.0.28-0.el5.8.i386.rpm(samba C/S都需要適用的公共文件)
samba-client-3.0.28-0.el5.8.i386.rpm(samba客戶端包)
samba-swat-3.0.28-0.el5.8.i386.rpm(web方式管理工具包)
samba主配置文件分析:vim /etc/samba/smb.conf
# SELINUX NOTES:(selinux選項,特別要注意也是不可訪問原因之一)
#
# If you want to use the useradd/groupadd family of binaries please run:
# setsebool -P samba_domain_controller on
#
# If you want to share home directories via samba please run:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory you want to share you should mark it as
# "samba-share_t" so that selinux will let you write into it.
# Make sure not to do that on system directories as they may already have
# been marked with othe SELinux labels.
#
# Use ls -ldZ /path to see which context a directory has
#
# Set labels only on directories you created!
# To set a label use the following: chcon -t samba_share_t /path
[global] //全局設置對整個samba服務器生效
workgroup = MYGROUP //samba所在的 工作組或者是域
server string = Samba Server Version %v //服務器描述
; hosts allow = 127. 192.168.12. 192.168.13.
我把這注釋行也拿出來因爲我覺得這行非常重要,“hosts allow”可以設置僅允許訪問共享的客戶機(ip地址、網絡地址的形式,多個地址之間用空格或者是逗號隔開),“hosts deny”可以設置僅拒絕訪問共享的的客戶端。例如僅允許192.168.168.0/24、173.17.0.0/16網段客戶段訪問可以設置成:hosts allow =192.168.168. 173.17. 0.
security = user //設置服務器的安全模式其共有五種
這五種模式是:
1. share安全級別模式:可以匿名訪問
2. user安全級別模式:需要提交合法的用戶名和密碼
3. server安全級別模式:提交到指定的一臺samba服務器上進行驗證,如出錯客戶端就會一user級別訪問,
4.domain安全級別模式:驗證工作服將由windows域控制器負責
5. ads安全級別模式:當samba服務器使用ads安全級別加入到windows域環境中,其就具備了domain安全級別模式中所有的功能並可以具備域控制器的功能。
passdb backend = tdbsam
[homes]用戶目錄共享設置
comment = Home Directories(共享目錄的註釋和說明信息)
browseable = no(在網上鄰居中是否可見,如是no則是隱藏共享)
writable = yes(是否可寫,read only相反)
; valid users = %S(設置訪問用戶,@組名)
; valid users = MYDOMAIN\%S
[printers]
comment = All Printers //共享目錄的註釋和說明信息
path = /var/spool/samba //共享目錄在服務器中的路徑
browseable = no //在網上鄰居中是否可見,如是no則是隱藏共享
guest ok = no //是否可以匿名訪問
writable = no //是否可寫
printable = yes //每一個打印服務必須定義爲 printable = yes
案例一:將“/var/public/movies"目錄發佈爲共享文件夾,共享名爲movie(其實就是匿名訪問)
1.建立配置文件如下:
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
# logs split per machine
# max 50KB per log file, then rotate
security = share //將安全級別設置爲share
passdb backend = tdbsam
# the login script name depends on the machine name
# the login script name depends on the unix user used
# disables profiles support by specifing an empty path
load printers = yes
cups options = raw
#obtain list of printers automatically on SystemV
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[movie]
comment = this is a share file
path = /var/public/movies
browseable = yes
guest ok = yes
writable = yes
2.建立共享目錄:[root@ns1 samba]# mkdir -p /var/public/movies
爲了便於測試我們在目錄中建立多個文件mkdir /var/public/movies/{aa,bb,cc}.file //我們在此建立了aa,bb,cc文件
3.檢查配置文件格式是否正確:
[root@ns1 samba]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
說明配置沒有錯誤!!!
啓動samba服務:
[root@ns1 samba]# service smb restart
4因爲selinux爲強制,所以設置如下:
修改共享文件夾selinux上下文: chcon -t samba_share_t /var/public/movies/
5.在windowns下測試匿名效果:
我們剛纔不是在配置文件中設置writable = yes了嗎?我們測試下看我們能不能寫入??
結果是不能寫入!!!
原因在與網絡共享權限是有寫入權限了,但是本地權限中我查看了下只有執行和讀取,我們加寫入權限給本地目錄:
[root@ns1 ~]# chmod o+w /var/public/movies/
在看看結果:
匿名驗證成功了!!!
案例二:將“/var/public/movies"目錄發佈爲共享文件夾,共享名爲movie,授權只能vina、test1和root組訪問,並將test1用戶映射爲aa、bb等用戶,root用戶有寫入權限,通過訪問建立的文件夾的默認權限是744,文件夾的默認權限爲600
1.建立配置文件如下:
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
# logs split per machine
# max 50KB per log file, then rotate
security = user //設置安全級別爲user
passdb backend = tdbsam
# the login script name depends on the machine name
# the login script name depends on the unix user used
# disables profiles support by specifing an empty path
load printers = yes
cups options = raw
#obtain list of printers automatically on SystemV
username map = /etc/samba/smbusers //用戶名稱映射時必須由此項
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[movie]
comment = this is a share
path = /var/public/movies
guest ok = no //相當於是public,是否可以匿名訪問
read only = no
valid users = vina,test1,@root //授權用戶和組
write list = root // 設置只有root用戶可寫
directory mask = 0744 //建立文件夾的默認權限是744
create mask = 0600 // 創建文件的默認權限是600
檢查配置文件的格式是否正確:
[root@ns1 public]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
說明配置文件的格式上不存在任何問題!
2.建立samba用戶數據庫:
[root@ns1 public]# useradd vina
[root@ns1 public]# smbpasswd -a vina
New SMB password:
Retype new SMB password:
Added user vina.
------依次添加root等用戶
smbpasswd 參數:
-h顯示smbpasswd的幫助命令
-a添加指定的samba用戶
-d禁用指定的samba用戶
-e啓用指定的用戶帳號
-x刪除指定的用戶帳號
不加任何參數時是修改samba用戶密碼
3.做別名映射,將test1映射成aa,bb,cc等用戶
[root@ns1 samba]# vim smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
test1 = aa bb cc
4重新啓動服務:service smb restart
5驗證效果:(我剛開始服務器是192.168.0.1後來我改了服務器IP地址爲192.168.0.60~~)
vina登錄samba服務器
我們接下來在windowns上做測試,如果先是在windowns上做的必須斷開共享:
C:\Users\jia>net use file://192.168.0.60/movie /delete
\\192.168.0.60\movie 已經刪除。
用root登錄:
可以創建文件和文件夾,在來看看文件和文件夾的權限:
哈哈~文件夾默認權限的權限是744,文件默認權限是600,成功了!!
接下來驗證名稱映射:(注意別名aa和bb等不是系統中的用戶)
aa登錄
aa登錄成功!
bb登錄
bb登錄成功
到此就做完了實現了案例中的描述~~