Samba服務器搭建與配置


Samba服務器搭建與配置

Samba服務簡介

Samba的起源:

對於windows的網上鄰居來講,共享文件的方式用的是SMB和CIFS協議以及NETBIOS協議Linux/Unix之間用的是NFS協議。

 

​ 但是Linux和Windows之間是不能共享的,所以澳大利亞國立大學的Andrew Tridgell,決定開發一款軟件,這款軟件就是為了實現不同的系統之間互相共享文件的,於是一款叫做SMB的軟件橫空出世了,但是這個名字不能被注冊成商標,因為已經有SMB協議了,於是作者給名字上加了兩個A,就成了我們即將使用的功能強的文件共享服務器: SAMBA。

 

什么是Samba:

Samba是一個能讓Linux系統應用Microsoft網絡通訊協議的軟件,而SMB是Server Message Block的縮寫,即為服務器消息塊 ,SMB主要是作為Microsoft的網絡通訊協議,后來Samba將SMB通信協議應用到了Linux系統上,就形成了現在的Samba軟件。后來微軟又把 SMB 改名為 CIFS(Common Internet File System),即公共 Internet 文件系統,並且加入了許多新的功能,這樣一來,使得Samba具有了更強大的功能。

 

Samba的功能:

Samba最大的功能就是可以用於Linux與windows系統直接的文件共享和打印共享,Samba既可以用於windows與Linux之間的文件共享,也可以用於Linux與Linux之間的資源共享,由於NFS(網絡文件系統)可以很好的完成Linux與Linux之間的數據共享,因而 Samba較多的用在了Linux與windows之間的數據共享上面。

 

Samba的工作原理:

SMB是基於客戶機/服務器型的協議,因而一台Samba服務器既可以充當文件共享服務器,也可以充當一個Samba的客戶端,例如,一台在Linux 下已經架設好的Samba服務器,windows客戶端就可以通過SMB協議共享Samba服務器上的資源文件,同時,Samba服務器也可以訪問網絡中 其它windows系統或者Linux系統共享出來的文件。

 

​ 事實上, 就像 NFS 是架構在 RPC Server 上面一樣, SAMBA 這個文件系統是架構在 NetBIOS (Network Basic Input/Output System, NetBIOS) 這個通訊協議上面所開發出來的。

 

​ Samba在windows下使用的是NetBIOS協議,如果你要使用Linux下共享出來的文件,請確認你的windows系統下是否安裝了NetBIOS協議。

 

組成Samba運行的有兩個服務,一個是SMB,另一個是NMB;SMB是Samba 的核心啟動服務,主要負責建立 Linux Samba服務器與Samba客戶機之間的對話, 驗證用戶身份並提供對文件和打印系統的訪問,只有SMB服務啟動,才能實現文件的共享,監聽139 TCP端口;而NMB服務是負責解析用的,類似與DNS實現的功能,NMB可以把Linux系統共享的工作組名稱與其IP對應起來,如果NMB服務沒有啟動,就只能通過IP來訪問共享文件,監聽137和138 UDP端口。

 

Samba使用的 damons:

NetBIOS 機器間的溝通

 

取得對方主機的NetBIOS name 定位該主機所在:

 

利用對方給予權限存取可用資源

 

SAMBA 使用下面兩個服務來控制上面兩步驟,分別是:

 

nmbd

這個daemon是用來管理工作組,NetBIOS name等等的解析。

主要利用 UDP 協議開啟 port 137 138 來負責名稱解析的任務。

smbd

這個daemon主要用來管理SAMBA主機分享的目錄,檔案與打印機等等。

主要利用可靠的TCP協議來傳輸數據,開放端口為139.

所以SAMBA每次啟動至少都需要有這個daemon,而當我啟動了SAMBA之后,主機系統就會啟動137,138 這兩個UDP 及139這個TCP端口。

 

Samba聯機模式介紹:

兩種最常見的局域網的聯機模式

peer/peer(對等模式)

domain model(主控模式)

(1)peer/peer (workgroup model,對等模式)

圖:對等模式原理

 

 

使用 peer/peer 的架構的好處是每部計算機均可以獨立運作,而不受他人的影響!不過, 缺點就是當整個網域內的所有人員都要進行數據分享時,光是知道所有計算機里面的賬號與密碼,就會很傷腦筋了! 所以, Peer/Peer 的架構是比較適合 :

小型的網域

沒有需要常常進行檔案數據分享的網絡環境

每個使用者都獨自擁有該計算機的擁有權

(2)domain model(主控模式)

圖:主控模式原理

 

 

將所有的賬號與密碼都放置在一部主控計算機 (Primary Domain Controller, PDC) 上面,在我的網域里面,任何人想要使用任何計算機時,都需要在屏幕前方輸入賬號與密碼,然后通通藉由 PDC 服務器的辨識后,才給予適當的權限。也就是說,不同的身份還具有不一樣的計算機資源權限。

 

Samba的常見應用:

Samba能做什么?

 

分享檔案與打印機服務

可以提供用戶登入Samba主機時的身份認證,以提供不同身份者的個別數據。

可以進行windows網絡上的主機名解析

可以進行裝置的分享

Samba服務器的應用實例:

 

利用軟件直接編修WWW主機上面的網頁數據

用FTP修改,后上傳;不方便,很有可能傳上去舊版本的。

在線修改比較能迅速看到結果。

做成可直接聯機的文件服務器

因為每個人登陸的賬戶名不同,這樣對目錄的權限也不同,實現權限控制。

Samba服務器的搭建

第一步:安裝Samba服務

[root@localhost ~]# yum -y install samba*

[root@localhost ~]# systemctl start smbd

Failed to start smbd.service: Unit not found.

[root@localhost ~]# systemctl start smb

[root@localhost ~]# systemctl enable smb

[root@localhost ~]# firewall-cmd --permanent --add-service=samba

success

[root@localhost ~]# firewall-cmd --reload

success

Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.

[root@localhost ~]# getenforce

Permissive

 

安裝包說明:

samba-common //主要提供samba服務器的設置文件與設置文件語法檢驗程序testparm

samba-client //客戶端軟件,主要提供linux主機作為客戶端時,所需要的工具指令集

samba-swat //基於https協議的samba服務器web配置界面

samba

//服務器端軟件,主要提供samba服務器的守護程序,共享文檔,日志的輪替,開機默認選項Samba服務器安裝完畢,會生成配置文件目錄/etc/samba和其它一些samba可執行命令工具,/etc/samba/smb.conf是samba的核心配置文件。

 

第二步:Samba服務的配置

Samba服務的主要配置文件為:/etc/sambs/smb.conf。安裝后samba后,除了該文件還有/etc/sambs/smb.conf.example 文件作為參考。

 

[root@localhost ~]# vim /etc/samba/smb.conf

# See smb.conf.example for a more detailed config file or

# read the smb.conf manpage.

# Run 'testparm' to verify the config is correct after

# you modified it.

 

[global] #全局參數。

        workgroup =MYGROUP  

        #設定Samba Server所要加入的工作組或域

        security = user

              #安裝驗證方式,總共有四種

        passdb backend = tdbsam

        #定義用戶后台類型,總共有三種

        printing = cups

        printcap name = cups

        load printers = yes

        #設置在Samba服務啟動時是否共享打印機設備

        cups options = raw

        #打印機的選項

 

[homes]

        comment = Home Directories #描述信息

        valid users = %S, %D%w%S  #有效訪問用戶

        path = ~         #文件路徑

        browseable = No   #指定共享信息是否在“網上鄰居”中可見

        read only = No    #是否只讀

        inherit acls = Yes

 

[printers]

        comment = All Printers

        path = /var/tmp #共享文件的實際路徑。

        printable = Yes

        create mask = 0600

        browseable = No

 

[print$]

        comment = Printer Drivers

        path = /var/lib/samba/drivers

        write list = root

        create mask = 0664

        directory mask = 0775

Samba服務器的主要配置參數介紹:

主配置文件由兩部分構成:Global 部分和 Share 部分。

Global部分參數解釋:該設置都是與Samba服務整體運行環境有關的選項,它的設置項目是針對所有共享資源的。

workgroup = WORKGROUP

說明:設定 Samba Server 所要加入的工作組或者域

server string = Samba Server Version %v

說明:設定 Samba Server 的注釋,可以是任何字符串,也可以不填。宏%v表示顯示Samba的版本號。

netbios name = smbserver

說明:設置Samba Server的NetBIOS名稱。如果不填,則默認會使用該服務器的DNS名稱的第一部分。netbios name和workgroup名字不要設置成一樣了。

interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24

說明:設置Samba Server監聽哪些網卡,可以寫網卡名,也可以寫該網卡的IP地址。

hosts allow = 127. 192.168.1. 192.168.10.1

說明:表示允許連接到Samba Server的客戶端,多個參數以空格隔開。可以用一個IP表示,也可以用一個網段表示。hosts deny 與hosts allow 剛好相反。

例如:hosts allow=172.17.2.EXCEPT172.17.2.50

表示容許來自172.17.2.*的主機連接,但排除172.17.2.50

hosts allow=172.17.2.0/255.255.0.0

說明:表示允許來自172.17.2.0/255.255.0.0子網中的所有主機連接

hosts allow=@example.com

表示允許來自example.com網域的所有計算機連接

max connections = 0

說明:max connections用來指定連接Samba Server的最大連接數目。如果超出連接數目,則新的連接請求將被拒絕。0表示不限制。

deadtime = 0

說明:deadtime用來設置斷掉一個沒有打開任何文件的連接的時間。單位是分鍾,0代表Samba Server不自動切斷任何連接。

time server = yes/no

說明:time server用來設置讓nmdb成為windows客戶端的時間服務器。

log file = /var/log/samba/log.%m

說明:設置Samba Server日志文件的存儲位置以及日志文件名稱。在文件名后加個宏%m(主機名),表示對每台訪問Samba

Server的機器都單獨記錄一個日志文件。如果pc1、pc2訪問過Samba

Server,就會在/var/log/samba目錄下留下log.pc1和log.pc2兩個日志文件。

max log size = 50

說明:設置Samba Server日志文件的最大容量,單位為kB,0代表不限制。

security = user

說明:設置用戶訪問Samba Server的驗證方式,一共有四種驗證方式。

share:用戶訪問Samba Server不需要提供用戶名和口令, 安全性能較低。(在Redhat7上安裝,該選項已被棄用,選擇該選擇,服務不能啟動)

user:Samba Server共享目錄只能被授權的用戶訪問,由Samba Server負責檢查賬號和密碼的正確性。賬號和密碼要在本Samba Server中建立。

server:依靠其他Windows NT/2000或Samba

Server來驗證用戶的賬號和密碼,是一種代理驗證。此種安全模式下,系統管理員可以把所有的Windows用戶和口令集中到一個NT系統上,使用

Windows NT進行Samba認證, 遠程服務器可以自動認證全部用戶和口令,如果認證失敗,Samba將使用用戶級安全模式作為替代的方式。

domain:域安全級別,使用主域控制器(PDC)來完成認證。

passdb backend = tdbsam

說明:passdb backend就是用戶后台的意思。目前有三種后台:smbpasswd、tdbsam和ldapsam。sam應該是security account manager(安全賬戶管理)的簡寫。

smbpasswd:該方式是使用smb自己的工具smbpasswd來給系統用戶(真實用戶或者虛擬用戶)設置一個Samba密碼,客戶端就用這個密碼來訪問Samba的資源。smbpasswd文件默認在/etc/samba目錄下,不過有時候要手工建立該文件。

tdbsam:該方式則是使用一個數據庫文件來建立用戶數據庫。數據庫文件叫passdb.tdb,默認在/etc/samba目錄下。passdb.tdb用戶數據庫可以使用smbpasswd –a來建立Samba用戶,不過要建立的Samba用戶必須先是系統用戶。我們也可以使用pdbedit命令來建立Samba賬戶。pdbedit命令的參數很多,我們列出幾個主要的。

  pdbedit –a username:新建Samba賬戶

  pdbedit –x username:刪除Samba賬戶。

  pdbedit –L:列出Samba用戶列表,讀取passdb.tdb數據庫文件。

  pdbedit –Lv:列出Samba用戶列表的詳細信息。

  pdbedit –c “[D]” –u username:暫停該Samba用戶的賬號。

  pdbedit –c “[]” –u username:恢復該Samba用戶的賬號。

ldapsam:該方式則是基於LDAP的賬戶管理方式來驗證用戶。首先要建立LDAP服務,然后設置“passdb backend = ldapsam:ldap://LDAP Server

encrypt passwords = yes/no

說明:是否將認證密碼加密。因為現在windows操作系統都是使用加密密碼,所以一般要開啟此項。不過配置文件默認已開啟。

smb passwd file = /etc/samba/smbpasswd [如果之前設置的是smbpasswd模式的話]

說明:用來定義samba用戶的密碼文件。smbpasswd文件如果沒有那就要手工新建

username map = /etc/samba/smbusers

說明:用來定義用戶名映射,比如可以將root換成administrator、admin等。不過要事先在smbusers文件中定義好。比如:root = administrator admin,這樣就可以用administrator或admin這兩個用戶來代替root登陸Samba Server,更貼近windows用戶的習慣。

guest account = nobody

說明:用來設置guest用戶名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

說明:用來設置服務器和客戶端之間會話的Socket選項,可以優化傳輸速度。

domain master = yes/no

說明:設置Samba服務器是否要成為網域主瀏覽器,網域主瀏覽器可以管理跨子網域的瀏覽服務

local master = yes/no

說明:local master用來指定Samba Server是否試圖成為本地網域主瀏覽器。如果設為no,則永遠不會成為本地網域主瀏覽器。但是即使設置為yes,也不等於該Samba Server就能成為主瀏覽器,還需要參加選舉。

preferred master = yes/no

說明:設置Samba Server一開機就強迫進行主瀏覽器選舉,可以提高Samba Server成為本地網域主瀏覽器的機會。如果該參數指定為yes時,最好把domain master也指定為yes。使用該參數時要注意:如果在本Samba Server所在的子網有其他的機器(不論是windows NT還是其他Samba Server)也指定為首要主瀏覽器時,那么這些機器將會因為爭奪主瀏覽器而在網絡上大發廣播,影響網絡性能。如果同一個區域內有多台Samba Server,將上面三個參數設定在一台即可。

os level = 200

說明:設置samba服務器的os level。該參數決定Samba Server是否有機會成為本地網域的主瀏覽器。os level從0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果設置為0,則意味着Samba Server將失去瀏覽選擇。如果想讓Samba Server成為PDC,那么將它的os level值設大些。

domain logons = yes/no

說明:設置Samba Server是否要做為本地域控制器。主域控制器和備份域控制器都需要開啟此項。

logon script = %u.bat

說明:當使用者用windows客戶端登陸,那么Samba將提供一個登陸檔。如果設置成%u.bat,那么就要為每個用戶提供一個登陸檔。如果人比較多,那就比較麻煩。可以設置成一個具體的文件名,比如start.bat,那么用戶登陸后都會去執行start.bat,而不用為每個用戶設定一個登陸檔了。這個文件要放置在[netlogon]的path設置的目錄路徑下。

wins support = yes/no

說明:設置samba服務器是否提供wins服務。

wins server = wins服務器IP地址

說明:設置Samba Server是否使用別的wins服務器提供wins服務。

wins proxy = yes/no

說明:設置Samba Server是否開啟wins代理服務。

dns proxy = yes/no

說明:設置Samba Server是否開啟dns代理服務。

load printers = yes/no

說明:設置是否在啟動Samba時就共享打印機。

printcap name = cups

說明:設置共享打印機的配置文件。

printing = cups

說明:設置Samba共享打印機的類型。現在支持的打印系統有:bsd, sysv, plp, lprng, aix, hpux, qnx

Share部分參數解釋:該設置針對的是共享目錄個別的設置,只對當前的共享資源起作用。

[共享名]

comment = 任意字符串

說明:comment是對該共享的描述,可以是任意字符串。

path = 共享目錄路徑

說明:path用來指定共享目錄的路徑。可以用%u、%m這樣的宏來代替路徑里的unix用戶和客戶機的Netbios名,用宏表示主要用於[homes]

共享域。例如:如果我們不打算用home段做為客戶的共享,而是在/home/share/下為每個Linux用戶以他的用戶名建個目錄,作為他的共享目錄,這樣path就可以寫成:path = /home/share/%u;

用戶在連接到這共享時具體的路徑會被他的用戶名代替,要注意這個用戶名路徑一定要存在,否則,客戶機在訪問時會找不到網絡路徑。同樣,如果我們不是以用戶來划分目錄,而是以客戶機來划分目錄,為網絡上每台可以訪問samba的機器都各自建個以它的netbios名的路徑,作為不同機器的共享資源,就可以這樣寫:path= /home/share/%m 。

browseable = yes/no

說明:browseable用來指定該共享是否可以瀏覽。

writable = yes/no

說明:writable用來指定該共享路徑是否可寫。

available = yes/no

說明:available用來指定該共享資源是否可用。

admin users = 該共享的管理者

說明:admin users用來指定該共享的管理員(對該共享具有完全控制權限)。在samba 3.0中,如果用戶驗證方式設置成“security=share”時,此項無效。

例如:admin users =david,sandy(多個用戶中間用逗號隔開)。

valid users = 允許訪問該共享的用戶

 

說明:valid users用來指定允許訪問該共享資源的用戶。

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

 

invalid users = 禁止訪問該共享的用戶

 

說明:invalid users用來指定不允許訪問該共享資源的用戶。

例如:invalid users = root,@bob(多個用戶或者組中間用逗號隔開。)

 

write list = 允許寫入該共享的用戶

說明:write list用來指定可以在該共享下寫入文件的用戶。

例如:write list = david,@dave

 

public = yes/no

說明:public用來指定該共享是否允許guest賬戶訪問。

guest ok = yes/no

說明:意義同“public”。

 

第三步:(測試)共享一個/common目錄

要求:

在 服務器上配置 SMB 服務

您的 SMB 服務器必須是 STAFF 工作組的一個成員

共享 /common 目錄共享名必須為 common

只有 192.168.245.0/24內的客戶端可以訪問 common 共享

common 必須是可以瀏覽的

用戶 rob 必須能夠讀取共享中的內容,如果需要的話,驗證的密碼是 compede。

要求 rob 用戶以只讀的方式訪問該目錄,brian 可以用讀寫的方式來訪問該目錄,brian 密碼為 postroll。

 

配置如下:

[root@localhost ~]# pdbedit -x brian

[root@localhost ~]# pdbedit -x rob

[root@localhost ~]# userdel -r brian

[root@localhost ~]# userdel -r rob

[root@localhost ~]#

[root@localhost ~]# useradd -s /sbin/nologin brian

[root@localhost ~]# useradd -s /sbin/nologin rob

[root@localhost ~]# pdbedit -L

[root@localhost ~]# pdbedit -a brian

new password:

retype new password:

[root@localhost ~]# (echo compede; echo compede) | smbpasswd -a rob

New SMB password:

Retype new SMB password:

Added user rob.

[root@localhost ~]# pdbedit -L

brian:1012:

rob:1013:

[root@localhost /]# mkdir /commom

[root@localhost /]# vim /etc/samba/smb.conf

#做如下更改

[global]

        workgroup = STAFF

[common]

        path = /common

        public = yes

        browseable = yes

        write list = brian

        hosts allow = 192.168.245.0/24

 #做完以上操作后,重啟服務,放開防火牆即可。

 

在另一台Linux系統上測試掛載smb共享目錄:

要求:

通過 smb 多用戶的方式將共享目錄 common 掛載到/mnt/private

上。要求在對該共享目錄掛載時,以 rob 的身份進行操作。要求每次開機該共享目錄可以自動掛載

 

[root@localhost ~]# yum -y install samba-client cifs-utils

[root@localhost ~]# smbclient -L //192.168.245.128 -N

#通過該命令可匿名查看smb服務器共享的目錄

Anonymous login successful

Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.4.4]

 

        Sharename       Type      Comment

        ---------       ----      -------

        print$          Disk      Printer Drivers

        common          Disk     

        IPC$            IPC       IPC Service (Samba 4.4.4)

Anonymous login successful

Domain=[STAFF] OS=[Windows 6.1] Server=[Samba 4.4.4]

 

        Server               Comment

        ---------            -------

        LOCALHOST            Samba 4.4.4

 

        Workgroup            Master

        ---------            -------

        STAFF                LOCALHOST

        WORKGROUP            ðí├Î▒╩╝Ã▒¥

[root@localhost ~]# vim /root/cred.rob

username=rob

password=compede

[root@localhost ~]# vim /etc/fstab

#在該文件中添加如下語句

//192.168.245.128/common  /mnt/private    cifs   credentials=/roo

t/cred.rob,multiuser,sec=ntlmssp 0 0

[root@localhost ~]# mount -a

[root@localhost ~]# df -Th

Filesystem               Type      Size  Used Avail Use% Mounted on

/dev/mapper/rhel-root    xfs        17G  3.1G   14G  18% /

devtmpfs                 devtmpfs  1.4G     0  1.4G   0%

//192.168.245.128/common cifs       17G  3.9G   14G  23% /mnt/private

[root@localhost ~]# useradd brian

[root@localhost ~]# su - brian

[brian@localhost ~]$ echo postroll | cifscreds add 192.168.245.128

[brian@localhost ~]$ echo ok >> /mnt/private/rw.txt

 

在Windows上掛載smb的共享目錄:

第一步:打開windows的smb功能。

第二步:添加網絡映射

注意:要求添加憑證的時候,直接填寫smb服務器已經存在的賬號和密碼即可。這兒添加了brian,該用戶具有寫權限。

添加成功:

————————————————

https://blog.csdn.net/qq_38265137/article/details/83150450


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM