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 使用下面兩個服務來控制上面兩步驟,分別是:

  1.nmbd

  • 這個daemon是用來管理工作組,NetBIOS name等等的解析。
  • 主要利用 UDP 協議開啟 port 137 138 來負責名稱解析的任務。

  2.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 的架構是比較適合 :

  1. 小型的網域
  2. 沒有需要常常進行檔案數據分享的網絡環境
  3. 每個使用者都獨自擁有該計算機的擁有權

(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服務整體運行環境有關的選項,它的設置項目是針對所有共享資源的。

1、workgroup = WORKGROUP

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

2、server string = Samba Server Version %v

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

3、netbios name = smbserver

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

4、interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24

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

5、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

6、hosts allow=172.17.2.0/255.255.0.0

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

7、hosts allow=@example.com

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

8、max connections = 0

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

9、deadtime = 0

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

10、time server = yes/no

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

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

說明:設置Samba Server日志文件的存儲位置以及日志文件名稱。在文件名后加個宏%m(主機名),表示對每台訪問Samba
Server的機器都單獨記錄一個日志文件。如果pc1、pc2訪問過Samba
Server,就會在/var/log/samba目錄下留下log.pc1和log.pc2兩個日志文件。

12、max log size = 50

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

13、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)來完成認證。

14、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
15、encrypt passwords = yes/no

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

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

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

17、username map = /etc/samba/smbusers

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

18、guest account = nobody

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

19、socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

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

20、domain master = yes/no

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

21、local master = yes/no

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

22、preferred master = yes/no

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

23、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值設大些。

24、domain logons = yes/no

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

25、logon script = %u.bat

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

26、wins support = yes/no

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

27、wins server = wins服務器IP地址

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

28、wins proxy = yes/no

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

29、dns proxy = yes/no

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

30、load printers = yes/no

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

31、printcap name = cups

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

32、printing = cups

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

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

[共享名]

1、comment = 任意字符串

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

2、path = 共享目錄路徑

說明:path用來指定共享目錄的路徑。可以用%u、%m這樣的宏來代替路徑里的unix用戶和客戶機的Netbios名,用宏表示主要用於[homes]
共享域。例如:如果我們不打算用home段做為客戶的共享,而是在/home/share/下為每個Linux用戶以他的用戶名建個目錄,作為他的共享目錄,這樣path就可以寫成:path = /home/share/%u;

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

3、browseable = yes/no

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

4、writable = yes/no

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

5、available = yes/no

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

6、admin users = 該共享的管理者

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

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

說明:valid users用來指定允許訪問該共享資源的用戶。
例如:valid users = david,@dave,@tech(多個用戶或者組中間用逗號隔開,如果要加入一個組就用“@組名”表示。)

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

說明:invalid users用來指定不允許訪問該共享資源的用戶。
例如:invalid users = root,@bob(多個用戶或者組中間用逗號隔開。)

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

說明:write list用來指定可以在該共享下寫入文件的用戶。
例如:write list = david,@dave

10、public = yes/no

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

11、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,該用戶具有寫權限。

 

 

添加成功:

 


免責聲明!

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



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