Linux網絡服務-SAMBA
1. Samba 概述
SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同操作系統的計算機之間提供文件及打印機等資源的共享服務。SMB 協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。如圖:
爲什麼要講 SAMBA?
ftp 的優缺點:
優點:文件傳輸、應用層協議、可跨平臺
缺點:只能實現文件傳輸,無法實現文件系統掛載;無法直接修改服務器端文件
Samba 的特性:
使用 smb/cifs 協議、可跨平臺、可實現文件系統掛載、可實現服務器端修改文件
注意:
ftp和Samba用的用戶都是來自passwd(/etc/passwd),ftp用的密碼是shadow(/etc/shadow),Samba用的密碼是passdb.tdb(/var/lib/samba/private/passdb.tdb)。
smb 協議和 cifs 之間的關係
隨着 Internet 的流行,Microsoft 希望將這個協議擴展到 Internet 上去,成爲 Internet 上計算機之間相互共享數據的一種標準。因此它將原有的幾乎沒有多少技術文檔的 SMB協議進行整理,重新命名爲 CIFS(Common Internet FileSystem),它使程序可以訪問遠程 Internet 計算機上的文件並要求此計算機提供服務。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器獲得請求並返回響應。CIFS 是公共的或開放的 SMB 協議版本,並由 Microsoft 使用。
SMB 協議在局域網上用於服務器文件訪問和打印的協議。
2. Samba 服務詳解
Samba 軟件相關信息
1. 協議:SMB/CIFS
2. 服務:
smb 實現資源共享、權限驗證 TCP 139 445
3. 配置文件(/etc/samba/)
smb.conf 主配置文件
smbusers 別名配置文件
登錄驗證模式(安全級別)
◆ share 匿名驗證
◆ user 本地用戶驗證(Samba服務器默認的安全級別,用戶在訪問共享資源之前必須提供用戶名和密碼進行驗證)
拓展:tdbsam:該方式是使用一個數據庫文件來驗證。數據庫文件叫passdb.tdb。可以通過pdbedit -a 向數據庫中添加新用戶,不過要建立的Samba用戶必須先是系統用戶。也可以理解爲我們使用pdbedit -a 將系統用戶轉化爲了samba用戶。pdbedit命令的參數很多,列出幾個主要的。
pdbedit -a username:新建Samba賬戶(將系統用戶轉化爲samba用戶,並設置密碼)
pdbedit -x username:刪除Samba賬戶
pdbedit -L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
◆ 別名用戶訪問(虛擬用戶)
常見配置參數解釋
[global]用於定義Samba服務器的總體特性,其配置項對所有共享資源生效
workgroup = WORKGROUP
#設定 Samba Server 所要加入的工作組或者域。
server string = Samba Server Version %v
#設定 Samba Server 的註釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。
interfaces = lo eth0 192.168.12.2/24
#設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1
#表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。
hosts deny 與hosts allow 剛好相反(二選一)。
例如:
hosts allow=172.17.2. EXCEPT172.17.2.50
表示容許來自172.17.2.*.*的主機連接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容許來自172.17.2.0/255.255.0.0子網中的所有主機連接
log file = /var/log/samba/log.%m
#設置Samba Server日誌文件的存儲位置以及日誌文件名稱。在文件名後加個宏%m(主機名),表示對每臺訪問Samba Server的機器都單獨記錄一個日誌文件。
max log size = 50
#設置Samba Server日誌文件的最大容量,單位爲kB,0代表不限制
security = user
#設置用戶訪問Samba Server的驗證方式。
passdb backend = tdbsam
load printers = yes/no
#設置是否在啓動Samba時就共享打印機
[homes]用於設置用戶宿主目錄的共享屬性(特殊共享)
[homes] #共享名(特殊共享,泛指每個用戶對應的家目錄)
comment = Home Directories #共享描述
browseable = no #共享是否可被查看
writable = yes #共享是否可寫
;valid users = %S #允許訪問該共享的用戶
例如:valid users = bob,@bob(多個用戶或者組中間用逗號隔開,如果要加入一個組就用“@組名”表示。)
[printers]用於設置打印機共享資源的屬性(特殊共享,共享打印設備,現在基本不用)
[printers] #共享名
comment = All Printers #共享描述
path = /var/spool/samba #共享路徑
browseable = no #共享是否可被查看
guest ok = no #是否可以匿名訪問,類似於public
writable = no #是否可寫
printable = yes #是否可以打印
[自定義]自定義共享區域
[自定義] #共享名
comment = the share is xbz #共享描述
path = /share/zdy #共享路徑
public = yes #是否可以匿名訪問,類似於guest ok
browseable = yes #共享是否可被查看
writable = yes #是否可寫(同時設置目錄的W)
配置文件檢查工具
testparm :若顯示"Loaded services file OK."信息表示配置文件的語法是正確的
-v:顯示samba所支持的所有選項
訪問控制
寫入權限的控制方式(類似於vsftp的限制方式):
◆ 配置文件開啓,文件系統嚴格控制(儘量採用這種)
writable = yes
setfacl 或 chmod 777
◆ 文件系統開啓,配置文件嚴格控制
chmod 777 /dir
read only = yes
write list = 用戶,@組
服務啓動管理
◆ 啓動、停止、重新啓動和重新加載Samba服務
service smb start|stop|restart|reload
◆ 開機自動啓動samba服務
chkconfig --level 2345 smb on|off
客戶端登錄方式
Linux 端:
smbclient -U 用戶名 -L //服務器 IP #查看服務器共享
smbclient -U 用戶名 //服務器 ip/共享名 #登錄服務器共享
Window 端
\\服務器 ip\共享名
net use * /del #清空登錄緩存
注意:在客戶端登錄訪問Samba服務器的時候,smbclient -U 用戶名 //服務器 ip/共享名,ip後面填的是共享名,而不是共享路徑!
比如:配置共享如下,
[hello_smb]
comment = hello smb
path = /share/smb_share
public = yes
browseable = yes
writable = yes
訪問的時候,如果按照 smbclient -U zhangsan //172.0.20.88/share/smb_share ,這樣就會報錯tree connect failed: NT_STATUS_BAD_NETWORK_NAME。正確的訪問方式應該是:smbclient -U zhangsan //172.0.20.88/hello_smb。
補充一點,tree connect failed: NT_STATUS_ACCESS_DENIED,這種類型的報錯是權限引起的,比如valid users沒有添加用戶,還使用該用戶去訪問就會報錯;還有,如果文件系統沒有給目錄對應的權限,訪問也會報錯。
3. samba 部署與實驗
注:先關閉服務器和客戶機上的防火牆和 SELinux
部署流程:
1. 服務器端安裝 samba
yum -y install samba
2. 確認客戶端和相關命令軟件包是否安裝(默認是安裝的)
rpm -q samba-client
rpm -q samba-common
3. 創建共享區域
備份主配置文件
創建獨立的共享區間(仿照模板編寫)
4. 啓動 smb 服務並查看默認共享區域
a、service smb start
b、smbclient -U 用戶名 -L smbserverIP
本地驗證(登錄、上傳、下載)
a、 修改配置文件(添加自定義共享)
[自定義]
comment = the share is xbz
path = /share/zdy
public = yes
browseable = yes
writable = yes
b、 創建共享目錄並給定相應權限
mkdir /share/zdy
chmod 777 /share/zdy #最好使用 ACL 權限
c、 測試配置文件並重啓服務
testparm
service smb restart
d、 首先,創建 Linux 用戶
useradd -s /sbin/nologin zhangsan
passwd zhangsan #不需要創建系統密碼
e、 轉換爲 samba 用戶
pdbedit -a zhangsan
f、 客戶端查看共享文件夾並登錄測試
smbcient -U zhangsan –L //IP 地址
smbclient –U zhangsan //IP 地址/共享名
注:由於未設置上傳文件的默認權限,指定用戶上傳的文件只有自己能修改和覆蓋。
訪問控制 - 通過配置限制
valid users 僅允許部分用戶訪問共享區域
部分用戶登錄 samba 服務器
修改/etc/samba/smb.conf 中自定義的共享區域
添加:設置合法用戶列表
valid users = 用戶,@組(多個逗號分隔)
部分用戶對共享區域有寫權限
修改/etc/samba/smb.conf 中自定義的共享區域
添加:開啓只讀,設置可寫列表
注:前提條件是指定目錄權限給到最大,通過修改配置文件來實現實驗結果
read only = yes
write list = lisi
設置上傳文件的默認權限
create mask 文件的默認權限
directory mask 目錄的默認權限
修改配置文件自定義的共享區域
添加:
create mask = 666
directory mask = 777
用戶別名(虛擬用戶)
1) 添加別名(/etc/samba/smbusers),沒有這個文件就創建
添加:
zhangsan = zs
2) 啓用別名(修改主配置文件)
vim /etc/samba/smb.conf
添加(最好在[global]中添加):
username map = /etc/samba/smbusers
3)測試
smbclient -U 別名 //服務器 ip/共享名
映射網絡驅動器(掛載)
Linux 下:
臨時掛載:
mount -t cifs -o username=xxx,password=xxx //服務器 ip/服務器共享 /本地掛載目錄
永久掛載:/etc/fstab
//服務器 ip/服務器共享 /本地掛載目錄 cifs defaults,username=xxx,password=xxx 0 0
Window 下:
我的電腦、計算機、此電腦、這臺電腦等右鍵映射網絡驅動器【注意是反斜槓 \ 】
圖形化 web 管理界面(不重要)
1. 安裝(導入安裝包,這裏不提供安裝包,因爲linux版本不一樣,安裝包也不一樣,主要就是samba-swat和xinetd兩個服務)
使用 yum -y install * 安裝所有上傳的 rpm 包
2. 修改/etc/xinetd.d/swat
添加:
only_from = 登錄來源 IP
disable = no
3. 重啓 xinetd 服務
service xinetd restart
4. 測試
瀏覽器:IP:901 #登錄時注意端口號