1. 程式人生 > >Linux下samba的安裝與配置

Linux下samba的安裝與配置

一、簡介
    Samba,是在Unix上實現SMB(Server Message Block)的一個工具套件。而SMB通常是windows用來實現共享的,包括檔案和印表機等。而Unix上裝上SMB,則使得Unix能夠和windows連線在一起,實現兩者的資源互通。
二、安裝
$rpm -qa | grep samba        #檢視系統是否已安裝samba
$yum install samba              #使用yum軟體包管理工具安裝samba
三、常用命令
1.service smb status        #檢視smd服務的狀態
2.service smb start           #執行smb服務
3.service smb stop           #停止服務
4.service smb restart       #重啟服務,但在實際中一般不採用
5.service smb reload       #過載服務,在實際中較常用,不用停止服務
四、配置
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/掛載點