SAMBA--實現開源的smb軟件

什麼是SAMBA

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它爲局域網內的不同計算機之間提供文件及打印機等資源的共享服務。
SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。通過設置“NetBIOS overTCP/IP”使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。

SAMBA的產生

在NetBIOS 出現之後,Microsoft就使用NetBIOS實現了一個網絡文件/打印服務系統,這個系統基於NetBIOS設定了一套文件共享協議, Microsoft稱之爲SMB(Server Message Block)協議。這個協議被Microsoft用於它們Lan Manager和Windows NT服務器系統中,實現不同計算機之間共享打印機、串行口和通訊抽象(如命名管道、郵件插槽等)。
隨着 Internet的流行,Microsoft希望將這個協議擴展到Internet上去,成爲Inter net上計算機之間相互共享數據的一種標準。因此它將原有的幾乎沒有多少技術文檔的SMB協議進行整理,重新命名爲
CIFS(Common Internet File System),並打算將它與NetBIOS相脫離,試圖使它成爲Internet上的一個標準協議。
因此,爲了讓Windows和Unix計算機相集成,最好的辦法即是在Unix計算機中安裝支持SMB/CIFS協議的軟件,這樣Windows客戶就不需要更改設置,就能如同使用Windows NT服務器一樣,使用Unix計算機上的資源了。
Samba是用來實現SMB的一種軟件,它的工作原理是,
讓NETBIOS(Windows95網絡鄰居的通訊協議)和SMB(Server Message Block)這兩個協議運行於TCP/IP通信協議之上,並且使用Windows的NETBEUI協議讓Unix計算機可以在網絡鄰居上被Windows 計算機看到。
它的功能

1.共享Linux磁盤給Win95/NT
2.共享Win95/NT磁盤給Linux機器
3.共享Linux打印機給win95/NT
4.共享win95/NT打印機給Linux機器。

在windows當中我們最常見的就是網上鄰居可以看到同一互聯網上連接的所有用戶,
在服務器端,linux與window Server相比的穩定性,安全性執行效率以及性價比都是較高的。所以好多window Server下跑的一些服務都會切換到運行在linux服務上,但是對於一些桌面用戶來說用到的較多的就是文件共享協議。而在linux中我們可以使用 FTP NFS這類型文件共享協議,但是對於window上比較簡單的直接打開的服務在linux中的nfs協議來說是不能在window上使用的這種直接將文件系統共享出來的協議爲SMB。
與ftp的區別是不用將文件下載下來在使用,是直接可以在共享中打開使用的,所以說這種共享方式在使用當中是非常方便的,但是SMB是window當中的一種私有協議。即使如此在linux當也提供對SMB協議的一種支持。(雖然是window下的私有協議但是我們的開源技術團隊爲我們的linux也提供了這種服務稱爲samba服務,在開發過程中也是相當的艱苦 ,由於在window下是閉源的所以開發者是通過抓包分析window下所產生的數據包來實現的。弄清楚它的一個原理。)

SMB(Server Message block)協議是window下所使用的文件共享協議,我們在linux系統或者其類unix系統當中可以通過samba服務來實現SMB功能。

linux下的實現

Samba服務是SMB的一個開源實現,而smb的一些主要功能如下:

1. 通過SMB協議進行文件共享
2. 通過SMB協議進行打印共享(我們可以通過在linux上通過smb配置打印服務器,爲window提供打印服務)
3. 加入一個windows2000/2003/2008域環境
(在企業環境當中應用最多,目前smb是支持這三種主流的window服務操作系統的,好多企業當中整個的企業環境當中是使用window的域環境進行管理的,而所有的用戶組,權限,組策略信息都是在window域環境進行配置的,那麼但是我們的企業又想把一些應用服務和需要用到的一些域環境進行認證或者是做權限控制的這些應用服務去切換到linux系統當中,那在這種情況下就涉及到我如何和window下的這些域環境進行兼容,那麼smb是可以加入window域環境當中,並且是可以和window下的這些域環境進行認證操作的。所以smb這個協議是相當強大的不僅限於只是實現文件共享)
4. 通過windows域環境進行認證操作。
SMB協議又稱爲CIFS(Common Internet File System)協議

SAMBA

安裝samba

Yum install samba -y
Samba擁有兩個主服務(相關服務),對於一般使用的服務他只有一個主服務
smbd (提供samba核心功能也是使用最多的一種功能) 提供文件及打印共享服務功能,使用139/445端口
nmbd 提供Netbios(解析協議慢慢的被淘汰)支持,使用137/138端口,而對於這種協議使用較少,現在都是dns進行解析 
一般作爲文件共享使用samba,則只需要smbd服務

SAMBA配置文件

Samba的配置文件爲/etc/samba/smb.conf
配置文件分爲三個部分:
[global] 定義全局性配置(配置samba服務的相關參數)

[homes] 定義對用戶家目錄的共享配置(其實在默認情況下不做任何設置,直接啓用服務我們就可以通過smb協議訪問所有用戶的家目錄)
[printers] 定義打印機共享配置

獨立環境下(不和任何域環境有關係)的samba常用的global配置如下:
SAMBA

服務:
	smbd
	nmbd

使用的端口:
Port 137	Used for NetBIOS network browsing
Port 138	Used for NetBIOS name service
Port 139	Used for file and printer sharing and other operations
Port 445	Used by Windows 2000/XP when NetBIOS over TCP/IP is disabled
[global]
	workgroup = MYGROUP   定義該Samba服務器所在的工作組或者域(如果下面的security=domain的話)
	server string = Samba Server Version %v  
	設定機器的描述,當我們通過網絡鄰居訪問的時候可以在備註裏面看見這個內容,而且還可以使用%v = Samba服務的版本號。
	log file = /var/log/samba/log.%m   定義記錄文件的位置LogFileName
	max log size = 50
	定義記錄文件的大小size(單位是KB,如果是0的話就不限大小)
	security = user
	定義Samba的安全級別,按從低到高分爲四級:share,user,server,domain。它們對應的驗證方式如下:
	* share:沒有安全性的級別,任何用戶都可以不要用戶名和口令訪問服務器上的資源。
	* user:samba的默認配置,要求用戶在訪問共享資源之前資源必須先提供用戶名和密碼進行驗證。
	* server:和user安全級別類似,但用戶名和密碼是遞交到另外一個服務器去驗證,比如遞交給一臺NT服務器。如果遞交失敗,就退到user安全級。
	* domain:這個安全級別要求網絡上存在一臺Windows的主域控制器,samba把用戶名和密碼遞交給它去驗證。
	後面三種安全級都要求用戶在本Linux機器上也要系統帳戶。否則是不能訪問的。
	load printers = yes
[homes]   
在smb.conf文件中一般沒有對這個目錄的設定特定內容比如路徑等。當客戶機發出服務請求時,就在smb.conf文件的其它部分查找友特定內容的服務。如果沒有發現這些服務,並且提供了homes段時,那麼就搜索密碼文件得到用戶的Home目錄。通過Homes段,Samba可以得到用戶的Home目錄並使之共享。下面是這個段的最基本的幾個設置。
	comment = Home Directories
	browseable = no
	writable = yes
[printers]
	comment = All Printers
	path = /var/spool/samba
	browseable = no
	guest ok = no
	writable = no
	printable = yes
	write list = +staff   @用來指定可以在該共享下寫入文件的用戶              
這裏printable指明該打印機可以打印, guest ok說明遊客也能打印,path指明打印的文件隊列暫時放到/var/spool/samba目錄下。

samba的使用

yum install samba -y  ##安裝服務
systemctl stop firewalld.service  #關閉防火牆
systemctl restart smb nmb  #啓動samba

此時可以進行測試:資源欄輸入\ip
在這裏插入圖片描述
可以看到需要使用憑證登錄上去,此時是無憑證的,沒有創建可以連接的用戶,下面進行用戶的創建。
在這裏插入圖片描述
需要有用戶,纔能有可以訪問的用戶,故先創建用戶:

 useradd user1 --password redhat  ##創建三個用戶
 useradd user2 --password redhat
 useradd user3 --password redhat
[root@localhost ~]# smbpasswd -a user1  ##將用戶添加爲smb用戶
New SMB password:
Retype new SMB password:
Added user user1.
[root@localhost ~]# smbpasswd -a user2
New SMB password:
Retype new SMB password:
Added user user2.
[root@localhost ~]# pdbedit -L    ##查看smb用戶
user1:1001:
user2:1002:

此時進行測試,使用smb用戶進行登錄:
在這裏插入圖片描述

案例1

要求:
	1、通過samba實現公司的文件交換服務器,
	2、實現/public 目錄讓所有人訪問,所有人都可以寫入文件
配置示例:

[root@localhost samba]# cat smb.conf
[global]
        workgroup =MYGROUP
	Server string = 
	Security = user
[public]
        path = /public
	public = yes
        comment = file
	writable = yes
		
注意:selinux開啓的狀態下,需要執行:chcon -t samba_share_t /public -R		

用戶控制:本地用戶
1. public =所有用戶都可以訪問    /guest ok=yes/no
2. map to guest = Bad User	匿名訪問
3. browseable = 可瀏覽(設置共享是否可遊覽,如果是no表示隱藏,通過ip+共享名進行訪問)
4. writable = yes	可寫,還要看目錄權限     rw
5. write list = maomao,@GROUPNAME,+GROUPNAME
6. read only = yes 只讀設置                      ro
7. create mask = 0644 客戶機創建文件權限
8. directory mask = 0755 客戶機創建目錄的權限
9. valid user = //允許
invalid =  user1,user2,@group1//禁止登錄用戶,用戶用逗號隔開,組用@  //禁止  
訪問控制
10. max connections = 最大連接數目
11. deadtime = 斷掉連接時間(分鐘,0爲不限制)
12. hosts allow =	允許主機  
13. hosts deny =	拒絕主機  允許優先

查看目錄權限:沒有寫權限
在這裏插入圖片描述
修改權限:[root@localhost /]# chmod 777 /public
清空主機連接。

在這裏插入圖片描述
重新連接進行測試
在這裏插入圖片描述

案例2

要求:
1、通過samba提供一個公共文件服務器,所有人都可以訪問並寫入,但是當前用戶不可以刪除和修改他人的文件。
2、技術部需要一個文件服務器,用於存放常用的軟件工具,所有人都可以訪問,但是隻有技術部可以寫入

配置文件中添加share目錄進行共享
[share]
        path = /share
        public = yes
        comment = file
        writable = yes
        Create mask = 0644
        directory mask = 755

[root@localhost /]# mkdir /share  #創建文件,修改文件權限
[root@localhost /]# vim /etc/samba/smb.conf
[root@localhost /]# ll -d /share
drwxr-xr-x. 2 root root 6 May  6 11:24 /share
[root@localhost /]# chmod 777 /share
[root@localhost /]# chmod o+t /share
[root@localhost /]# ll -d /share
drwxrwxrwt. 2 root root 6 May  6 11:24 /share

[root@localhost /]# systemctl restart nmb smb  # 測試

不同的用戶登錄後可以創建文件,不通用戶不能修改其他用戶創建的文件:其中2代表user2,1代表user1.

在這裏插入圖片描述
在這裏插入圖片描述
2.

修改配置文件,添加如下內容:
[soft]
        path = /soft
        public = yes
        comment = soft
        writable = no
        write list = @jishubu

[root@localhost ~]# mkdir /soft  創建文件
[root@localhost ~]# ll -d /soft
drwxr-xr-x. 2 root root 6 May  6 12:10 /soft  文件權限
[root@localhost ~]# groupadd jishubu     創建技術部組
[root@localhost ~]# gpasswd -M user2,redhat jishubu  將用戶添加到組內  
[root@localhost ~]# setfacl -m g:jishubu:rwx /soft   修改文件權限
[root@localhost ~]# ll -d /soft
drwxrwxr-x+ 3 root root 15 May  6 12:14 /soft    
[root@localhost ~]# systemctl restart nmb smb    重啓測試

這裏記得清理緩存
用戶1:
在這裏插入圖片描述
user2:具有權限,在組技術部當中。
在這裏插入圖片描述
基於Linux可以訪問,在linux中測試:
在這裏插入圖片描述
訪問會詢問是否用戶登錄或者匿名登錄。
在這裏插入圖片描述
根據設置的文件權限

在linux命令行下訪問:

[root@localhost ~]# yum install samba-client -y   安裝客戶端
[root@localhost ~]# smbclient -L //192.168.168.157   查看共享的目錄
Enter SAMBA\root's password:
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        share           Disk      file
        soft            Disk      soft
        IPC$            IPC       IPC Service (Samba Server Version 4.7.1)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

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

        Workgroup            Master
        ---------            -------
        MYGROUP              LOCALHOST

[root@localhost ~]# smbclient //192.168.168.157/share -U user1   ##去掉-L,ip後指定目錄,接用戶
Enter SAMBA\user1's password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed May  6 11:32:02 2020
  ..                                 DR        0  Wed May  6 12:10:55 2020
  2                                   D        0  Wed May  6 11:30:18 2020
  1                                   D        0  Wed May  6 11:32:00 2020

                36805060 blocks of size 1024. 32572008 blocks available
smb: \> exit

#掛載使用資源
mount //192.168.168.157/share /share -o username=user1,password=redhat
#開機自動掛載
//192.168.168.157/share	/pub	cifs	defaults,username=user1,password=redhat      0  0 

掛載後:在目錄下操作和前面沒有區別。
在這裏插入圖片描述
在服務端可以清楚的看到登陸者創建的文件
在這裏插入圖片描述

實例

  1. 建立共享目錄student,它的本機路徑爲/home/student,只有teacher組的用戶可以讀寫該目錄,student用戶只能讀取。


[root@localhost ~]# mkdir /home/student   #創建文件
[root@localhost ~]# groupadd students   ##創建組
[root@localhost ~]# groupadd teacher
[root@localhost ~]# useradd -g students user11   組中添加用戶
[root@localhost ~]# useradd -g teacher user22
[root@localhost ~]# smbpasswd -a user11  # 添加爲samba用戶
New SMB password:
Retype new SMB password:
Added user user11.
[root@localhost ~]# smbpasswd -a user22
New SMB password:
Retype new SMB password:
Added user user22.

[root@localhost ~]# chmod 757 /home/student    ##修改文檔訪問權限
[root@localhost ~]# chmod g+s /home/student
[root@localhost ~]# ll -d /home/student/
drwxr-srwx. 2 root root 6 May  6 15:36 /home/student/
[root@localhost ~]# vim /etc/samba/smb.conf
###添加如下內容
[student]
        path = /home/student
        comment = student
        write list = @teacher
        valid users = @teacher @students
#####
[root@localhost ~]# systemctl restart smb nmb

測試:students組

在這裏插入圖片描述
teacher組,
在這裏插入圖片描述

  1. 公司有兩個部門,sales和market,兩個部門都有單獨的共享目錄,只可以總經理和相應部門員工訪問,並且公司員工禁止訪問非本部門的共享目錄。
[root@localhost ~]# mkdir /home/sales  ##創建部門共享目錄
[root@localhost ~]# mkdir /home/market
[root@localhost ~]# groupadd sales   ##創建組
[root@localhost ~]# groupadd market
[root@localhost ~]# useradd -g sales users  ##組內添加用戶
[root@localhost ~]# useradd -g market userm
[root@localhost ~]# useradd ceo    ##添加部門經理
[root@localhost ~]# passwd ceo
Changing password for user ceo.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# smbpasswd -a users   ##
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.

[root@localhost ~]# chgrp sales /home/sales/   ##修改目錄權限
[root@localhost ~]# chgrp market /home/market/
[root@localhost ~]# chown ceo /home/sales/
[root@localhost ~]# chown ceo /home/market/
[root@localhost ~]# chmod 770 /home/sales/
[root@localhost ~]# chmod 770 /home/market/
[root@localhost ~]# chmod g+s /home/sales/
[root@localhost ~]# chmod g+s /home/market/

在配置文件中添加如下內容:
[sales]
        path = /home/sales
        comment = sales
        write list = @sales ceo
        valid users = @sales ceo
        create mask = 0770
        directory mask = 0770
[market]
        path = /home/market
        comment = market
        write list = @market ceo
        valid users = @market ceo
        create mask = 0770
        directory mask = 0770



[root@localhost ~]# smbpasswd -a users ##將用戶添加爲samba用戶
New SMB password:
Retype new SMB password:
Added user users.
[root@localhost ~]# smbpasswd -a userm
New SMB password:
Retype new SMB password:
Added user userm.
[root@localhost ~]# smbpasswd -a ceo
New SMB password:
Retype new SMB password:
Added user ceo.

[root@localhost ~]# systemctl restart smb nmb
重啓進行測試。記得清理緩存。

sales下:
sales下的部門員工:
在這裏插入圖片描述
可以登錄到自己目錄下,不能去其他部門目錄
在這裏插入圖片描述

market下:
使用market下的用戶進行登錄:
在這裏插入圖片描述
同樣只能訪問自己所在部門目錄:
在這裏插入圖片描述
部門經理ceo:
部門經理ceo可以隨時訪問兩個部門的內容:
在這裏插入圖片描述
在這裏插入圖片描述

貪安穩就沒有自由,要自由就要歷些危險。只有這兩條路。

如果你也喜歡這篇博客,給他點個贊吧!

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