SAMBA

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,基於C/S架構。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通訊協議,它爲局域網內的不一樣計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機經過該協議能夠訪問服務器上的共享文件系統、打印機及其餘資源。經過設置「NetBIOS over TCP/IP」使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。linux

1、SAMAB基本概念

一、SMB的基本功能

  • 共享文件和打印,實如今線編輯ios

  • 實現登陸SMB用戶的身份認證數據庫

  • 能夠進行NetBIOS名稱解析編程

  • 外圍設備共享vim

二、SAMAB服務基於協議

(1)、NetBIOS協議

NETBIOS(Network Basic Input/Output System)協議是由IBM公司開發,主要用於數十臺計算機的小型局域網。該協議是一種在局域網上的程序可使用的應用程序編程接口(API),爲程序提供了請求低級服務的統一的命令集,做用是爲了給局域網提供網絡以及其餘特殊功能。系統能夠利用WINS服務、廣播及Lmhost文件等多種模式將NetBIOS名-——特指基於NETBIOS協議得到計算機名稱——解析爲相應IP地址,實現信息通信,因此在局域網內部使用NetBIOS協議能夠方便地實現消息通訊及資源的共享。windows

NetBIOS特色

  • 佔用系統資源少服務器

  • 傳輸效率高網絡

(2)CIFS協議

CIFS 是一個新提出的協議,它使程序能夠訪問遠程Internet計算機上的文件並要求此計算機提供服務。CIFS 使用客戶/服務器模式。客戶程序請求遠在服務器上的服務器程序爲它提供服務。服務器得到請求並返回響應。CIFS是公共的或開放的SMB協議版本,並由Microsoft使用。SMB協議在局域網上用於服務器文件訪問和打印的協議。像SMB協議同樣,CIFS在高層運行,而不像TCP/IP協議那樣運行在底層。CIFS能夠看作是應用程序協議如文件傳輸協議和超文本傳輸協議的一個實現。架構

CIFS協議功能

  • 訪問服務器本地文件並讀寫這些文件app

  • 與其餘用戶一塊兒共享一些文件

  • 在短線時自動回覆與網絡的鏈接

  • 使用統一碼文件名

(3)smb協議

SMB(全稱是Server Message Block)是一個協議名,它能被用於Web鏈接和客戶端與服務器之間的信息溝通。SMB最初是IBM的貝瑞·費根鮑姆(Barry Feigenbaum)研製的,其目的是將DOS操做系統中的本地文件接口「中斷13」改造爲網絡文件系統。

三、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

四、管理命令

(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:把指定用戶的用戶名和密碼加入內核密鑰環

2、實現共享

(1)實現linux爲客戶端,windows爲服務器端共享

在windows系統上建立一個共享目錄

選中目錄-->右擊點屬性-->共享

2017-10-18_104753.jpg

點擊圖中的用戶能夠設置權限

在linux客戶端查看

[root@localhost ~]# smbclient -L 192.168.4.1 -U joah%PASSWORD

2017-10-18_105307.jpg

[root@localhost ~]# smbclient //192.168.4.1/linuxclient -U joah

2017-10-18_105624.jpg

掛載此目錄

[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

2017-10-18_112436.jpg

彈出對話框輸入上述帳戶和密碼便可登陸

(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文件。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息