SAMBA

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-utilssmb客戶端工具
samba-winbind和AD相關的包

(2)主配置文件/etc/samba/smb.conf

sbm.conf繼承了.ini(initialization)文件格式,用[]分成不同的部分。

配置文件分爲類

  • [global]:服務器通過或全局設置的部分

  • [homes]:用戶的家目錄共享

  • [printers]:定義打印機資源和服務

  • [SHARENAME]:自定義共享目錄配置

配置文件宏定義

%m客戶端主機的NetBIOS名
%M客戶端的FQDN
%H當前用戶家目錄路徑
%U當前用戶用戶名
%g當前用戶所屬組
%hsamba服務器的主機名
%Lsamba服務器的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系統上創建一個共享目錄

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章