天天看點

Linux下samba的安裝與配置

背景    

      在window7下面虛拟了一個CentOS6.3,為了學習指令行就沒有裝圖形包,是以我的CentOS是黑屏的那種,呵呵,當然了,VMWare提供 的增強功能我就不能用了(或許能吧,我不知道怎麼設定?),正好,就借這個機會逼着自己把samba學習一下,說“逼”一點也不誇張,我從昨天下午6點到 現在8點了都沒合眼,當然不睡覺還有其他的原因。下面是我這一夜的成果,寫出來給大家看下。

一、簡介

    Samba,是在Unix上實作SMB(Server Message Block)的一個工具套件。而SMB通常是windows用來實作共享的,包括檔案和列印機等。而Unix上裝上SMB,則使得Unix能夠和 windows連接配接在一起,實作兩者的資源互通。

二、安裝

$rpm -qa | grep samba

$yum install samba,samba-client

三、常用指令

1.service smb status        #檢視smd服務的狀态

2.service smb start        #運作smb服務

3.service smb stop        #停止服務

4.service smb restart        #重新開機服務,但在實際中一般不采用

5.service smb reload        #重載服務,在實際中較常用,不用停止服務

6.pstree | grep smb

四、配置

4.1.基本配置

      samba的主要配置檔案放在/etc/samba/smb.conf檔案夾下。檔案可以分為兩大部分,第一部分是全局配置,第二部分是局部配置。下面是一個配置檔案及相關注釋:

[global]  #全局配置,配置檔案以[segname]分段,除了global影響全部段之外,各段之間互不影響

workgroup = MYGROUP    #samba的工作組

        server string = Samba Server Version %v    #samba的說明資訊

        netbios name =Aric    #簡單的說就是計算機名稱

        log file = /var/log/samba/%m.log    #日志檔案存放位置

        max log size = 10    #日志檔案大小,以M為機關

        security = share    #安全選項,可以是share,user,server,domain安全級别遞增

        encrypt passwords = yes    #密碼是否加密

        smb passwd file = /etc/samba/smbpasswd    #密碼檔案存放位置

        username map = /etc/samba/smbusers    #使用者檔案存放位置

[share]        #局部配置,[]裡面是段名,也就是我們的共享名

        comment = This is my shared folder.    #該共享的說明

        path = /home/share    #共享路徑

        writeable = yes        #共享檔案夾是否可寫

        browseable = yes    #是否可浏覽

        guest ok = yes        #跟public一樣,是否允許guest使用者

       create mode =0664    #建立檔案權限定制

      directory mode=0775    #建立檔案夾權限

      valid users=允許通路該共享的使用者

      invalid usrs=禁止通路的使用者,root,@group,@表示組    

     admin users=該共享的管理者

     write list=有寫權限的使用者 

    display charset=UTF-8

    unix charset=UTF-8

    dos charset=UTF-8  #這三個是避免亂碼的,dispaly是顯示目錄時的編碼,另外兩個跟名字對應。若dos下為zh_CN.GB2312.GBK。則3個全部設為cp936

4.2 配置檔案中的詳細解釋

4.2.1 samba的安全級别

    Linux下samba有四種安全級别,即Share、User、Server、Domain,它們的安全級别由低到高,在配置檔案中具體由 security參數指定。其中,Share級是指使用者不需要賬戶和密碼即可登入伺服器;User級是Samba伺服器預設的安全級别,是指伺服器負責檢 查登陸者的賬戶和密碼;Server級是指賬戶和密碼的檢查由另外的Samba或Windows伺服器負責;Domain級是指由一台Windows NT/2000域伺服器負責檢查賬戶和密碼。使用者在配置Samba伺服器時,可以根據所需要的不同安全等級來具體配置

4.2.2 samba的密碼存放方式

    passdb backend = tdbsam | passdb | smbpasswd 

    backend即使用者背景。有三種背景:smbpasswd、tdbsam和ldapsam。Sam即security account manager。

(1).smbpasswd: 該方式是使用smb工具smbpasswd給系統使用者(真實使用者或者虛拟使用者)設定一個Samba 密碼,用戶端就用此密碼通路Samba資源。也就是說用這種方法建立的永和可以是虛拟的,也就是Linux系統中不存在該使用者也可以。smbpasswd 存放在/etc/samba中,有時需要手工建立該檔案。

(2).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使用者賬号。

一般叫常用的用法是:

$useradd user1

$smbpasswd -a user1    #這裡可以改為pdbedit -a user1

$輸入user1的共享密碼

$确認user1的共享密碼

(3).ldapsam:基于LDAP賬戶管理方式驗證使用者。首先要建立LDAP服務,設定“passdb backend = ldapsam:ldap://LDAP Server”這個我也不太清楚,就不說了。

4.3.使用者映射

      由于我們在建立samba使用者時必須和系統使用者同名,這就意味着不安全(當然某些人很樂意看到這樣),但是,samba已經解決了這個問題,提供了使用者映射,這個檔案在/etc/samba/smbusers,

root=administrator

nobody=guest pcguest

test=prefer you

這樣就Ok了,錢兩行是為了友善windows使用者使用,最後一行則是遮蓋使用者資訊,也就是為了安全。

4.4. 常用的共享

[homes]共享預設會将使用者的主目錄共享,這是不安全的,是以我們要将其注釋,當然還有[netlogon]

五、常見問題

5.1.提示沒有權限通路

        前提是我們将security=share,即不要求賬号密碼,這樣還是不能通路,總是說沒有權限通路。這有以下幾種原因:

5.1.1 防火牆的問題 

        samba使用的端口在防火牆裡沒有添加例外,導緻samba服務不能夠使用,解決方法可以是

$iptables -F        #清除防火牆的規則

也可以通過setup,将samba使用的端口添加例外,最好用第二中方法,畢竟防火牆還要保證系統的安全。

(2)seLinux的問題

        這是系統本身的原因,我們安裝系統的時候安裝了selinux,而selinux禁止網絡上其他計算機對samba上的共享目錄進行寫操作,即使在smb.conf中允許了這項操作,解決方法是:

$setenforce 0

我在這上面可吃了不少苦頭。

(3)共享檔案夾權限的問題

        我們共享的路徑本身權限不正确,就是說我們在smb.conf配置設定的權限是可讀可寫,但是在Linux檔案系統下,該共享檔案夾卻是隻讀的,是以就出現了問題,我們一般講共享的檔案夾在Linux下降權限全部開放。

$chmod 777 /share

5.2.提示使用者名或則密碼不正确

     當我們将安全級别為user時,就需要輸入使用者名和密碼,但是使用者名密碼都是正确的,但是總是提示錯誤。這是因為我們在windos下輸入使用者名時,預設 是在windows域中,二我們的賬戶是在Linux建立的,是以是不對的,隻要将我們Linux主機的域名加載前面就行了。比如Linux下面的 user2,我們直接輸入user2可能就不對,我們必須将我們Linux主機的名字加在前面,如

hostname/user2

5.3.NT_STATUS_WRONG_PASSWORD

       當我們在Linux使用

$smbclient //192.168.102.133/share

Enter root's password:此處回車

Domain=[groupname] os=[Unix] Server=[Samba 3.5.10-125.el6]

Server not using user level security and no password supplied

tree connect failed:NT_STATUS_WRONG_PASSWORD

下面是配置檔案

[share]

    comment= user share

    path = /home/share

    browseable = yes

    writable = yes

    security = yes

應該不會出錯的,但是就是報錯啊,後來才知道,少了一行

    public =yes

因為,samba預設是不允許匿名使用者通路的

5.4.挂載windows共享檔案夾,smbmount不存在,smbfs無效的選項

    這裡簡單的提一下,我們可以再一挂載windows下的共享檔案夾,做法是先在windows下右擊檔案夾,選擇共享選項,然後共享給特定使用者。到Linux下

$ smbmount //windowsIP位址/共享名 挂載點 -o 選項1,選項2

但是提示smbmount不存在,yum也找不到,其實smbmount這個包太老了,已經淘汰了,是以肯定找不到的,及時找到了也不能用。可以用mount代替,

smbmount == mount -t smbfs ???    

其實,這也是不等的,因為smbfs也淘汰了,現在時代進步太快了,呵呵,smbfs即smb file system 已經由cifs(common internet file system)代替了,是以我們要用mount -t cifs代替。

最後指令式:

mount -t cifs -o username=xxx password=xxx //windowsIP位址/共享名 /mnt/挂載點

六 一些廢話

       由于這是我晚上寫的,精神可能不太好,是以難免有錯誤和不足之處,還希望大家指出來,我們一起進步!

繼續閱讀