Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,基於C/S架構。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS over TCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。
一、SAMAB基本概念
1、SMB的基本功能
共享文件和打印,實現在線編輯
實現登錄SMB用戶的身份認證
可以進行NetBIOS名稱解析
外圍設備共享
2、SAMAB服務基於協議
(1)、NetBIOS協議
NETBIOS(Network Basic Input/Output System)協議是由IBM公司開發,主要用於數十臺計算機的小型局域網。該協議是一種在局域網上的程序可以使用的應用程序編程接口(API),爲程序提供了請求低級服務的統一的命令集,作用是爲了給局域網提供網絡以及其他特殊功能。系統可以利用WINS服務、廣播及Lmhost文件等多種模式將NetBIOS名-——特指基於NETBIOS協議獲得計算機名稱——解析爲相應IP地址,實現信息通訊,所以在局域網內部使用NetBIOS協議可以方便地實現消息通信及資源的共享。
NetBIOS特點
佔用系統資源少
傳輸效率高
(2)CIFS協議
CIFS 是一個新提出的協議,它使程序可以訪問遠程Internet計算機上的文件並要求此計算機提供服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器獲得請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在局域網上用於服務器文件訪問和打印的協議。像SMB協議一樣,CIFS在高層運行,而不像TCP/IP協議那樣運行在底層。CIFS可以看做是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現。
CIFS協議功能
訪問服務器本地文件並讀寫這些文件
與其他用戶一起共享一些文件
在短線時自動回覆與網絡的連接
使用統一碼文件名
(3)smb協議
SMB(全稱是Server Message Block)是一個協議名,它能被用於Web連接和客戶端與服務器之間的信息溝通。SMB最初是IBM的貝瑞·費根鮑姆(Barry Feigenbaum)研製的,其目的是將DOS操作系統中的本地文件接口“中斷13”改造爲網絡文件系統。
3、SAMBA服務文件介紹
(1)samba相關包介紹
samba | 提供smb服務 |
samba-client | 提供客戶端工具 |
samba-common | 通用軟件 |
cifs-utils | smb客戶端工具 |
samba-winbind | 和AD相關的包 |
(2)主配置文件/etc/samba/smb.conf
sbm.conf繼承了.ini(initialization)文件格式,用[]分成不同的部分。
配置文件分爲類
[global]:服務器通過或全局設置的部分
[homes]:用戶的家目錄共享
[printers]:定義打印機資源和服務
[SHARENAME]:自定義共享目錄配置
配置文件宏定義
%m | 客戶端主機的NetBIOS名 |
%M | 客戶端的FQDN |
%H | 當前用戶家目錄路徑 |
%U | 當前用戶用戶名 |
%g | 當前用戶所屬組 |
%h | samba服務器的主機名 |
%L | samba服務器的NetBIOS |
%I | 客戶端主機的IP |
%T | 當前日期和時間 |
%S | 可登錄的用戶名 |
配置文件選項
workgroup | 指定工作組名稱 |
server string | 主機註釋信息 |
netbios name | 指定NetBIOS名 |
interface | 指定服務監聽的接口和IP |
host allow | 指定允許指定主機訪問,如多個主機可以網段,離散可以使用“,”、空格或tab分離;或使用主機名;默允許所有主機訪問。示例192.168.4. |
config file=/PAHT/TO/SOMEFIEL/%U | 用戶獨立的配置文件 |
log file=/var/log/samba/log.%m | 不同主機採用不同日誌 |
max log size | 日誌文件大小,單位爲KB |
log level | 設置日誌級別 |
comment | 註釋信息 |
path | 所共享的目錄路徑 |
public = {yes或no} | 能否被guest訪問的共享,默認爲no |
guest ok = {yes或no} | 是否允許來賓賬號訪問 |
writable = {yes或no} | 是否可讀寫 |
read only = {yes或no} | 是否只讀,如果與writeable設置衝突,放在後面的設置生效 |
write list | 指定多個用戶是否可寫,格式:@GROUP_NAME、+GROUP_NAME或使用“,”分隔,如設置writable = no 列表中的用戶或組可讀寫,不在列表中的用戶只讀 |
vaild users | 特定用戶才能訪問此共享,如果設置爲空,將允許所有用戶;用戶名之間使用空格分隔 |
browsable = {yes或no} | 是否允許所有用戶列瀏覽此共享,默認爲yes |
create mask | 修改上傳權限 |
注意:如果是某個用戶對目錄有權限,此用戶必須有目錄權限和共享權限的交集。
服務腳本: /etc/rc.d/init.d/nmb /etc/rc.d/init.d/smb
4、管理命令
(1)testparm:檢查smb.conf文件是否正確
格式:
testparm [-s] {config filename} [hostname hostIP]
(2)smbclient 連接SMB/CIFS資源的命令
-I | 指定服務器的IP地址; |
-L | 顯示服務器端所分享出來的所有資源; |
-n | 指定用戶端所要使用的NetBIOS名稱; |
-N | 不用詢問密碼; |
-p | 指定服務器端TCP連接端口編號; |
-T | 備份服務器端分享的全部文件,並打包成tar格式的文件; |
-U<用戶名稱> | 指定用戶名稱; |
-w<工作羣組> | 指定工作羣組名稱。 |
(3)mount.cifs依賴於 cifs-utils包;掛載工具
(4)smbpasswd 設置smb用戶密碼
-a | 向smbpasswd文件中添加用戶; |
-c | 指定samba的配置文件; |
-x | 從smbpasswd文件中刪除用戶; |
-d | 在smbpasswd文件中禁用指定的用戶; |
-e | 在smbpasswd文件中激活指定的用戶; |
-n | 將指定的用戶的密碼置空。 |
密碼文件存在在/var/lib/samba/private/passdb.tdb
(5)pdbedit
-a username | 新建Samba賬戶。 |
-x username | 刪除Samba賬戶。 |
-L | 列出Samba用戶列表,讀取`/var/lib/samba/private/passdb.tdb數據庫文件。 |
-Lv | 列出Samba用戶列表的詳細信息。 |
-c “[D]” –u username | 暫停該Samba用戶的賬號。 |
-c “[]” –u username | 恢復該Samba用戶的賬號。 |
(6)cifscreds 管理NTLM在內核密鑰環中
add:把指定用戶的用戶名和密碼加入內核密鑰環
二、實現共享
(1)實現linux爲客戶端,windows爲服務器端共享
在windows系統上創建一個共享目錄
選中目錄-->右擊點屬性-->共享
點擊圖中的用戶可以設置權限
在linux客戶端查看
[root@localhost ~]# smbclient -L 192.168.4.1 -U joah%PASSWORD
[root@localhost ~]# smbclient //192.168.4.1/linuxclient -U joah
掛載此目錄
[root@localhost ~]# mount //192.168.4.1/linuxclient -o username=joah,password=PASSWORD /mnt/samba/
(2)實現linux作服務器端,windows作客戶端共享文件
創建smb賬號
[root@localhost ~]# useradd -r smb1
[root@localhost ~]# useradd -r smb2
[root@localhost ~]# useradd -r smb2
設置smb賬號密碼
[root@localhost ~]# smbpasswd -a smb1
[root@localhost ~]# smbpasswd -a smb2
[root@localhost ~]# smbpasswd -a smb3
使用命令查看
[root@localhost ~]# pdbedit -L
smb1:496:
smb3:494:
smb2:495:
創建共享目錄
[root@localhost ~]# vim /etc/samba/smb.conf
[sharewin]
comment = linux share
path = /app/smbshare
彈出對話框輸入上述賬戶和密碼即可登錄
(3)linux中實現不同用戶權限訪問共享目錄
創建共享目錄
[root@localhost ~]# mkdir /app/share{1,2,3}
[root@localhost ~]# chmod 777 /app/share{1,2,3}
並設置目錄權限
編輯配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
在全部設置下添加如下一行內容
config file = /etc/samba/conf.d/%U
創建每個用戶的配置文件
[root@localhost ~]# mkdir /etc/samba/conf.d
#創建指定配置文件存放位置
[root@localhost conf.d]# vim smb1
[share]
comment = share1
path = /app/share1
writeable = yes
[root@localhost conf.d]# vim smb2
[share]
comment = share2
path = /app/share2
[root@localhost conf.d]# vim smb3
[share]
comment = share3
path = /app/share3
重啓服務測試
[root@localhost conf.d]# service nmb restart ;service smb restart
在另一外linux主機上測試
[root@localhost ~]# smbclient -L //192.168.4.55 -U smb1%123456
[root@localhost ~]# smbclient //192.168.4.55/share -U smb1%magedu
掛載共享目錄在本地
[root@localhost smb]# mount //192.168.4.55/share /mnt/smb/ -o username=smb1,password=123456
實現開機自動掛載
[root@localhost smb]# vim /etc/fstab
//192.168.4.55/share /mnt/smb cifs username=smb1,password=magedu 0 0
如果我們這樣掛載的話,密碼直接暴露出來,顯然不安裝,我們可以將用戶和密碼寫到一個配置文件中
[root@localhost smb]# vim /etc/samba/userpasswd
username=smb1
password=123456
[root@localhost ~]# chmod 600 /etc/samba/userpasswd
#修改文件權限
[root@localhost ~]# vim /etc/fstab
//192.168.4.55/share /mnt/smb cifs credentials=/etc/samba/userpasswd 0 0
[root@localhost ~]# mount -a
#使掛載生效
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 50264772 1632864 46071908 4% /
tmpfs 502056 0 502056 0% /dev/shm
/dev/sda3 50264772 89224 47615548 1% /app
/dev/sda1 487652 35604 426448 8% /boot
/dev/sr0 3878870 3878870 0 100% /media/cdrom
//192.168.4.55/share 50264772 53092 47651680 1% /mnt/smb #掛載成功
(4)實現多用戶掛載(CentOS 7中可以啓用這種方法)
修改配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
[share]
comment = sharedirectory
path = /app/sharedir
write list = smb1 #設置只有smb1用戶具有寫權限
創建共享目錄並賦予權限
[root@localhost ~]# mkdir /app/sharedir
[root@localhost ~]# chmod 777 /app/sharedir
在客戶端創建與服務器端相同的賬號
注意:客戶端與服務器端必須有相同的用戶。
[root@localhost ~]# useradd smb1
[root@localhost ~]# useradd smb2
[root@localhost ~]# useradd smb3
使用smb3用戶掛載目錄
[root@localhost ~]# vim /etc/samba/userpasswd
username=smb3
password=123456
修改/etc/fstab
文件
[root@localhost ~]# vim /etc/fstab
//192.168.4.55/share /mnt/smb cifs multiuser,credentials=/etc/samba/userpasswd 0 0
//192.168.4.55/share /mnt/smb cifs credentials=/etc/samba/userpasswd,multiuser 0 0
credentials:用於指定包含掛載用戶信息文件
multiuser:用於指定使用多用戶掛載
[root@localhost ~]# mount -a
#使掛載生效
測試是否可以切換到smb1有寫權限
[root@localhost/mnt/smb]#su - smb1
[smb1@localhost~]$cifscreds add 192.168.4.55
Password:
[smb1@localhost~]$ls /mnt/smb/
anaconda-ks.cfg xx
至此就實現了多用戶掛載smb文件。