Samba服務概述、配置、及其搭建


這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於CSDN,作者IDYS
博客首頁:https://blog.csdn.net/weixin_41633902/
本文鏈接:https://blog.csdn.net/weixin_41633902/article/details/105887470


寫在開頭的話

  • 請記住:實踐是掌握知識的最快方法
  • 如果你只是懷着看看的態度去快速瀏覽文章,而不去認認真真的把文章裏面講的任何一個知識點去實踐一遍,那麼你永遠也掌握不了它
  • 生命不息,折騰不止!

Samba 概述

  • SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同操作系統的計算機之間提供文件及打印機等資源的共享服務。SMB 協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。如圖:

在這裏插入圖片描述

Windows上可使用 Serv-U軟件使Windows成爲FTP服務器端


Samba與FTP的區別

ftp 的優缺點:

  • 優點:文件傳輸、應用層協議、可跨平臺(能通過外網進行傳輸)
  • 缺點:只能實現文件傳輸,無法實現文件系統掛載(就是無法將服務端共享文件的位置映射到本地磁盤);無法直接修改服務器端文件(只能通過修改ftp的配置文件讓ftp服務器端可以被修改,然後先將文件下載至本地,在本地修改完文件後,再上傳至ftp服務器端,實現服務器端文件的修改)

Samba 的特性:

  • 使用 smb/cifs 協議、可跨平臺(Windows、Unix、Linux都可以使用)、可實現文件系統掛載、可實現服務器端修改文件(通過將共享文件映射到本地磁盤,可以實現文件在本地的實時修改,而不必先將文件下載,然後修改上傳去實現服務器端文件的修改)

smb 協議和 cifs 之間的關係

  • 隨着 Internet 的流行,Microsoft 希望將這個協議擴展到 Internet 上去,成爲 Internet 上計算機之間相互共享 數據的一種標準。因此它將原有的幾乎沒有多少技術文檔的 SMB 協議進行整理,重新命名爲CIFS(Common Internet File System),它使程序可以訪問遠程 Internet 計算機上的文件並要求此計算機提供服務。客戶程序請求遠在服務器上的 服務器程序爲它提供服務。服務器獲得請求並返回響應。CIFS 是公共的或開放的 SMB 協議版本,並由 Microsoft 使用。 SMB 協議在局域網上用於服務器文件訪問和打印的協議。(cifs使其能夠在互聯網傳輸)

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用戶的密碼),不過要建立的Samba用戶必須先是系統用戶。也可以理解爲我們使用pdbedit -a 將系統用戶轉化爲了samba 用戶。pdbedit命令的參數很多,列出幾個主要的。

  • pdbedit -a username:新建Samba賬戶(將系統用戶轉化爲samba用戶,並設置密碼)
  • pdbedit -x username:刪除Samba賬戶
  • pdbedit -L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。
  • pdbedit -c “[D]” -u username:暫停該Samba用戶賬號
  • pdbedit -c “[]” -u username:恢復該Samba用戶賬號。
  • pdbedit -Lv:列出Samba用戶列表詳細信息

注意:samba用戶的密碼存儲於 passdb.tdb中,而系統用戶的密碼儲存於/etc/shadow中,所以samba的密碼並不是系統用戶的密碼,但是samba服務本地用戶驗證方式所建立的用戶必須是系統中存在的用戶,可以理解爲samba和系統共用 /etc/passwd這個用戶文件

  • 別名用戶訪問(虛擬用戶)

Samba服務搭建

  • 本次實驗採用Linux作爲Samba服務的服務器端,Windows作爲Samba服務的客戶端

Windows安裝Samba client服務

  • 因爲Windows默認是沒有安裝Samba服務的,所以在做實驗之前我們應該先安裝上Samba服務的客戶端,以下爲Windows安裝Samba服務的步驟
  1. 輸入快捷鍵 【Win+R】 召喚出一個窗口,然後在窗口裏面輸入control

在這裏插入圖片描述

  1. 點擊【程序

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WOmwel9l-1588386456617)(.\images\程序.png)]

  1. 點擊【啓用或者關閉Windows功能

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sX3XngKS-1588386456619)(.\images\啓用或者關閉windows功能.png)]

  1. 開啓【Samba Client功能

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1cmPjT7d-1588386456621)(.\images\smaba_client.png)]

  1. 重啓

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xqM3WQdk-1588386456623)(.\images\重啓.png)]

現在就完成了Windows添加Samba client服務功能了


Linux安裝配置Samba服務

  1. 利用yum安裝Samba服務
[root@dayuanshuai ~]# yum -y install samba
  1. 開啓Samba服務
[root@dayuanshuai ~]# service smb start  
啓動 SMB 服務:                                            [確定]
  1. 採用本地用戶驗證方式】:Linux上創建一個用戶,使其不能登錄Linux系統(此用戶爲Samba服務驗證登錄而創建),然後爲該用戶設置Samba用戶密碼
# 添加系統用戶
[root@dayuanshuai ~]# useradd -s /sbin/nologin test1

# 添加Samba用戶密碼
[root@dayuanshuai ~]# pdbedit -a test1
new password:
retype new password:
Unix username:        IDYS
NT username:          
Account Flags:        [U          ]
User SID:             *********************************************
Primary Group SID:    *********************************************

查看Linux網卡地址
[root@dayuanshuai ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr *****************  
          inet addr:192.168.200.135  Bcast:192.168.200.255  Mask:255.255.255.0

# 關閉防火牆
[root@dayuanshuai /]# service iptables stop
iptables:將鏈設置爲政策 ACCEPT:filter                    [確定]
iptables:清除防火牆規則:                                 [確定]
iptables:正在卸載模塊:                                   [確定]

# 查看SElinux的狀態
[root@dayuanshuai /]# getenforce 
Enforcing

# 將SELinux狀態設置爲permissive
[root@dayuanshuai /]# setenforce 0

# 再次查看狀態
[root@dayuanshuai /]# getenforce 
Permissive

注意:因爲我們現在是在做實驗,不是在生產環境中,所以爲了防止不必要的干擾,請關閉防火牆和SELinux


報錯解決

  • 關於使用Windows訪問Smaba時,提示:您沒有權限訪問YOUR_IP_ADDRESS,請與管理員聯繫,請求訪問權限的問題

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-N1B6J20z-1588386456624)(.\images\沒有權限防火提示.png)]

  1. 關閉防火牆,SELinux
# 關閉防火牆
[root@dayuanshuai /]# service iptables stop
iptables:將鏈設置爲政策 ACCEPT:filter                    [確定]
iptables:清除防火牆規則:                                 [確定]
iptables:正在卸載模塊:                                   [確定]

# 查看SElinux的狀態
[root@dayuanshuai /]# getenforce 
Enforcing

# 將SELinux狀態設置爲permissive
[root@dayuanshuai /]# setenforce 0

# 再次查看狀態
[root@dayuanshuai /]# getenforce 
Permissive
  1. 因爲當用戶使用用戶名和密碼訪問Samba服務器端後,Windows會保存此賬戶密碼信息,以至於下次再次登陸Samba服務器端時,不需要再次輸入賬戶密碼。直接使用之前保存的賬戶名和密碼。而如果你在服務器端裏面將原來Windows訪問samba服務端時對應的賬戶名密碼刪除了,而Windows還是使用之前保存的用戶名和密碼進行登錄,所以會提示沒有權限訪問(因爲samba服務端已經刪除了對應的用戶名和密碼,所以找不到Windows發來的賬戶密碼信息,然後就會拒絕訪問)。這時Windows需要清除原來保存的信息。
  • 覆盤演示過程,首先Windows是可以直接訪問Linux的Samba服務的

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Hrsj25BC-1588386456625)(.\images\現在顯示可以登錄.png)]

  • 然後我在Linux上刪除該系統用戶,同時也在samba用戶裏面刪除
# 刪除Smaba用戶
[root@dayuanshuai /]#     pdbedit -x test1

# 刪除該用戶時,提示該用戶正在9115號進程運行
[root@dayuanshuai /]# userdel -r test1
userdel: user test1 is currently used by process 9115

# 強制終止該經常
[root@dayuanshuai /]# kill -9 9115

# 繼續刪除該用戶
[root@dayuanshuai /]# userdel -r test1

# 查看該用戶是否刪除
[root@dayuanshuai /]# cat /etc/passwd | grep test1
  • 繼續在Windows上訪問該smaba服務器,可以看到此時提示沒有權限訪問

在這裏插入圖片描述

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QJeItY71-1588386456627)(.\images\2.提示沒有權限訪問.png)]

  • 在Linux上添加Samba用戶
# 添加系統用戶
[root@dayuanshuai /]# useradd -s /sbin/nologin test2

# 添加Smaba用戶,並設置密碼
[root@dayuanshuai /]# pdbedit -a test2
new password:
retype new password:
Unix username:        test2
NT username:          
.......... #下面顯示的信息省略

-【 Win+R】輸入cmd,然後在Windows上清空保存的samba用戶信息,輸入net use * /del/y即可清空

先 【Win+R】然後輸入cmd,進入命令行界面

# 輸入net use * /del/y
C:\Users\dayuanshuai>net use * /del /y
你有以下的遠程連接:

                    \\192.168.200.135\IPC$
繼續運行會取消連接。

命令成功完成。
  • 之後【Win+e】,再次在上面的顯示框裏輸入\\192.168.200.135,然後就會要求你輸入用戶名密碼,輸入之後可以進入了samba服務器端了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hmombt4A-1588386456629)(.\images\3.輸入ip地址.png)]

輸入用戶名密碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0fDYecDX-1588386456630)(.\images\4.輸入用戶名及其密碼.png)]

登錄成功

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-j91lPYg5-1588386456631)(D:\Users\dayuanshuai\Desktop\學習\linux服務\samba服務概述、配置、及其搭建\images\5.登錄成功.png)]

Windows建立磁盤映射

  1. Windows右擊【此電腦】圖標,選擇【映射網絡驅動器】.

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YFCEyP6D-1588466446900)(.\images\6.映射網絡驅動器.png)]

  1. 填寫Smaba服務器端的IP地址加上Samba用戶名

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-k5wyJiGw-1588466446904)(.\images\7.填寫格式.png)]

  1. Win+E】查看Samba網絡磁盤

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tN6dy9wi-1588466446906)(.\images\8.成功.png)]


Smaba參數配置

[global]

[global]用於定義Samba服務器的總體特性,其配置項對所有共享資源生效

  1. workgroup = WORKGROUP:設定 Samba Server 所要加入的工作組或者域

  2. server string = Samba Server Version %v:設定 Samba Server 的註釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。

  3. interfaces = lo eth0 192.168.12.2/24:設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。

  4. hosts allow = 127. 192.168.1. 192.168.10.1 :表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。 hosts denyhosts allow 剛好相反(只能二選其一)。

例如:hosts allow=172.17.2. EXCEPT172.17.2.50 表示容許來自172.17.2.*的主機連接,但排除172.17.2.50hosts allow=172.17.2.0/255.255.0.0 表示容許來自172.17.2.0/255.255.0.0子網中的所有主機連接

  1. log file = /var/log/samba/log.%m:設置Samba Server日誌文件的存儲位置以及日誌文件名稱。在文件名後加個宏%m(主機名或者IP地址),表示對每臺訪問 Samba Server的機器都單獨記錄一個日誌文件。
[root@dayuanshuai ~]# ls /var/log/samba/log.*           # desktop-1ga15jf是我的主機名 192.168.200.1是我的IP地址
/var/log/samba/log.192.168.200.1  /var/log/samba/log.desktop-1ga15jf  /var/log/samba/log.smbd
  1. max log size = 50:設置Samba Server日誌文件的最大容量,單位爲kB,0代表不限制
  2. security = user :設置安全級別(即用戶登錄方式)
  3. passdb backend = tdbsam設置用戶訪問Samba Server的驗證方式。(Samba密碼驗證方式)

passdb 有三個選項,分別爲:smbpasswd、tdbsam、ldapsam

  • passdb backend = smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件
smbpasswd -a 用戶名 #添加一個samba用戶
smbpasswd -d 用戶名 #禁用一個samba用戶
smbpasswd -e 用戶名 #恢復一個samba用戶
smbpasswd -x 用戶名 #刪除一個samba用戶
  • passdb backend = tdbsam:該方式則是使用一個數據庫文件來建立用戶數據庫。數據庫文件叫passdb.tdb
  • passdb backend = ldapsam:該方式則是基於LDAP的賬戶管理方式來驗證用戶
  1. load printers = yes/no :設置是否在啓動Samba時就共享打印機

[homes]

[homes]:用於設置用戶宿主目錄的共享屬性(特殊共享)

  1. [homes]:共享名(特殊共享,泛指每個用戶對應的家目錄)
  2. comment = Home Directories:共享描述
  3. browseable = no:共享是否可被查看
  4. writable = yes :共享是否可寫

家目錄是否可寫取決於兩個條件:第一,系統對於該用戶是否設置家目錄可寫。第二,Samba配置文件是否設置用戶對家目錄是否可寫

  1. ; valid users = %S :允許訪問該共享的用戶

例如:valid users = bob,@bob(多個用戶或者組中間用逗號隔開,如果要加入一個組就用“@組名”表示。)


[printers]

用於設置打印機共享資源的屬性(特殊共享,共享打印設備,現在基本不用)

  1. [printers]:共享名
  2. comment = All Printers:共享描述
  3. path = /var/spool/samba:共享路徑
  4. browseable = no :共享是否可被查看
  5. guest ok = no :是否可以匿名訪問,類似於public
  6. writable = no :是否可寫
  7. printable = yes :是否可以打印

[自定義]

自定義共享區域

  1. [自定義] :共享名
  2. comment = the share is :共享描述
  3. path = /share/zdy :共享路徑
  4. public = yes :是否可以匿名訪問,類似於guest ok
  5. browseable = yes :共享是否可被查看
  6. writable = yes :是否可寫(同時設置目錄的W)

配置文件檢查工具

  • testparm:若顯示"Loaded services file OK."信息表示配置文件的語法是正確的

  • -v:顯示Samba所支持的所有選項


訪問控制

寫入權限的控制方式(類似於vsftp的限制方式)

  1. 配置文件開啓,文件系統嚴格控制(儘量採用這種)
  • writable = yes:配置文件上全面開啓寫權限
  • setfaclchmod 777:在文件系統上嚴格控制讀寫權限
  1. 文件系統開啓,配置文件嚴格控制
  • chmod 777 /dir:在文件系統上全面開啓寫權限
  • read only = yes
  • write list = 用戶,@組:Samba配置文件上嚴格控制權限

服務管理

  1. 啓動、停止、重新啓動和重新加載Samba服務
  • service smb start: 開啓Smaba服務
  • service smb stop:停止Samba服務
  • service smb restart:重啓Samba服務
  • service smb reload:重新加載Smaba配置文件
  1. 開機自動啓動samba服務
  • chkconfig --level 2345 smb on|off
  • chkconfig smb on:2345級別Samba服務開機自啓動
  • chkconfig smb off:Samba服務開機不啓動
# 查看Samba是否開機自啓動
[root@dayuanshuai samba]#  chkconfig --list smb
smb             0:關閉  1:關閉  2:關閉  3:關閉  4:關閉  5:關閉  6:關閉

# 將3、4級別的smb服務設置爲開機自啓動
[root@dayuanshuai samba]# chkconfig --level 34 smb on

# 查看開機自啓情況
[root@dayuanshuai samba]# chkconfig --list smb
smb             0:關閉  1:關閉  2:關閉  3:啓用  4:啓用  5:關閉  6:關閉

[root@dayuanshuai samba]# chkconfig smb off
[root@dayuanshuai samba]# chkconfig --list smb
smb             0:關閉  1:關閉  2:關閉  3:關閉  4:關閉  5:關閉  6:關閉

客戶端登錄方式

Linux 端:

  • smbclient -U 用戶名 -L //服務器 IP #查看服務器共享
  • smbclient -U 用戶名 //服務器 ip/共享名 #登錄服務器共享
# 查看某個命令輸入那個軟件包
[root@dayuanshuai ~]# rpm -qf `which smbd`
samba-3.6.23-53.el6_10.x86_64

# 查看Samba的安裝包
[root@IDYS_01 /]# yum list | grep "^samba-.*"
samba-client.x86_64                        3.6.23-53.el6_10              updates
samba-common.i686                          3.6.23-53.el6_10              updates
samba-common.x86_64                        3.6.23-53.el6_10              updates
samba-doc.x86_64                           3.6.23-53.el6_10              updates
samba-domainjoin-gui.x86_64                3.6.23-53.el6_10              updates
samba-glusterfs.x86_64                     3.6.23-53.el6_10              updates
samba-swat.x86_64                          3.6.23-53.el6_10              updates
samba-winbind.x86_64                       3.6.23-53.el6_10              updates
samba-winbind-clients.i686                 3.6.23-53.el6_10              updates
samba-winbind-clients.x86_64               3.6.23-53.el6_10              updates
samba-winbind-devel.i686                   3.6.23-53.el6_10              updates

# 安裝Samba客戶端
[root@IDYS_01 /]# yum -y install samba-client

# 查看服務器共享信息
[root@IDYS_01 /]# smbclient -U test2 -L //192.168.200.135
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        test2           Disk      Home Directories
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------


# 登錄到Samba服務器端
[root@IDYS_01 /]# smbclient -U test2 //192.168.200.135/test2
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> ls

Window 端

  • \\服務器 ip\共享名:登錄Samba服務端
  • net use * /del:清空登錄緩存

瀏覽也可以登錄Samba服務器端

  • \\IP地址\登錄的位置:如\\192.168.200.135\test2
  1. 輸入IP地址加登錄的位置

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-R9TiQlPR-1588466446909)(.\images\9.瀏覽器輸入地址.png)]

  1. 登錄成功

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FJjRiphN-1588466446910)(.\images\10.成功.png)]

Samba實驗的部署與配置

注意:因爲SELinux對Samba服務具有約束作用,所以實驗前應該先把防火牆和SELinux關閉了

  1. 服務器端安裝 samba
yum -y install samba
  1. 確認客戶端和相關命令軟件包是否安裝(默認是安裝的)
# 第一種方法
rpm -q samba-client
rpm -q samba-common

# 第二種方法
rpm -qa | grep samba
  1. 創建共享區域
    備份主配置文件
    創建獨立的共享區間(仿照模板編寫)
cd /etc/samba/
cp smb.conf smb.conf.bak

# 編寫配置文件在末尾加上你的配置
vim /etc/samba/smb.conf
.......
# 下面爲我加上去的配置文件
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes

# 添加用戶
useradd -s /sbin/nologin peiqi

# 添加samba用戶並且設置密碼
pdbedit -a peiqi
new password:
retype new password:
Unix username:        peiqi

# 進入到 /mnt目錄下,創建/samba_test目錄,並且授予其權限
[root@dayuanshuai ~]# cd /mnt
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xr-x. 2 root root 4096 4月  27 21:09 samba_test/
[root@dayuanshuai mnt]# chmod o+w samba_test/
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xrwx. 2 root root 4096 4月  27 21:09 samba_test/
  1. 啓動 smb 服務並查看默認共享區域
  • service smb start
  • smbclient -U 用戶名 -L smbserver_IP
# 因爲我已經開啓了smaba服務,所以直接加載服務即刻
service smb reload
重新載入 smb.conf 文件:                                   [確定]

# 轉到客戶端進行登錄,查看自己可以訪問的目錄
[root@IDYS_01 samba_test]# smbclient -U test2 -L 192.168.200.135
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        samba_test      Disk      idys test
        test2           Disk      Home Directories


[root@IDYS_01 samba_test]# smbclient -U peiqi -L 192.168.200.135       
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-53.el6_10)
        samba_test      Disk      idys test
        peiqi           Disk      Home Directories
# 從上面可以知道 兩個用戶對於 samba_test都是可見的

# 以peiqi的用戶登錄samba服務器,並且上傳peiqi.txt
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test   
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put peiqi.txt

# 以 test的身份上傳test2.txt文件,並且刪除了peiqi.txt,發現test2可以刪除peiqi.txt文件
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put test2.txt 
putting file test2.txt as \test2.txt (2.9 kb/s) (average 2.9 kb/s)
smb: \> rm peiqi.txt 
smb: \> ls
  .                                   D        0  Mon Apr 27 21:22:34 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020

                53776 blocks of size 524288. 46270 blocks available

# 以peiqi用戶登錄samba服務器,發現自己上傳的文件自己可以覆蓋,而test2上傳的文件自己不能覆蓋
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> ls
  .                                   D        0  Mon Apr 27 21:22:34 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020

                53776 blocks of size 524288. 46270 blocks available
smb: \> put test2.txt 
NT_STATUS_ACCESS_DENIED opening remote file \test2.txt
smb: \> put peiqi.txt 
putting file peiqi.txt as \peiqi.txt (2.9 kb/s) (average 2.9 kb/s)
smb: \> put peiqi.txt 
putting file peiqi.txt as \peiqi.txt (2.9 kb/s) (average 2.9 kb/s)

# 在服務器端對共享目錄加入sbit權限
[root@dayuanshuai mnt]# chmod o+t samba_test/
[root@dayuanshuai mnt]# ls -ld samba_test/
drwxr-xrwt. 2 root root 4096 4月  27 21:26 samba_test/

# 這時再以test2用戶登錄共享目錄samba_test,此時就無法刪除peiqi.txt文件了
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> rm peiqi.txt 
NT_STATUS_ACCESS_DENIED deleting remote file \peiqi.txt
NT_STATUS_ACCESS_DENIED listing \peiqi.txt
smb: \> ls
  .                                   D        0  Mon Apr 27 21:26:06 2020
  ..                                  D        0  Mon Apr 27 21:09:52 2020
  test2.txt                           A        6  Mon Apr 27 21:22:26 2020
  peiqi.txt                           A        6  Mon Apr 27 21:26:12 2020


本地驗證(登錄、上傳、下載)

  1. 修改配置文件(添加自定義共享)
[自定義]
comment = the share my_samba
path = /mnt/my_samba
public = yes
browseable = yes
writable = yes
  1. 創建共享目錄並給定相應權限
mkdir /mnt/my_samba
chmod 777 /mnt/my_samba   #最好使用 ACL權限
  1. 測試配置文件並重啓服務
# 測試samba配置文件是否有語法錯誤
testparm

# 重啓服務
service smb restart
  1. 首先,創建 Linux 用戶
useradd -s /sbin/nologin test2
  1. 轉換爲 samba 用戶
pdbedit -a test2
  1. 客戶端查看共享文件夾並登錄測試
smbcient -U test2 –L IP 地址
smbclient –U test2 //IP 地址/共享名

注:由於未設置上傳文件的默認權限,指定用戶上傳的文件只有自己能修改和覆蓋


訪問控制 - 通過配置限制

  • valid users: 僅允許部分用戶訪問共享區域

注:前提條件是指定目錄權限給到最大,通過修改配置文件來實現實驗結果


部分用戶登錄 samba 服務器

  • 修改/etc/samba/smb.conf中自定義的共享區域
  • 添加:設置合法用戶列表
  • valid users = 用戶,@組(多個逗號分隔)
# 在服務器端配置samba配置文件:smb.conf,設置valid user,也就是隻允許peiqi用戶訪問
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        valid users = peiqi

# 回到客戶端,用test2進行登錄,發現無法登錄
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
tree connect failed: NT_STATUS_ACCESS_DENIED

# 這時再用peiqi用戶登錄,可以登錄
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test 
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> exit

部分用戶對共享區域有寫權限

  • 修改/etc/samba/smb.conf 中自定義的共享區域
  • 添加:開啓只讀,設置可寫列表
  • read only = yes
  • write list = peiqi
# 修改samba的配置文件,將服務器端設置爲只讀,同時爲test2用戶設置可寫
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf

[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        read only = yes
        write list = test2

# 在客戶端登入peiqi用戶,當上傳文件時,其被服務器拒絕,因爲她沒有寫權限
[root@IDYS_01 samba_test]# smbclient -U peiqi //192.168.200.135/samba_test
Enter peiqi's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put write.txt 
NT_STATUS_ACCESS_DENIED opening remote file \write.txt

# 此時再次以test2用戶登錄,其上傳文件成功!
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> put write.txt 
putting file write.txt as \write.txt (0.0 kb/s) (average 0.0 kb/s)

設置上傳文件的默認權限

  • create mask 文件的默認權限
  • directory mask 目錄的默認權限
  • 修改配置文件自定義的共享區域
  • 添加:
    • create mask = 666
    • directory mask = 777
# 在共享目錄下查看上傳的文件具有的權限爲744
[root@dayuanshuai samba_test]# ls -l
總用量 8
-rwxr--r--. 1 peiqi peiqi 6 4月  27 21:26 peiqi.txt
-rwxr--r--. 1 test2 test2 6 4月  27 21:22 test2.txt
-rwxr--r--. 1 test2 test2 0 4月  27 22:35 write.txt

# 編輯samba服務的配置文件,將上傳目錄權限設置爲644
[root@dayuanshuai mnt]# vim /etc/samba/smb.conf
[samba_test]
        comment = idys test
        path = /mnt/samba_test
        public = yes
        browseable = yes
        writable = yes
        read only = yes
        write list = test2
        create mask = 644

# 重新加載配置文件
[root@dayuanshuai samba_test]# service smb reload
重新載入 smb.conf 文件:                                   [確定]

# 客戶端以 test2的身份登錄服務器端,然後上傳文件write.txt
[root@IDYS_01 samba_test]# smbclient -U test2 //192.168.200.135/samba_test
Enter test2's password: 
smb: \> put write.txt 
putting file write.txt as \write.txt (0.0 kb/s) (average 0.0 kb/s)

# 服務器端再次查看文件權限,發現其剛剛客戶端上傳的文件權限變爲644
[root@dayuanshuai samba_test]# ls -l write.txt 
-rw-r--r--. 1 test2 test2 0 4月  27 22:43 write.txt

用戶別名(虛擬用戶)

  1. 添加別名(/etc/samba/smbusers)
  • 添加:peiqi = pq
# 向 /etc/samba/smbusers 添加別名
[root@dayuanshuai ~]# cd /etc/samba/
[root@dayuanshuai samba]# vim smbusers 
....
peiqi = pq
  1. 啓用別名(修改主配置文件)
  • vim /etc/samba/smb.conf
  • 添加:
    • username map = /etc/samba/smbusers
# 在smb.conf的[global]下添加如下配置
[root@dayuanshuai samba]# vim smb.conf   
[global]       
        username map = /etc/samba/smbusers

# 重新加載配置文件
[root@dayuanshuai samba]# service smb reload
重新載入 smb.conf 文件:                                   [確定]
  1. 測試
  • smbclient -U 別名 //服務器 ip/共享名
# 此時再登入用戶別名 pq,已經可以登入
[root@IDYS_01 ~]# smbclient -U pq //192.168.200.135/samba_test
Enter pq's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-53.el6_10]
smb: \> 

# 選擇沒有被設置別名的不存在用戶,發現其無法登錄
[root@IDYS_01 ~]# smbclient -U te //192.168.200.135/samba_test
Enter te's password: 
session setup failed: NT_STATUS_LOGON_FAILURE

映射網絡驅動器(掛載)

  1. Linux 下:
  • 臨時掛載: mount -t cifs -o username=xxx,password=xxx //服務器 ip/服務器共享 /本地掛載目錄
# 首先查看 samba_test 目錄下沒有文件
[root@IDYS_01 tmp]# cd samba_test/
[root@IDYS_01 samba_test]# ls

# 掛載samba服務端文件系統
[root@IDYS_01 tmp]# mount -t cifs -o username=pq,password=123456 //192.168.200.135/samba_test /tmp/samba_test/

# 再次查看這個目錄,發現已經有文件了,說明掛載成功
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt
  • 永久掛載:/etc/fstab
    • //服務器 ip/服務器共享 /本地掛載目錄 cifs defaults,username=xxx,password=xxx 0 0
# 卸載該該目錄
[root@IDYS_01 tmp]# umount samba_test/

# 編輯/etc/fastab文件
[root@IDYS_01 tmp]# vim /etc/fstab
//192.168.200.135/samba_test /tmp/samba_test cifs defaults,username=pq,password=123456 0 0

# 自動掛載
[root@IDYS_01 tmp]# mount -a

# 再次查看目錄,掛載成功
[root@IDYS_01 tmp]# cd /tmp/samba_test/
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt

# 查看分區空間使用情況
[root@IDYS_01 tmp]# df -h
//192.168.200.135/samba_test
                       27G  2.4G   23G  10% /tmp/samba_test

# 客戶端創建文件
[root@IDYS_01 samba_test]# touch a
[root@IDYS_01 samba_test]# ls
a  peiqi.txt  test2.txt  write.txt

# 服務器端刪除
[root@dayuanshuai samba_test]# rm a 
rm:是否刪除普通空文件 "a"?y

# 客戶端再次查看,發現剛纔創建的文件已經消失了
[root@IDYS_01 samba_test]# ls
peiqi.txt  test2.txt  write.txt

圖形化 web 管理界面

  • secure CRT裏面安裝ALT+P進入SFTP,傳輸samba-swat.zip安裝包
sftp> put d:\software\samba-swat.zip
  • /usr/local創建目錄下創建samba目錄,並將samba-swat.zip複製到該目錄下
mkdir /usr/local/samba
cp /root/samba-swat.zip /usr/local/samba/
  • 爲了解壓.zip文件,安裝``unzip`安裝包
yum -y install unzip
unzip samba-swat.zip
  • 查看軟件包的類型
[root@dayuanshuai samba-swat]# ls
libsmbclient-3.6.23-36.el6_8.x86_64.rpm  samba-swat-3.6.23-36.el6_8.x86_64.rpm
samba-3.6.23-36.el6_8.x86_64.rpm         samba-winbind-3.6.23-36.el6_8.x86_64.rpm
samba-client-3.6.23-36.el6_8.x86_64.rpm  samba-winbind-clients-3.6.23-36.el6_8.x86_64.rpm
samba-common-3.6.23-36.el6_8.x86_64.rpm  xinetd-2.3.14-40.el6.x86_64.rpm

el6軟件包適用於CentOS6

  • 安裝升級該目錄下所有軟件包
yum -y install *
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
# 此時發生報錯

# 於是我在後面加上了 --skip-broken
[root@dayuanshuai samba-swat]# yum -y install * --skip-broken
因爲依賴關係問題而跳過的軟件包:
    libsmbclient-3.6.23-36.el6_8.x86_64 來自 /libsmbclient-3.6.23-36.el6_8.x86_64
    samba-client-3.6.23-36.el6_8.x86_64 來自 /samba-client-3.6.23-36.el6_8.x86_64
    samba-swat-3.6.23-36.el6_8.x86_64 來自 /samba-swat-3.6.23-36.el6_8.x86_64
# 還是報錯說上面三個軟件沒有安裝

# 查看samba安裝了那些軟件包
[root@dayuanshuai samba-swat]# rpm -qa | grep samba   
samba-winbind-3.6.23-53.el6_10.x86_64
samba-common-3.6.23-53.el6_10.x86_64
samba-winbind-clients-3.6.23-53.el6_10.x86_64
samba-3.6.23-53.el6_10.x86_64

# 查看以libsmb開頭的軟件包是否安裝
[root@dayuanshuai samba-swat]# rpm -qa | grep libsmb

# 依次安裝這三個軟件包libsmbclient samba-client samba-swat
[root@dayuanshuai samba-swat]# yum -y install libsmbclient samba-client
[root@dayuanshuai samba-swat]# yum -y install samba-swat

# 再次查看軟件包安裝情況
[root@dayuanshuai samba-swat]# rpm -qa | grep samba
samba-winbind-3.6.23-53.el6_10.x86_64
samba-common-3.6.23-53.el6_10.x86_64
samba-winbind-clients-3.6.23-53.el6_10.x86_64
samba-swat-3.6.23-53.el6_10.x86_64
samba-client-3.6.23-53.el6_10.x86_64
samba-3.6.23-53.el6_10.x86_64

[root@dayuanshuai samba-swat]# rpm -qa | grep libsmb
libsmbclient-3.6.23-53.el6_10.x86_64
# 發現上面缺失沒有安裝的軟件包均已經安裝。
  • 修改/etc/xinetd.d/swat
    • 修改/etc/xinetd.d/swat
    • 添加: only_from = 登錄來源 IP
    • disable = no
[root@dayuanshuai samba-swat]# vim /etc/xinetd.d/swat
service swat
{
        port            = 901
        socket_type     = stream
        wait            = no
        only_from       = 192.168.200.1
        user            = root
        server          = /usr/sbin/swat
        log_on_failure  += USERID
        disable         = no
}
  • 重啓 xinetd服務
    • service xinetd restart
# 查看xinetd的運行狀態
[root@dayuanshuai samba-swat]# service xinetd status
xinetd 已停

# 開啓xinetd 服務
[root@dayuanshuai samba-swat]# service xinetd start
正在啓動 xinetd:                                          [確定]

# 查看xinetd開機自啓動情況
[root@dayuanshuai samba-swat]# chkconfig --list xinetd
xinetd          0:關閉  1:關閉  2:關閉  3:啓用  4:啓用  5:啓用  6:關閉

# 查看 swat的開機自啓動情況
[root@dayuanshuai samba-swat]# chkconfig --list | grep swat
        swat:           啓用
  • 測試
    • 瀏覽器:IP:901 登錄時注意端口號
# 查看901端口是否開啓
[root@dayuanshuai samba-swat]# netstat -antp | grep 901
tcp        0      0 :::901                      :::*                        LISTEN      9955/xinetd
  • 打開瀏覽器:輸入http://192.168.200.135:901/

  • 這時會提示輸入賬戶名密碼,你直接輸入root的用戶名和密碼即可



寫在最後的話:

  • 無論每個知識點的難易程度如何,我都會盡力將它描繪得足夠細緻
  • 歡迎關注我的CSDN博客,IDYS’BLOG
  • 持續更新內容
    linux基礎 | 數據通信(路由交換,WLAN) | Python基礎 | 雲計算
  • 如果你有什麼疑問,或者是難題。歡迎評論或者私信我。你若留言,我必回覆!
  • 雖然我現在還很渺小,但我會做好每一篇內容。謝謝關注!

在這裏插入圖片描述

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