

摘要:高職院校以培養應用型、技術型、技能型、實用性人才為目標,在計算機學科教學過程中,項目驅動教學法最能體現其教學特點。通過設計實驗場景,讓學生在做中學,做到理論與實際相結合,提高學生的動手能力和學習熱情、從而增強學生分析和解決問題的能力、進一步加深對理論知識的理解。該文首先對Samba做了介紹,接著介紹了Samba服務器的配置,最后通過設計項目場景和具體實驗完成了Samba服務器的配置、管理及測試。
關鍵詞:Linux; Samba協議;共享資源;Windows;訪問安全
一、引言
Linux作為一種免費使用和自由傳播的類UNIX操作系統,具有開源、可靠、安全、穩定、多平臺等特點。Linux服務器在各行各業中有廣泛的應用,Linux服務可以提供數據庫管理和網絡服務等內容,它不僅性能高,而且是一種開源且免費的服務器[1]。目前,多家廠商通過修改源代碼以滿足實際需求,同時,由于Linux系統自身結構的的優勢,其數據和業務處理能力非常強,其高安全性和穩定性能夠提高服務器的可用性,從而能夠實現業務的穩定、高效運行。因此,市場上大部分服務器均采用Linux 系統架構,作為最先連接Linux和Windows平臺之間的橋梁,Samba服務器的文件共享功能,使得 Linux操作系統和Windows操作系統之間的文件復制(大文件和小文件都適用)、資源共享、打印服務更加便利。
二、Samba 概述
(一)Samba簡介
Samba 是在linux /unix 系統上實現SMB( Session Message Block) 協議的一個免費軟件, SMB是一個協議縮寫,Server Message Block是SMB的全拼,我們可以將其看作是局域網絡中共享文件和打印機的一種協議,我們可以將其架設成一個功能非常強大的文件服務器,其功能類似windows操作系統的網上鄰居。通過安裝Samba服務,Windows可以在網上鄰居中瀏覽Linux操作系統。Windows和Linux客戶端的用戶可以通過用戶名和密碼登錄到Linux 系統中的Samba服務器中,在Linux 系統中實現瀏覽、創建、刪除、修改、復制文件等功能,從而實現Windows與Linux 、Linux與Linux系統之間的資源共享[2]。
Samba是一個免費的軟件,這款軟件包含服務器端和客戶端。通過SMB協議,客戶端應用程序無需將服務器端的文件下載到本地的情況下,可以在Windows 與 Unix-Like以及Linux與UNIX系統不同的平臺、局域網和廣域網等不同的網絡環境下讀、寫服務器上的文件,不同于FTP服務,Samba在讀寫服務器上的文件時,無需將服務器上的文件下載到客戶端[3]。SMB協議功能強大,除了可以實現局域網絡中的文件共享服務,本地客戶端通過應用程序還可以實現訪問遠程Samba服務器端的文件和打印機、Windows 網絡上的主機名稱解析、裝置的分享等功能。
Samba服務由2個核心守護進程組成,分別是smbd和nmbd。Smbd命令(全稱為samba daemon),smbd 守護進程處理來自 SMB 客戶機(如 Windows 客戶機)的 CIFS/SMB 請求,可分享文件與打印機等網絡資源供Windows相關的用戶端程序存取服務等;nmbd守護進程的作用是Samba服務器對Samba客戶端進行名字解析和瀏覽服務,瀏覽服務的主要作用是將服務器上可供訪問的共享資源以列表的方式顯示在客戶端。
(二)Samba服務工作原理
Samba服務的功能非常強大,這與它在Linux和UNIX系統上實現SMB協議有大的關系。SMB軟件能夠讓 Windows、Linux、Unix、 DOS 之間互相的分享數據,SMB協議能夠提供目錄列表和打印服務,支持客戶端認證和授權功能、名稱解析等功能。
早期,SMB協議運行于NBT協議上,通過設置相關協議,Samba軟件不但能夠訪問局域網中服務器的共享資源,還可以實現在廣域網上分享共享資源。
Samba軟件由服務器端和客戶端組成,客戶端可以是Windows系統或者Linux系統。通過SMB協議,被授權的Windows客戶端可以通過【網上鄰居】窗口查看到Linux服務器中指定的共享的資源列表,如果是Linux操作系統,客戶端也能夠訪問到服務器上已授權的共享資源列表。Samba服務的具體工作流程如圖1所示。
1.建立會話
Samba服務工作流程的第一步是Samba客戶端向Samba服務器端發送一個請求數據報,數據報中包含客戶端已編碼的NETBIOS名字。針對有效的會話連接,Samba服務器在接收到客戶端請求數據報后,會響應一個NETBIOS session確認數據報,在雙方成功建立會話后,客戶才能進行接下來的工作流程[4]。
2.協議協商
在客戶訪問服務器資源前,需要進行協商,具體過程:Samba客戶端首先會發送一個SMB negprot指令作為請求數據報,此數據報的目的是告知服務器其所支持的SMB協議類型。服務器在接收到請求信息后,以SMB negprot指令作為響應數據報,根據客戶端的請求信息,服務器選擇最合適通信的SMB類型。如果服務發現列表中沒有可以使用的SMB版本,在響應信息中會返回oXFFFFH信息,從而結束此次通信。
3.建立連接
在服務器和客戶端完成協議協商后,會確定通信所使用的SMB協議版本。之后,客戶端向服務器發送一個名為SesssetupX的指令請求數據報,數據報中包含有客戶端作為認證信息的賬號和密碼。服務器在收到請求數據報之后,會響應一個SesssetupX數據報作為應答,用來拒絕或運行客戶端的請求,如果Samba客戶端的提交的請求數據報中的信息通過驗證,服務器會為客戶端用戶分配一個UID供雙方通信使用。
4.訪問共享資源
當客戶端和服務器完成了協商和認證之后,Samba客戶端就可以訪問Samba服務器中的共享資源,此時客戶具有訪問服務器的權限,但是沒有列明具體的資源名稱。客戶端會發送一個tree connect指令或SMB TconX指令數據報,數據報包含有客戶所訪問資源的具體名稱,服務器在接收到客戶端的請求信息后,會響應一個SMB TconX的數據包作為應答信息,以表示此次請求是接受或拒絕。如果客戶端請求成功,Samba服務器會對此次連接分配TID,此后便可以實現資源共享。
5.使用資源
連接到相應資源后,Samba客戶端就可以通過向服務器發送響應的指令打開、讀取、寫入和關閉文件。
6.斷開連接
完成共享操作后,客戶端需要結束共享并斷開與服務器的連接,以節省網絡資源。此時Samba客戶端首先會發送一個名為tree disconnect的請求數據報,用來結束與服務器的共享服務,同時與服務器斷開連接。
三、Samba 實驗設計
(一)Samba 應用場景
某學校計算機課室有Samba服務器管理員system、任課老師teacher、課室管理員manager、學生student共4個小組,Samba服務器使用Linux操作系統,系統版本為RHEL 7,其他組成員使用的操作系統不做限制,此次實驗設計為建立在RHEL 7之上的安全文件共享方案。實驗中,在服務器上為每個用戶組分配對應的共享空間,teacher組和manager組有共用的一個空間,其他組成員不能訪問;我們建立一個名為sucai的只讀權限的空間,供所有用戶(包括匿名用戶)訪問;另外再建立一個可供所有用戶(包括匿名用戶)讀寫的共享空間,用來存放公共或臨時性的文件。
(二)項目目標
System組:用來管理和維護Samba服務器,具有全部權限,管理所有Samba空間的權限。
私有空間:用戶組的私有空間除了小組成員本身和system組以外,其他用戶不可訪問(包括列表、讀和寫)。
素材庫sucai:作為公共的資源存儲空間,為所有用戶讀設置讀取但不能寫入數據的權限。
teacher組和manager組的共享教學kejian空間,teacher組和manager組之外的用戶不能訪問。
public空間:供所有用戶讀取、寫入、刪除。
(三)Samba Server安裝與配置
1. Samba服務的安裝
配置SAMBA SERVER前的準備步驟:安裝Linux操作系統(本文不做介紹)與SAMBA 服務。
第1步:檢測Linux系統是否已經安裝了SAMBA 服務,具體命令如下所示:
rpm -qa | grep samba
如查詢結果為空,則說明服務器暫未安裝SAMBA服務。
第2步:若系統未安裝SAMBA服務,(本次實驗)使用yum命令安裝SAMBA服務,具體步驟如下:
從網絡上下載Linux 的鏡像文件,掛載ISO安裝鏡像,命令如下:
mkdir /mnt/cdrom/
mount /dev/cdrom /mnt/cdrom/
第3步:制作用于安裝的yum源文件;編輯dvd.repo文件,具體操作如下:
編輯vim /etc/yum.repos.d/dvd.repo文件,添加以下內容:
[dvd]
name=dvd
baseurl=file:///mnt/cdrom
gpgcheck=0
enable=1
第4步:使用yum命令查看Samba軟件包的信息,命令如下:
yum info samba;
第5步:使用yum命令在SAMBA服務器上安裝SAMBA服務:
yum clean all
yum install Samba -y;
第6步:軟件包安裝完畢,再次進行查詢;
rpm -qa | grep samba
samba-4.4.4-9.el7.x86_64
……
如出現以上內容,說明Samba服務器已正常安裝Samba軟件。
2. Samba共享資源的配置
第1步:建立共享目錄,并在其下建立用戶組文件夾。
建立共享目錄:mkdir /classroom
創建用戶組system、 teacher、 manager 、student文件夾:
mkdir /classroom/system
……
第2步:創建用戶和組。
先使用groupadd命令添加用戶組,然后各用戶組添加對應的用戶,執行useradd命令和passwd命令,為的賬號及密碼:
groupadd system
……
創建系統用戶
useradd -G system system1
第3步:添加相應的Samba賬號
為各組成員添加相應Samba賬號:
smbpasswd -a system1
New SMB password:
Retype new SMB password:
Added user system1.
smbpasswd -a teacher1
smbpasswd -a manager1
smbpasswd -a student1
……
第4步:設置文件夾權限
chown system1:system /classroom/system/
……
chmod 770 /classroom/*
chmod 644 /classroom/sucai/
chmod 777 /classroom/public/
……
更改文件的訪問控制列表,設置特定目錄的權限
setfacl -m d:g:system:rwx *
……
指定特定目錄及其子目錄下新建的文件或目錄對于用戶system1都有讀寫執行的權限
setfacl -m u:system1:rwx sucai/
……
3. Samba服務器端配置
第1步:編輯Samba服務器配置文件,配置文件為smb.conf。
編輯配置文件所使用的工具為vim,具體命令為:
vim /etc/samba/smb.conf,
在文件中須包含以下關鍵代碼內容:
[classroom] ? #設置共享名稱,供網絡用戶訪問時使用;
comment = classroom? ?#備注信息,方便用戶識別;
path = /classroom #設置共享資源的原始完整路徑,此處的路徑為絕對路徑;
public = yes #允許匿名訪問;
writable = yes #設置目錄,允許用戶讀寫;
編輯完成后,保存并退出。
第2步:重啟服務器端的Samba 服務。
systemctl start smb #啟動smb服務;
systemctl start nmb #啟動nmb服務;
systemctl enable smb nmb #設置smb服務nmb服務為開機啟動;
第3步:配置防火墻及共享目錄的context值。
讓防火墻放行Samba服務,
firewall-cmd --permanent --add-service=samba //讓防火墻放行Samba服務;
success
firewall-cmd –reload //重新加載防火墻;
更改共享目錄的context值,
chcon -t samba_share_t /classroom/ -R
(四)測試
第1步 :Windows客戶端訪問Samba 共享
Samba共享服務器可以部署在linux系統上,也可以部署在Windows系統上。無論是哪一種部署方式,通過Windows系統進行訪問時的操作步驟和方法是一樣的。此次實驗場景設計為在Linux系統上部署Samba共享服務,下面我們通過Windows系統來訪問Samba服務。
選擇“開始”-“運行”命名,使用UNC路徑直接進行訪問,輸入\\192.168.1.3。打開“Windows安全”對話框,輸入system1的用戶名和密碼,登錄后可以正常訪問classroom共享文件夾。
第2步: Linux客戶端訪問Samba 共享
Samba服務程序不僅能實現Windows客戶端訪問Linux系統資源,還可以實現Linux系統之間的文件共享,Samba服務器主機的IP地址為192.168.1.3,在Linux系統中,我們需要安裝Samba客戶端需要用到的服務和支持文件共享服務的軟件包(cifs-utils)。
在Linux系統上安裝samba-client和cifs-utils,具體命令如下:
yum install samba-client -y
yum install cifs-utils –y
使用smbclient命令行共享訪問模式瀏覽共享資料,此時我們使用teach組的teach1用戶登錄,具體命令如下:
smbclient? //192.168.1.3/classroom? -U teacher1%teacher1
切換到用戶組所在文件夾,新建一個目錄進行測試。
通過測試,Windows和linux客戶端成功訪問Samba服務器資源,權限測試正常。
四、結束語
通過實驗,實現Windows和linux客戶端訪問Samba服務器共享資源,本文設計了一個基本的實驗場景,給出了關鍵步驟的詳細截圖,結合文件夾、用戶以及相關權限的設置,通過Samba資源共享及相關權限的測試和分析,使學生更好地理解SMB相關概念以及Samba客戶端和服務器的工作流程及原理,為后續的Linux理論學習、實踐、實驗打下基礎。
作者單位:沈勁桐? ? 廣東省外語藝術職業學院
沈勁桐(1986-),男,湖南株洲,碩士,中級網絡工程師,研究方向:計算機網絡。
參? 考? 文? 獻
[1]任志遠.Linux服務器安全防護部署[J].軟件(教育現代化)(電子版),2019(4):36.
[2]李剛,唐江浪,郭麗華.基于人機交互解釋系統的Samba服務器研究與應用[J].軟件,2012(07).
[3]趙麗.Linux案例教學之samba服務器配置[J].林區教學,2012(03):79-80.
[4]文戈.中山火炬職業技術學院校園網安全技術研究與實施[D].重慶大學,碩士(專業:軟件工程);2009.