Samba文件服務器

Samba服務器和FTP服務器都是資源共享的兩種文件服務器,但Samba服務器通常用於局域網共享,而FTP服務器則用與internet中,

Samba在linux/unix系統中實現了SMB/CIFS網絡協議,使的跨平臺文件共享變的更加方便,適用Samba可以很好的解決不同系統之間的文件互訪問題。

samba的工作原理:

步驟1協議協商:

客戶端在訪問Samba服務器時,發送negprot指令數據包,告知目標計算機其支持的SMB類型。Samba服務器根據客戶端的情況,選擇最優的SMB類型,並做出迴應。

              --------negprot請求------->

客戶端                                              服務器

              --------negprot響應------->

步驟2.建立連接

當SMB類型確認後,客戶端會發送session setup指令數據包,提交帳號和密碼,請求與Samba服務器建立連接,如果客戶端通過身份驗證,Samba服務器會對session setup報文作出迴應,併爲用戶分配唯一的UID,在客戶端與其通信時使用。

              --------session setup &X請求------->

客戶端                                                服務器

              --------session setup &X響應------->

步驟3.訪問共享資源

客戶端訪問Samba共享資源時,發送tree connect指令數據包,通知服務器需要訪問的共享資源名,如果設置允許,Samba服務器會爲每個客戶端與共享資源連接分配TID,客戶端即可訪問需要的共享資源哈。

              --------tree connect &X請求------->

客戶端                                                 服務器

              --------tree connect &X響應------->

步驟4.斷開連接

共享使用完畢,客戶端向服務器發送tree disconnect報文關閉共享,與服務器斷開連接。

              --------tree disconnect請求------->

客戶端                                                  服務器

              --------tree disconnect響應------->


下面我就來搭建下Samba文件服務器:(在這裏我忽略了防火牆,特簡單就是把udp137-138端口,tcp139端口和445端口開放就可以)

(一)掛載光盤並安裝Samba包:

[root@localhost Server]# mount /dev/cdrom /mnt/

安裝下面四個包: rpm -ivh samba-*

samba-3.0.28-0.el5.8.i386.rpm(samba服務器端包)       

  samba-common-3.0.28-0.el5.8.i386.rpm(samba C/S都需要適用的公共文件)

samba-client-3.0.28-0.el5.8.i386.rpm(samba客戶端包)

samba-swat-3.0.28-0.el5.8.i386.rpm(web方式管理工具包)

samba主配置文件分析:vim /etc/samba/smb.conf


# SELINUX NOTES:(selinux選項,特別要注意也是不可訪問原因之一)
#
# If you want to use the useradd/groupadd family of binaries please run:
# setsebool -P samba_domain_controller on
#
# If you want to share home directories via samba please run:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory you want to share you should mark it as
# "samba-share_t" so that selinux will let you write into it.
# Make sure not to do that on system directories as they may already have
# been marked with othe SELinux labels.
#
# Use ls -ldZ /path to see which context a directory has
#
# Set labels only on directories you created!
# To set a label use the following: chcon -t samba_share_t /path

[global]                                                                                                                        //全局設置對整個samba服務器生效

        workgroup = MYGROUP                                //samba所在的 工作組或者是域

        server string = Samba Server Version %v            //服務器描述

;       hosts allow = 127. 192.168.12. 192.168.13.

我把這注釋行也拿出來因爲我覺得這行非常重要,“hosts allow”可以設置僅允許訪問共享的客戶機(ip地址、網絡地址的形式,多個地址之間用空格或者是逗號隔開),“hosts deny”可以設置僅拒絕訪問共享的的客戶端。例如僅允許192.168.168.0/24、173.17.0.0/16網段客戶段訪問可以設置成:hosts allow =192.168.168.  173.17. 0.

         security = user               //設置服務器的安全模式其共有五種

  這五種模式是:

1. share安全級別模式:可以匿名訪問     

2. user安全級別模式:需要提交合法的用戶名和密碼

3. server安全級別模式:提交到指定的一臺samba服務器上進行驗證,如出錯客戶端就會一user級別訪問,

4.domain安全級別模式:驗證工作服將由windows域控制器負責

5. ads安全級別模式:當samba服務器使用ads安全級別加入到windows域環境中,其就具備了domain安全級別模式中所有的功能並可以具備域控制器的功能。

       passdb backend = tdbsam

[homes]用戶目錄共享設置
        comment = Home Directories(共享目錄的註釋和說明信息)
        browseable = no(在網上鄰居中是否可見,如是no則是隱藏共享)
        writable = yes(是否可寫,read  only相反)
;       valid users = %S(設置訪問用戶,@組名)
;       valid users = MYDOMAIN\%S

[printers]

        comment = All Printers            //共享目錄的註釋和說明信息

        path = /var/spool/samba          //共享目錄在服務器中的路徑

        browseable = no                  //在網上鄰居中是否可見,如是no則是隱藏共享

        guest ok = no                    //是否可以匿名訪問
        writable = no                    //是否可寫

        printable = yes                 //每一個打印服務必須定義爲 printable = yes


案例一:將“/var/public/movies"目錄發佈爲共享文件夾,共享名爲movie(其實就是匿名訪問)

1.建立配置文件如下:

[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        # logs split per machine
        # max 50KB per log file, then rotate
        security = share     //將安全級別設置爲share
        passdb backend = tdbsam
        # the login script name depends on the machine name
        # the login script name depends on the unix user used
        # disables profiles support by specifing an empty path
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes
[movie]
        comment = this is a share file
        path = /var/public/movies
        browseable = yes
        guest ok = yes

        writable = yes

2.建立共享目錄:[root@ns1 samba]# mkdir -p /var/public/movies

爲了便於測試我們在目錄中建立多個文件mkdir /var/public/movies/{aa,bb,cc}.file    //我們在此建立了aa,bb,cc文件

3.檢查配置文件格式是否正確:

[root@ns1 samba]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE

說明配置沒有錯誤!!!

啓動samba服務:

[root@ns1 samba]# service smb restart

4因爲selinux爲強制,所以設置如下:



修改共享文件夾selinux上下文: chcon -t samba_share_t /var/public/movies/

5.在windowns下測試匿名效果:

22fc8dc871fedd6f9d163dcc.jpg

我們剛纔不是在配置文件中設置writable = yes了嗎?我們測試下看我們能不能寫入??

25382f0919c8f5b97b8947ac.jpg
結果是不能寫入!!!

原因在與網絡共享權限是有寫入權限了,但是本地權限中我查看了下只有執行和讀取,我們加寫入權限給本地目錄:

[root@ns1 ~]# chmod o+w /var/public/movies/

在看看結果:

fdd12e6c5415f6a9e7113ad3.jpg

匿名驗證成功了!!!


案例二:將“/var/public/movies"目錄發佈爲共享文件夾,共享名爲movie,授權只能vina、test1和root組訪問,並將test1用戶映射爲aa、bb等用戶,root用戶有寫入權限,通過訪問建立的文件夾的默認權限是744,文件夾的默認權限爲600


1.建立配置文件如下:

[global]
        workgroup = WORKGROUP
        server string = Samba Server Version %v
        # logs split per machine
        # max 50KB per log file, then rotate
        security = user                   //設置安全級別爲user
        passdb backend = tdbsam
        # the login script name depends on the machine name
        # the login script name depends on the unix user used
        # disables profiles support by specifing an empty path
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
          username map = /etc/samba/smbusers              //用戶名稱映射時必須由此項

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes

[movie]
        comment = this is a share
        path = /var/public/movies
        guest ok = no                         //相當於是public,是否可以匿名訪問
        read only = no
        valid users = vina,test1,@root        //授權用戶和組
        write list = root                     // 設置只有root用戶可寫
        directory mask = 0744                 //建立文件夾的默認權限是744
         create mask = 0600                   // 創建文件的默認權限是600

檢查配置文件的格式是否正確:

[root@ns1 public]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[movie]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
說明配置文件的格式上不存在任何問題!

2.建立samba用戶數據庫:

[root@ns1 public]# useradd vina
[root@ns1 public]# smbpasswd -a vina
New SMB password:
Retype new SMB password:
Added user vina.

------依次添加root等用戶

smbpasswd 參數:

-h顯示smbpasswd的幫助命令

-a添加指定的samba用戶

-d禁用指定的samba用戶

-e啓用指定的用戶帳號

-x刪除指定的用戶帳號

不加任何參數時是修改samba用戶密碼

3.做別名映射,將test1映射成aa,bb,cc等用戶

[root@ns1 samba]# vim smbusers

# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
test1 = aa bb cc

4重新啓動服務:service smb restart

5驗證效果:(我剛開始服務器是192.168.0.1後來我改了服務器IP地址爲192.168.0.60~~)

vina登錄samba服務器

0b2b605efec0e416853524fd.jpg

我們接下來在windowns上做測試,如果先是在windowns上做的必須斷開共享:

C:\Users\jia>net use file://192.168.0.60/movie /delete
\\192.168.0.60\movie 已經刪除。

用root登錄:

f1ba7928e3f82f638a82a1ff.jpg
可以創建文件和文件夾,在來看看文件和文件夾的權限:

ceca761ea9190975203f2ee3.jpg

哈哈~文件夾默認權限的權限是744,文件默認權限是600,成功了!!

接下來驗證名稱映射:(注意別名aa和bb等不是系統中的用戶)

aa登錄

00a42bac91f200d9cbefd0f9.jpgaa登錄成功!

bb登錄

400c45071891c6506a60fbed.jpgbb登錄成功
到此就做完了實現了案例中的描述~~


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