Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,基於C/S架構。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通訊協議,它爲局域網內的不一樣計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機經過該協議能夠訪問服務器上的共享文件系統、打印機及其餘資源。經過設置「NetBIOS over TCP/IP」使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。linux
共享文件和打印,實如今線編輯ios
實現登陸SMB用戶的身份認證數據庫
能夠進行NetBIOS名稱解析編程
外圍設備共享vim
NETBIOS(Network Basic Input/Output System)協議是由IBM公司開發,主要用於數十臺計算機的小型局域網。該協議是一種在局域網上的程序可使用的應用程序編程接口(API),爲程序提供了請求低級服務的統一的命令集,做用是爲了給局域網提供網絡以及其餘特殊功能。系統能夠利用WINS服務、廣播及Lmhost文件等多種模式將NetBIOS名-——特指基於NETBIOS協議得到計算機名稱——解析爲相應IP地址,實現信息通信,因此在局域網內部使用NetBIOS協議能夠方便地實現消息通訊及資源的共享。windows
佔用系統資源少服務器
傳輸效率高網絡
CIFS 是一個新提出的協議,它使程序能夠訪問遠程Internet計算機上的文件並要求此計算機提供服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器得到請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在局域網上用於服務器文件訪問和打印的協議。像SMB協議同樣,CIFS在高層運行,而不像TCP/IP協議那樣運行在底層。CIFS能夠看作是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現。架構
訪問服務器本地文件並讀寫這些文件app
與其餘用戶一塊兒共享一些文件
在短線時自動回覆與網絡的鏈接
使用統一碼文件名
SMB(全稱是Server Message Block)是一個協議名,它能被用於Web鏈接和客戶端與服務器之間的信息溝通。SMB最初是IBM的貝瑞·費根鮑姆(Barry Feigenbaum)研製的,其目的是將DOS操做系統中的本地文件接口「中斷13」改造爲網絡文件系統。
samba | 提供smb服務 |
samba-client | 提供客戶端工具 |
samba-common | 通用軟件 |
cifs-utils | smb客戶端工具 |
samba-winbind | 和AD相關的包 |
/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
格式:
testparm [-s] {config filename} [hostname hostIP]
-I | 指定服務器的IP地址; |
-L | 顯示服務器端所分享出來的全部資源; |
-n | 指定用戶端所要使用的NetBIOS名稱; |
-N | 不用詢問密碼; |
-p | 指定服務器端TCP鏈接端口編號; |
-T | 備份服務器端分享的所有文件,並打包成tar格式的文件; |
-U<用戶名稱> | 指定用戶名稱; |
-w<工做羣組> | 指定工做羣組名稱。 |
-a | 向smbpasswd文件中添加用戶; |
-c | 指定samba的配置文件; |
-x | 從smbpasswd文件中刪除用戶; |
-d | 在smbpasswd文件中禁用指定的用戶; |
-e | 在smbpasswd文件中激活指定的用戶; |
-n | 將指定的用戶的密碼置空。 |
密碼文件存在在/var/lib/samba/private/passdb.tdb
-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用戶的帳號。 |
add:把指定用戶的用戶名和密碼加入內核密鑰環
在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/
建立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
彈出對話框輸入上述帳戶和密碼便可登陸
[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 #掛載成功
[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
[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
#使掛載生效
[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文件。