Samba服務器簡介與快速配置指南
原創【51CTO專稿】Linux下進行資源共享有很多種方式,Samba服務器就是最常見的一種。Samba服務器可以讓Windows操作系統(Windows 2000/XP/2003等)用戶訪問局域網中Linux主機,就象訪問網上鄰居一樣方便。如圖1所示,圖中的服務器運行Samba服務器程序,其操作系統是Linux。該服務器通過Samba可以向局域網中的其他Windows系統提供文件服務。同時,在Linux服務器上還連接了一個共享打印機,打印機也通過Samba向局域網的其他Windows用戶提供打印服務。
圖1 由Samba提供文件和打印服務的局域網
1、Samba工作原理
Samba的工作原理是,讓Windows系列操作系統網絡鄰居的通訊協議——NETBIOS(NETwork Basic Input/Output System)和SMA(Server Message Block)這兩個協議在TCP/IP通信協議上運行,并且使用Windows的NETBEUI協議讓Linux可以在網絡鄰居上被Windows看到。其中最重要的就是SMB(Server Message Block)協議,在所有的諸如Windows Server 2003、Windows XP等Windows系列操作系統中廣為應用。Samba就是SMB服務器在類UNIX系統上的實現,目前可以在幾乎所有的UNIX變種上運行。
2、Samba服務器的功能
文件共享和打印共享是Samba最主要的功能。Samba為了方便文件共享和打印共享,還實現了相關的控制和管理功能。具體來說,Samba完成的功能有:
- 共享目錄:在局域網上共享某個或某些目錄,使得同一個網絡內的Windows用戶可以在網上鄰居里訪問該目錄,就跟訪問網上鄰居里其他Windows機器一樣。
- 目錄權限:決定每一個目錄可以由哪些人訪問,具有哪些訪問權限。Samba允許設置一個目錄讓一個人、某些人、組和所有人訪問。
- 共享打印機:在局域網上共享打印機,使得局域網的其他用戶可以使用Linux操作系統下的打印機。
- 打印機使用權限:決定哪些用戶可以使用打印機。
安裝和配置好了Samba服務器后,Linux就可以向局域網中的Windows用戶提供文件和打印服務了。
3、SMB協議
在NetBIOS出現之后,Microsoft就使用NetBIOS實現了一個網絡文件和打印服務系統,該系統基于NetBIOS設定了一套文件共享協議,Microsoft稱之為SMB(Server Message Block)協議。這個協議被Microsoft用于它們的Lan Manager和Windows服務器系統中,而Windows系統均包括這個協議的客戶軟件,因而這個協議在局域網系統中影響很大。
隨著Internet的流行,Microsoft希望將這個協議擴展到Internet上,成為Internet上計算機之間相互共享數據的一種標準。它將原有的幾乎沒有多少技術文檔的SMB協議進行整理,重新命名為CIFS(Common Internet File System)。因此,為了讓Windows和UNIX計算機相集成,最好的辦法即是在UNIX中安裝支持SMB/CIFS協議的軟件,這樣Windows客戶就不須要更改設置,就能如同使用Windows NT服務器一樣,使用UNIX計算機上的資源了。
下面介紹Samba的安裝、簡易配置以及啟動和停止的指令。
#p#
4、安裝Samba
用戶在主流的Linux版本(如Fedora和CentOS下)都可以采用如下命令進行安裝:
#yum -y install samba
在創建配置文件以后(一般情況下,安裝好Samba軟件后,其配置文件為缺省狀態),需要測試Samba正確性。首先確認客戶和服務器之間可以互通。如果網絡不能工作,則Samba必然不能工作。
我們使用testparm程序。testparm是一個簡單的程序,用于檢查/etc/smb.conf文件的內部正確性。如果該文件報告沒有問題,則可以確定smbd可以成功地加載該配置文件。請注意:使用testparm并不能保證在配置文件中指定的服務可用或者工作正常。這種測試只保證Samba可以讀取和理解該配置文件。
testparm命令行如下:
testparm [configfile [hostname hostip]]
當smb.conf文件不在默認位置時,使用configfile可以(/etc/smb.conf)指明其位置。可選參數hostnamehostip指示testparm查看該主機是否有權限訪問smb.conf文件中提供的服務。如果指定hostname,則必須還指定該主機的IP地址。否則結果不可預知。
下面的例子演示了testparm運行的輸出。如果有某些錯誤,testparm程序會給出特定的錯誤消息報錯:
//測試smb.conf文件配置是否正確 //該測試只能測試smb.conf文件配置是否正確,并不能保證Samba服務器正常工作 #testparm smb.conf gjspring 15.26.40.9 Load smb config file from smb.conf Processing section “[home]” Processing section “[GONGsprn]” Load services OK . Allow connection from gjspring(15.26.40.9)to homes. Allow connection from gjspring(15.26.40.9)to GONGsprn.
5、啟動及關閉Samba服務器
Samba服務器的啟動有兩種方式,一種是Linux終端命令行形式,一種是使用Linux提供的System Services方式。下面將分別介紹這兩種啟動方式。
(1)Samba的命令行啟動和關閉
安裝并配置好Samba后,可以在Linux終端將Samba啟動,也可通過終端命令行將已經啟動的Samba服務關閉。若要啟動Samba,必須以管理員身份登錄Linux,如果是以普通用戶身份登錄Linux,可以在終端輸入如下命令切換到管理員身份:
#su root //暫時切換到系統管理員身份登錄系統,系統會提示用戶輸入root密碼
切換到root用戶后,在命令行輸入如下命令可啟動Samba:
#smbd start //啟動samba服務器
smbd是Samba的服務守護進程,時刻偵聽網絡的文件和打印服務請求,該程序默認安裝在/usr/sbin/目錄下。一般情況下,該目錄是系統默認目錄,也就是說如果shell在用戶當前目錄下找不到輸入的命令時,系統會自動到/usr/sbin/目錄下查找輸入的命令。如果該目錄沒有設置成系統默認目錄,用戶也可以手動將當前目錄更改到該目錄,然后執行smbd守護程序。
同理,若用戶欲關閉Samba服務,可以在命令行輸入如下命令:
#smbd stop //停止samba服務器
系統將中止smbd守護進程,局域網內的Windows用戶將不能再訪問該系統提供的文件或打印服務。
在某些特定情況下,用戶可能希望重新啟動Samba服務器,用戶可以先關閉Samba服務器,然后再啟動服務器,過程如下:
#smbd stop //停止samba服務器 #smbd start //啟動samba服務器
Samba為這種操作提供了簡便操作方式如下:
#smbd restart //啟動samba服務器
Samba服務器由兩個守護程序組成,smbd和nmbd.smbd守護程序提供文件和打印共享服務,nmbd守護程序提供NetBIOS有名服務器支持。可以從init腳本或者xinetd作為系統服務運行Samba。因為RedHat默認在每次引導系統時從init腳本啟動SMB服務,而不是從xinetd作為服務引導,因此可以使用以下命令啟動或者停止SMB服務器:
#/etc/rc.d/init.d/smb start #/etc/rc.d/init.d/smb stop
(2)在System Services中啟動和關閉Samba服務
Linux提供了System Services方式啟動或關閉系統服務。如果用戶系統已經安裝Samba服務,則可以在System Services窗口中看到smb服務選項。在System Services中啟動Samba服務的過程如下:
- 打開System Services窗口,在Linux終端窗口中輸入setup命令,Linux出現Text Mode Setup Utility窗口。在Text Mode Setup Utility窗口中選中System Services菜單項。如圖2所示。
- 在System Services窗口選中smb菜單項即可。
圖2 System Services窗口
到這里為止,Samba服務器的準備工作基本就完成了。接下來就是要通過Samba服務器實現Linux與Windows之間的互訪。
#p#
6、Linux和Windows文件互訪
Samba共享可以由SMB客戶在Windows或Linux平臺訪問。Windows訪問Linux系統共享文件一般通過網絡鄰居或Windows的IE瀏覽器;Linux訪問Windows系統下共享文件一般通過smbclient和smbmount命令實現。
(1) Windows客戶使用Linux系統共享文件
一個正確配置的Samba共享可以通過Windows網絡鄰居或Windows的IE瀏覽器訪問。其訪問路徑一般具有如下格式:
網上鄰居\整個網絡\工作組名\Linux機器名\Linux系統下目錄
如果有問題,最值得懷疑的是Windows還不知道Samba服務器、用戶和口令大小寫的問題以及明文和加密口令問題。如果是Windows還不知道Samba服務器,則在找到該計算機的Windows窗口刷新屏幕,等待幾分鐘或者重新引導Windows客戶。如果是用戶和口令大小寫的問題,則在[global]段中臨時將用戶名級和口令級設置足夠大,如100。如果是明文和加密口令問題則在[global]段中設置encrypt passwords=yes和smb passwdfile=/etc/smbpasswd。
(2)用smbclient工具訪問局域網上的Windows系統
在Linux系統下訪問局域網上其他系統(包括Windows系統和Linux系統)的共享文件,有很多種不同的方式。下面我們先介紹smbclient工具。
用smbclient工具可以訪問局域網上的Windows系統的SMB共享。smbclient提供一個類似FTP的界面,允許與另一個運行SMB服務器的網絡共享的計算機進行文件傳輸。mbclient將另一個共享作為本地目錄加載。smbclient提供命令行選項查詢服務器可用的共享目錄或者交換文件。關于所有命令行選項的詳細信息,參考smbclient手冊頁。表1列出了smbclient工具最常用的一些命令及其功能。例如可使用如下命令列出計算機15.26.40.9上所有共享文件:
#smbclient –L 15.26.40.9
其中,- L參數要求列表輸出,15.26.40.9是欲訪問機器的IP地址,也可以使用任何可以解析為該IP地址的機器名。若要傳輸一個文件,必須首先使用以下命令連接到Samba服務器:
#smbclient //15.26.40.9/homes -U gong
其中,參數//15.26.40.9/homes指定另一臺計算機上的遠程服務。通常是一個文件系統目錄或者打印機。任何解析為該IP地址的名字都可以替換該IP地址。-U選項允許指定希望用于連接的用戶名。還有許多其他的smbclient命令配置,詳細的信息請參閱smbclient手冊頁。如果該用戶需要口令,則smbclient工具提示輸入口令,然后出現如下提示:
smb: \
\表示當前工作目錄。下面列出smbclient的所有命令參數如表1所示:
表1 smbclient的參數及其含義
參 數 |
含 義 |
?或help [命令] |
提供命令的幫助消息,當不指定命令時提供一般的幫助 |
![shell命令] |
執行指定的shell命令或者為用戶提供shell提示符 |
cd [目錄] |
更改服務器上的指定目錄(不是本地計算機)。如果不指定目錄,則smbclient報告當前的工作目錄 |
lcd[目錄] |
在本地計算機上更改到指定的目錄。如果不指定目錄,則smb-client報告本地計算機上當前的工作目錄 |
el[文件] |
如果用戶擁有權限,則刪除服務器上的指定文件。文件可以包含通配符 |
dir或ls[文件] |
列表顯示指定的文件 |
exit或quit |
退出smbclient程序 |
get |
獲得指定的遠程文件并在本地服務器上保存該文件。如果指定了本地名稱,則復制的文件以該文件名而不是遠程服務器上的名稱保存 |
mget[文件 |
復制所有指定的文件,包括所有匹配通配符的文件到本地計算機 |
md或mkdir[目錄] |
在遠程計算機上創建指定的目錄 |
rd或rmdir[目錄] |
在遠程計算機上刪除指定的目錄 |
put |
從本地計算機上復制指定的文件到服務器 |
mput[文件] |
從本地計算機上復制所有指定的文件到服務器 |
print[文件] |
在遠程計算機上打印指定的文件 |
queue |
顯示在遠程服務器上排隊的所有打印作業 |
(3)用smbclient工具訪問局域網上的其他系統
為了訪問方便,可以使用smbmount命令允許將一個Samba共享加載為本地目錄。要實現該功能,在本地工作站創建一個/mnt/test目錄。使用root用戶運行以下命令:
#/usr/sbin/smbmount ‘//15.26.40.10/homes’ ‘/mnt/test’ –U gong
該命令應在本地機器上運行,而且該機器應已經包含/mnt/test目錄。Samba服務器在IP地址為15.26.40.9的機器上,本地機器可以通過網絡可以訪問此服務器。注意任何解析為該IP地址的名字都可以替換該IP地址。在本地計算機上運行上述命令,以用戶gong登錄,將[homes]段中定義的共享加載到本地/mnt/test目錄。
要卸載該目錄,可作為root用戶運行下面的命令:
#smbumount /mnt/test
(4)用LinNeighborhood訪問局域網上其他系統的共享文件
LinNeighborhood基于GUI界面,可用于在Linux系統下瀏覽局域網上運行Windows操作系統的“網絡鄰居”或其他運行Samba的Linux系統共享文件。下面介紹LinNeighborhood的用法。
1)下載LinNeighborhood軟件包:首先到網上下載LinNeighborhood軟件包。一般情況下LinNeighborhood軟件包的提供形式是.tar.gz文件,現在的最新版本是0.6.5版,其文件名為LinNeighborhood-0.6.5.glibc-i386.tar.gz。下載后保存到某個目錄。這里假設用戶保存到/temp目錄。
2)解壓縮并解包文件:執行下述命令可以完成文件的解壓縮和解包。
#cd /temp //切換目錄 #tar xvfz LinNeighborhood-0.6.5.glibc-i386.tar.gz //解壓縮
3)執行程序:軟件不用任何設置,就可以直接執行。若欲執行LinNeighborhood,直接找到可執行文件輸入LinNeighborhood命令即可。例如步驟(2)解壓縮解包后,可以輸入以下命令執行程序:
//找到LinNeighborhood可執行文件所在目錄,輸入可執行文件名打開LinNeighborhood
#cd /temp/LinNeighborhood-0.6.5.glibc-i386 #./LinNeighborhood
打開程序出現如圖3所示界面。
以上就是Samba服務器的簡易使用說明。在Linux下實現資源共享還有其他幾種方法,我們將在接下來幾天為您一一分解。
作者介紹:李洋,信息安全專家,博士畢業于中科院計算所,ACM/IEEE會員。自2001年以來一直從事計算機網絡信息安全領域的研發工作,曾主持和參與多項國家重點項目以及信息安全系統和企業信息安全系統的研發工作。具有豐富的系統應用、管理、安全及內核的研發經驗。他的博客:http://patterson.blog.51cto.com/
【編輯推薦】