1. 程式人生 > >samba原始碼安裝以及環境配置

samba原始碼安裝以及環境配置

        Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程式構成。SMB(Server Messages Block,資訊服務塊)是一種在區域網上共享檔案和印表機的一種通訊協議,它為區域網內的不同計算機之間提供檔案及印表機等資源的共享服務。SMB協議是客戶機/伺服器型協議,客戶機通過該協議可以訪問伺服器上的共享檔案系統、印表機及其他資源。通過設定“NetBIOS over TCP/IP”使得Samba不但能與區域網絡主機分享資源,還能與全世界的電腦分享資源。

        這是一篇我在2011年7月21日寫的一篇文件,當時我在深圳一家公司實習,實習的內容與samba相關,那時靠著自己上網找資料學習samba的原始碼安裝和配置,當時參考了很多網上的博文都沒有看到一篇很完整的博文。很多博文作為案例使用的samba版本居然是2.x.x的,與我使用的3.5.9版本存在很多特性差異。但是參考這些博文都沒有能夠讓我的samba順利的執行起來,最後結合samba原始碼包中自帶的一些文件才最終解決samba的安裝問題。所以,就寫了這篇文件進行總結。今天不小心翻到這篇文件,於是將其放上來,希望能對有需要的朋友起到一點作用。

一、獲取原始碼包並進行解壓

從samba的官方網站可以下載最新的samba原始碼包。下面我們以samba-3.5.9.tar.gz的原始碼包作為案例進行解析。本例中,我們將原始碼包放在目錄/home/samba下,然後執行下面的命令進行解壓縮。

# tar –xzvf samba-3.5.9.tar.gz 

二、配置configure

對原始碼包進行解壓縮後,進入目錄

# cd /home/samba/samba-3.5.9/source3

然後執行下面的命令進行配置。

# ./configure

可能在剛開始時,該目錄下沒有configure檔案,此時可先執行下面的命令

# ./autogen-sh

此時要求系統安裝了autoconf、automake等工具。

在執行上面的配置命令之前,我們可以通過命令

# ./configure –-help

來檢視配置命令的一些選項。

三、生成與安裝make && make install

在環境配置命令./configure成功執行後,可以執行命令

# make

來生成二進位制可執行檔案,這可能需要兩到三分鐘。成功生成可執行檔案後,可以通過下面命令

#make install

來進行安裝。系統預設的安裝路徑是/usr/local/samba

四、配置動態連結庫路徑

安裝完成後,我們需要配置動態連結庫路徑,因為執行samba的進行smbd和nmbd需要到目錄/usr/local/samba/lib下的動態連結庫檔案。但是該目錄不是系統預設的動態連結庫檔案搜尋路徑,於是我們需要將該目錄新增到檔案ld.so.conf中。執行下面的命令

# vi /etc/ld.so.conf

開啟ld.so.conf檔案,並在該檔案中加入下面這一行內容。

/usr/local/samba/lib

然後執行命令

# ldconfig

來更新動態連結庫緩衝。

五、samba配置檔案smb.conf

samba在執行過程中需要用到配置檔案smb.conf。smb.conf配置檔案是samba最重要的配置檔案,該檔案定義了samba的安全機制、檔案共享和列印共享的目錄和引數以及其他一些系統配置功能。

配置檔案smb.conf的預設路徑是/usr/local/samba/lib/smb.conf,我們可以在執行smbd程序時,通過-s選項來執行特定的smb.conf檔案(具體說明見下一節),一般不推薦使用-s選項,因為其配置工具,如smbclient、testparm等預設都是讀取/usr/local/samba/lib/smb.conf檔案。下面我們以一個簡單的配置檔案進行說明,其路徑為/etc/samba/smb.conf。

[global]
         workgroup = MYGROUP
         server string = Samba Server %v
         security = user
         log file = /var/log/samba/%m.log
         passdb backend = smbpasswd
         smb passwd file = /etc/samba/smbpasswd
[root]
         path = /
         valid users = root
         writeable = yes
[public]
         path = /data
         guest ok = yes
         read only = yes

上面配置檔案定義了root和public兩個檔案共享服務。關於上面這個配置檔案的具體細節,我們這裡不做詳細的論述。這裡主要說明的一點:在samba 3.0.23版本以前驗證使用者密碼的預設backend是smbpasswd,而3.0.23版本之後的預設backend是tdbsam。我們可以通過引數passdb backend來選擇特定的backend。在使用smbpasswd時預設讀取的密碼檔案時/usr/local/samba/private/smbpasswd,我們可以通過smb passwd file來指定特定的密碼檔案。

在配置完smb.conf檔案後,我們可以執行testparm(目錄/usr/local/samba/lib下)命令來對smb.conf檔案進行語法檢查,其會檢測出哪些引數名無法識別等問題。

六、啟動samba

samba有兩個主要的程序smbd和nmbd。smbd程序提供了檔案和列印服務,而nmbd則提供了NetBIOS名稱服務和瀏覽支援,幫助SMB客戶定位伺服器,處理所有基於UDP的協議。

配置smb.conf檔案後,在開始執行samba的服務程序之前。我們需要先做一些準備工作。執行smbpasswd命令(在目錄/usr/local/samba/bin下)

# ./smbpasswd –a root

向smb.conf檔案中指定的/etc/samba/smbpasswd檔案中新增root使用者以及密碼資訊。關於smbpasswd檔案的詳細內容介紹見相關文件。

然後執行命令

# service iptables stop

關閉防火牆,因為防火牆可能會阻止使用者訪問該機器。下面是執行samba的服務程序smbd和nmbd

# /usr/local/samba/sbin/smbd –D –s /etc/samba/smb.conf
# /usr/local/samba/sbin/nmbd –D –s /etc/samba/smb.conf

上面的-D選項指定smbd和nmbd以守護程序的方式啟動,並且通過-s選項指定了特定的配置檔案/etc/samba/smb.conf。以守護程序方式啟動smbd和nmbd的優勢是響應速度快,但是要關閉的話只能kill掉。當然我們可以通過指令碼來執行這些操作,這裡就不提供指令碼了。

七、smbclient進行測試檢查

在啟動samba之後,我們可以在本機使用smbclient(目錄/usr/local/samba/bin下)來進行測試。下面命令

# cd /usr/local/samba/bin
# ./smbclient –L //127.0.0.1

可以列出本samba伺服器所提供的服務列表,本例執行結果如下:

[[email protected] bin]# ./smbclient –L //127.0.0.1
Enter root’s password:
Domain=[MYGROUP]  OS=[Unix] Server=[Samba 3.5.9]

         Sharename                Type                  Comment
         ---------                -------               -------
         IPC$                     IPC                   IPC Service (Samba Server 3.5.9)
         public                   Disk                  
         root                     Disk

Domain=[MYGROUP]  OS=[Unix] Server=[Samba 3.5.9]     

         Server                             Comment
         -----------                        -------
         LOCALHOST                          Samba Server 3.5.9
        
         Workgroup                          Master
         ------------                       -------
         MYGROUP                            LOCALHOST

當然也可以通過smbclient來訪問samba伺服器提供的服務,其命令格式如下:

# ./smbclient “//serverAdderss/aservice” –U username

其中serverAddress是要訪問的samba伺服器的IP地址,aservice指定samba伺服器上提供的某個服務名稱,選項-U username指定要以哪個使用者名稱來訪問samba伺服器。例如

[[email protected] bin]# ./smbclient “//127.0.0.1/root” –U root
Enter root’s password:                                       ; 這裡輸入samba使用者root的密碼
Domain=[MYGROUP]  OS=[Unix] Server=[Samba 3.5.9]
smb: \>                                                      ; 訪問成功,輸入相關命令進行操作

上面個smb: \>表明了訪問成功,此時我們可以輸入一些命令來在samba伺服器上進行操作,比如ls、mkdir等。q或quit命令執行退出,並斷開連線。

八、在Windows客戶端訪問samba伺服器

在Windows客戶端,可以在網路上的芳鄰中通過新建網路上的芳鄰來訪問,或者在【開始】——【執行】中輸入\\192.168.1.34\root來訪問samba伺服器192.168.1.34上面提供的root服務。

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

PS:

        本篇轉載的文章,在本人動手搭建的samba檔案伺服器過程中提供了非常多的幫助和支援,在此對原文作者表示感謝!

        本人是在VMWare虛擬機器的Linux搭建samba檔案伺服器,Linux系統是CentOS release 6.4版本,使用最新版本samba原始碼編譯,會有各種各樣的問題,在configure時校驗標頭檔案時會報錯,即samba原始碼版本和系統版本不匹配。後來搜尋了一下,有人在CentOS 6.4上搭建過3.6.9版本的samba,但是本人在samba官方網頁中並沒有找到這個版本,找到了3.5.22版本,於是用該版本搭建。configure時在程式碼跟目錄中沒有找到configure檔案,根目錄中有兩個原始碼路徑source3和source4,我選擇了source3路徑中的原始碼,編譯安裝成功,最終在CentOS 6.4系統上搭建成功!