這是一篇我在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服務器所提供的服務列表,本例運行結果如下:
[root@localhost 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服務器。例如
[root@localhost 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服務。
