(同濟(jì)大學(xué),上海 200092)
基于Samba的Linux與Windows互訪研究
林 野
(同濟(jì)大學(xué),上海 200092)
本文介紹了基于Samba的Linux與Windows互訪研究,對Samba的安裝與配置進(jìn)行了探討,分析了SWAT工具的技術(shù)特點(diǎn),對啟動與測試Samba進(jìn)行了說明。
Samba;Linux;Windows;互訪研究
隨著因特網(wǎng)的發(fā)展,計(jì)算機(jī)得到大量的普及,而計(jì)算機(jī)上所搭載的操作系統(tǒng)也取得了長足的進(jìn)步。在當(dāng)今市面上,操作系統(tǒng)以Windows和Linux系列居多。作為商業(yè)上最成功的操作系統(tǒng),Windows系列操作系統(tǒng)因其可靠性、安全性和良好的操作性為廣大用戶所認(rèn)知并接受。Linux操作系統(tǒng)是成長最快的系統(tǒng),隨著對操作性、易用性的改進(jìn),它也逐步得到用戶的青睞,與Windows系統(tǒng)的差距逐漸縮小。相較于封閉的Windows系統(tǒng)而言,Linux系統(tǒng)更加開放,它開放源代碼的理念也更加受到廣大IT工作者的認(rèn)同。因?yàn)殚_源性能優(yōu)秀且價(jià)格低廉,Linux系統(tǒng)在服務(wù)器市場取得了很大的市場份額,并被看作是一個(gè)理想的服務(wù)器操作系統(tǒng)。由于Windows和Linux在性能上各有千秋,雙方市場發(fā)展側(cè)重點(diǎn)也不同,因此在企業(yè)和公司內(nèi)部往往存在大量的Windows與Linux系統(tǒng),而對于Windows與Linux系統(tǒng)的相互訪問和信息交換的需求也越來越多。如何將這兩種異構(gòu)操作系統(tǒng)統(tǒng)一管理并實(shí)現(xiàn)信息互訪是一個(gè)非常有意義的研究課題。
操作系統(tǒng)間信息互訪技術(shù)一直是研究熱點(diǎn),Windows系列操作系統(tǒng)利用 CIFS(Common Internet File System)來實(shí)現(xiàn),即網(wǎng)上鄰居。網(wǎng)上鄰居將局域網(wǎng)上的其它計(jì)算機(jī)顯示出來并分享給用戶。Linux系統(tǒng)通過NFS(Network File System)將其它計(jì)算機(jī)所分享的目錄掛載進(jìn)來,也可以完成Linux系統(tǒng)之間的相互信息訪問。Windows與Linux系統(tǒng)之間的信息互訪則相對復(fù)雜,雖然利用TCP/IP協(xié)議棧中的超文本傳輸協(xié)議HTTP(Hyper Text Transfer Protocol)、文件傳輸協(xié)議FTP (File Transfer Protocol)和 網(wǎng) 絡(luò) 電傳 TELNET (Teletype over the Network)等應(yīng)用層協(xié)議也可以在Linux/Windows系統(tǒng)中構(gòu)建相應(yīng)的服務(wù)器,向Windows 、Linux系統(tǒng)提供基本的資源共享服務(wù),但目前最流行的異構(gòu)操作系統(tǒng)共享技術(shù)是Samba。利用Samba,Linux 用戶就可以進(jìn)入到 Windows 主機(jī),可以在 Windows主機(jī)中創(chuàng)建和使用文件共享;同時(shí),利用 Samba 服務(wù)器還可以讓 Windows 用戶像訪問 Windows 主機(jī)一樣通過網(wǎng)上鄰居來訪問 Linux 服務(wù)器。
Samba是由澳大利亞國立大學(xué)計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室 Andrew Tridgell開發(fā),其初衷是實(shí)現(xiàn)異構(gòu)操作系統(tǒng)間的文件和打印機(jī)共享。隨著時(shí)間的發(fā)展,Samba被越來越多的公司和企業(yè)所認(rèn)同。利用Samba,可以非常便利的將Linux操作系統(tǒng)的文件目錄與打印機(jī)等設(shè)備共享給Windows系統(tǒng)使用,同時(shí)也可以在Linux系統(tǒng)下訪問Windows系統(tǒng),進(jìn)入Windows系統(tǒng)創(chuàng)建文件,備份Windows系統(tǒng)下的資源,共享Windows系統(tǒng)的打印機(jī)。
Samba的 核 心 是 SMB(Server Message Block)協(xié)議。SMB通信協(xié)議是微軟和英特爾公司在1987年制定的協(xié)議,主要是作為微軟Windows系統(tǒng)的通訊協(xié)議,用于Windows系統(tǒng)間共享文件、打印機(jī)等。而Samba則是通過逆向工程創(chuàng)建的與SMB兼容的軟件,使得非Windows操作系統(tǒng)也能使用它。SMB是一種客戶端/服務(wù)器協(xié)議,以請求/響應(yīng)方式作答,當(dāng)客戶端發(fā)出請求后,請求經(jīng)過網(wǎng)絡(luò)傳送到服務(wù)器端,服務(wù)器端對這些消息進(jìn)行解釋,然后響應(yīng)客戶端。通過 SMB 協(xié)議,客戶端應(yīng)用程序可以在各種網(wǎng)絡(luò)環(huán)境下讀、寫服務(wù)器上的文件,以及對服務(wù)器程序提出服務(wù)請求。此外通過 SMB 協(xié)議,應(yīng)用程序可以訪問遠(yuǎn)程服務(wù)器端的文件、打印機(jī)、郵件槽(mailslot)、命名管道(named pipe)等資源。
雖然常被用于局域網(wǎng)環(huán)境,但在Internet環(huán)境下也可以使用Samba。通過NetBIOS over TCP/IP技術(shù),Samba主機(jī)可以與全世界的電腦分享資源。
啟動Samba后,兩個(gè)重要的后臺守護(hù)進(jìn)程會被開啟:(1)smbd 這個(gè)進(jìn)程主要用來管理Samba主機(jī)分享的目錄、檔案和打印機(jī)等,并負(fù)責(zé)建立會話,對到達(dá)局域網(wǎng)上的消息塊進(jìn)行處理。當(dāng)?shù)竭_(dá)的消息塊指定為一個(gè)文件,則該共享資源是一個(gè)文件;如果是一條打印機(jī)發(fā)送消息,則訪問一臺打印機(jī)。它主要利用TCP協(xié)議來傳輸數(shù)據(jù),可靠安全,開放的端口為139和445。(2)nmbd 這個(gè)進(jìn)程的主要任務(wù)是負(fù)責(zé)管理工作組,并對Samba服務(wù)器的NetBIOS名字進(jìn)行解析,將共享資源列表提供給Windows的網(wǎng)上鄰居,使Samba服務(wù)器的共享資源能夠顯示在Windows的網(wǎng)上鄰居中。它主要利用UDP協(xié)議開啟137、138端口來負(fù)責(zé)服務(wù)器名的解析工作。
Samba服務(wù)器應(yīng)用相當(dāng)廣泛,可以依照不同的網(wǎng)域聯(lián)機(jī)方式和不同的用戶賬號密碼管理方式來進(jìn)行分類。最常見的局域網(wǎng)聯(lián)機(jī)模式有兩種:(1) 對等模式(peer to peer),在對等模式下,局域網(wǎng)中的每部計(jì)算機(jī)地位相等。它們都可以在自己的計(jì)算機(jī)上管理賬號與密碼,同時(shí)每部計(jì)算機(jī)都可以獨(dú)立運(yùn)作,只是通過網(wǎng)絡(luò)將所有的計(jì)算機(jī)連接起來而已。這種架構(gòu)在小型的局域網(wǎng)中應(yīng)用的比較多。它的好處是每部計(jì)算機(jī)都可以獨(dú)立運(yùn)行,不受其它計(jì)算機(jī)的影響,但無法應(yīng)用在大規(guī)模的局域網(wǎng)里,因?yàn)樵诿颗_計(jì)算機(jī)上都要存儲所有的用戶名與密碼。(2) 主控模式(domain model),在該模式下,所有的賬號與密碼都放置在一部主控服務(wù)器上面,當(dāng)用戶想要訪問任何計(jì)算機(jī)時(shí),均需要在屏幕上面輸入相應(yīng)的用戶名和密碼,只有通過主控服務(wù)器認(rèn)證后,才能給予權(quán)限訪問該計(jì)算機(jī)。不同的用戶具有不同的計(jì)算機(jī)訪問權(quán)限。這種架構(gòu)比較適合大規(guī)模的企業(yè)架構(gòu),當(dāng)系統(tǒng)管理員要管理員工對計(jì)算機(jī)的使用權(quán)限時(shí),只需要對主控服務(wù)器進(jìn)行修改即可,不需要對網(wǎng)絡(luò)下的每部計(jì)算機(jī)都進(jìn)行改動。對于系統(tǒng)管理員來說,使用這種架構(gòu)來管理賬號資源,他的工作量會減小許多,且網(wǎng)絡(luò)的可靠性會增加很多。

圖1 登錄窗口

圖2 共享資源

圖3 Linux下登錄Windows

圖4 Windows共享文件目錄

圖5 Windows系統(tǒng)共享目錄詳細(xì)信息
一般來將,Linux的各個(gè)發(fā)行版本里都包含Samba軟件包。當(dāng)然,也可以到www.samba.org網(wǎng)站上下載最新的源代碼并在本地機(jī)器上編譯。在Linux上可以使用入如下命令來安裝:sudo apt-get install samba。apt-get命令適用于deb包管理式的操作系統(tǒng),可以自動的從互聯(lián)網(wǎng)的軟件倉庫中搜索、安裝、升級、卸載軟件,非常方便。
Samba安裝好后,會在/etc目錄下生成一個(gè)Samba子目錄,而該Samba子目錄下也有一個(gè)默認(rèn)的Smb.conf文件。該文件就是Samba的配置文件,Samba的主要配置信息都放在這個(gè)文件里。在該配置文件下,有多個(gè)不同的配置字段,例 如 [global]、[homes]、[printers]等。[global]字段主要用于配置Samba服務(wù)器的全局參數(shù),包括工作組、字符編碼的顯示、登錄文件的設(shè)定、是否使用密碼等。[homes]字段用于配置Samba服務(wù)器上用戶自己的共享主目錄,當(dāng)用戶登錄Samba成功后,Samba服務(wù)器就會建立共享資源并將該資源指定到用戶的主目錄上。[printers]字段則主要用于設(shè)定共享打印機(jī)時(shí)的一些參數(shù)。在Smb.conf配置文件中,有一部分配置選項(xiàng)被注釋掉了,不會起到任何作用。另外一些配置選項(xiàng)選取默認(rèn)值時(shí)即可讓Samba正常工作起來。在對Samba進(jìn)行配置時(shí),最重要的參數(shù)是security。Security可以選擇三種設(shè)定值,分別為share、user、domain。它們分別代表:
share: 在這種模式下,共享的數(shù)據(jù)并沒有設(shè)置密碼,任何用戶都可以訪問它,雖然便捷但極不安全。
user: 這種模式下,使用Samba服務(wù)器本身的密碼數(shù)據(jù)庫。任何用戶訪問Samba的共享目錄時(shí),Samba服務(wù)器都會首先去確認(rèn)該用戶是不是合法用戶,以決定是否允許訪問。
domain: 這種模式下,使用PDC(主域控制器)來完成認(rèn)證。如果選擇了這個(gè)設(shè)定值,還需要提供[password server = ip]的設(shè)定值。
下面提供一個(gè)示例:
[global]
workgroup = WORKGROUP
display charset = UTF-8
unix charset = UTF-8
Security = user
dos charset = cp936
netbios name = sambaok
server string = sambaok test server
hosts allow = 192.168.2.1
log file = /var/log/samba/samba.log
max log size = 50
encrypt passwords = yes
smb password file = /etc/samba/ smbpasswd
load printers = yes
[homes]
comment = Home Directories
browseable = no
writeable = yes
[share]
comment = My Share
path = /home/user/share
public = yes
writable = yes
valid users = aa
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
printable = no
available = yes
browseable = yes
[printers]
comment = All printers
path = /usr/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
配置信息分為四部分:第一部分是全局參數(shù)區(qū),這里主要設(shè)置了Linux、Windows端的顯示字符集,并將Samba服務(wù)器的安全模式配置成user模式。第二部分是用戶主共享目錄設(shè)置區(qū),這里將其設(shè)置成只有登錄用戶才能看到自己主目錄的模式,增強(qiáng)安全性。并賦予了用戶對該共享目錄的寫權(quán)限。第三部分是共享目錄的設(shè)置,包括目錄路徑以及寫權(quán)限等。第四部分完成對打印機(jī)共享的設(shè)置。
可以使用testparam來測試該配置文件。testparam是Samba套件提供的一個(gè)命令工具 ,可以自動對配置文件進(jìn)行測試。如果配置文件有語法錯(cuò)誤,它就會顯示出來,如果沒有錯(cuò)誤,就會列出可裝載的服務(wù)項(xiàng)。對sam.conf進(jìn)行任何改動后,最好都使用testparam進(jìn)行一下測試。
對sam.conf完成配置后,需要為Samba服務(wù)器添加用戶。因?yàn)樵谶@里將Samba的安全模式設(shè)置成user,所以Samba用戶必須首先是Linux系統(tǒng)用戶。在Linux系統(tǒng)下,以root身份登錄,使用命令adduser smb添加系統(tǒng)用戶。然后使用命令smbpasswd –a smb將該用戶添加到Samba服務(wù)器中,并設(shè)定用戶的密碼。
SWAT(Samba Web Administration Tool)是Samba的圖形化管理工具。不妨通過瀏覽器利用swat工具來設(shè)置Samba。在swat中每一個(gè)Samba參數(shù)都有相應(yīng)的幫助文件或解釋文件,很容易學(xué)習(xí)。SWAT工具嵌套在xinetd超級守護(hù)進(jìn)程中,要通過啟用xinetd進(jìn)程來啟用swat。因此要先安裝xinetd工具包,然后安裝swat工具包。
安裝好swat工具包后,編輯其配置文件:

將“only_from”設(shè)置為0.0.0.0而不是127.0.0.1,這樣服務(wù)器就可以監(jiān)聽所有的來訪IP。將disable設(shè)置成no而不是yes,這樣swat子進(jìn)程就可以隨xinetd超級守護(hù)進(jìn)程一起啟動。swat默認(rèn)使用tcp901端口。
通過web來配置Samba,默認(rèn)使用root賬號進(jìn)入。swat的執(zhí)行程序默認(rèn)在/ usr/sbin目錄下。
因?yàn)閟wat是xinetd的子進(jìn)程,所以只要啟用了xinetd,那么swat也就會伴隨xinetd啟動。使用命令service xinetd restart。
Swat啟動后,就可以通過Web瀏覽器登入swat配置界面。由于swat的默認(rèn)端口是901,所以通過Web登入swat的地址是http://192.168.0.1:901。其中該IP地址為Linux服務(wù)器的IP地址。在用戶登入后,會彈出一個(gè)提示框,要求用戶輸入登陸的用戶名和密碼。只有登錄用戶名和密碼正確,才能登入swat配置界面。默認(rèn)的用戶是root,密碼是登入Linux服務(wù)器的密碼,這些都可以在swat的配置文件中定義。
進(jìn)入swat配置界面后,可以看到有8個(gè)配置選項(xiàng),每個(gè)選項(xiàng)可以配置不同的功能。HOME主要是Samba的相關(guān)程序及文件說明,GLOBALS用于設(shè)置Samba的全局參數(shù)。SHARES配置Samba服務(wù)器的文件共享參數(shù)。PRINTER設(shè)置Samba服務(wù)器的打印機(jī)共享參數(shù)。WIZARD是Samba配置向?qū)АTATUS用于查看和設(shè)置Samba的狀態(tài)信息。VIEW界面可以查看Samba的文本配置文件,即smb.conf。PASSWORD管理Samba用戶的密碼設(shè)置,可以修改密碼,新建刪除用戶。
Samba的啟動非常簡單,打開系統(tǒng)的終端窗口,輸入/etc/init.d/smbd restart命令,Samba就會被啟動。同理,輸入/ etc/init.d/smbd stop 命令,Samba就會被停止。Samba啟動后,如果運(yùn)行正常,Linux與Windows就可以互相訪問了。
5.1 Windows訪問Linux服務(wù)器共享資源
在Windows下訪問Linux服務(wù)器共享資源需要通過Windows系統(tǒng)的網(wǎng)上鄰居來實(shí)現(xiàn)。Windows系列操作系統(tǒng)的網(wǎng)上鄰居的主要功能是通過 SMB 協(xié)議來傳輸文件數(shù)據(jù),并且網(wǎng)上鄰居具有自己的主機(jī)名稱解析系統(tǒng)。
首先,進(jìn)入Windows系統(tǒng),進(jìn)入“網(wǎng)上鄰居”,找到Linux主機(jī)所在的工作組,雙擊進(jìn)入該工作組,就會看到該Linux主機(jī)。
雙擊該主機(jī),就會彈出一個(gè)如圖1所示的登錄窗口。在該窗口輸入登錄用戶名與密碼。這里使用的登錄名與密碼是之前在Samba服務(wù)器中所添加的。必須與其一致,否則會在登錄時(shí)提示登錄用戶名和密碼錯(cuò)誤。
登錄成功后就能看到該Linux主機(jī)上的共享主目錄與其他的共享資源了。如圖2,其中,share為用戶登錄后的主目錄,該目錄只有具有訪問權(quán)限的用戶才看的到。
5.2 Linux訪問Windows服務(wù)器共享資源
想要在Linux下訪問Windows服務(wù)器上的資源,必須借助幾個(gè)Samba套件提供的工具:
(1)nmblookup
Nmblookup通過查詢廣播地址,能夠顯示一臺主機(jī)的NetBIOS主機(jī)名,通常顯示的結(jié)果是一個(gè)IP地址。因?yàn)橹鳈C(jī)存在虛擬IP地址的關(guān)系,有時(shí)候也會顯示多個(gè)IP地址。在一個(gè)局域網(wǎng)中,一臺主機(jī)只能擁有一個(gè)NetBIOS主機(jī)名,這樣,通過nmblookup命令查到IP地址后 ,就可以與其進(jìn)行連接。Nmblookup命令也可以用來查詢所有在局域網(wǎng)中活動的主機(jī)IP。
(2)smbclient
Smbclient主要用來顯示或者訪問共享文件夾。Linux客戶端訪問Windows服務(wù)器上的共享文件主要通過兩種方法:1)用mount命令掛載Windows中的共享目錄到本地磁盤,命令如下:mount –t smbfs –o username=user,password=pwd //192.169.1.1/share /localdir ;2) 使 用smbclient命令。Smbclient命令由Samba套件提供,用到的主要參數(shù)包括-L、-o、-U等。命令是smbclient //serverIP/ share –u name password。需要注意的是最好使用對方服務(wù)器IP來進(jìn)行登錄,這樣會更加快速。
在Linux下訪問Windows服務(wù)器上的共享資源時(shí),首先使用nmblookup命令查詢Windows主機(jī)名所對應(yīng)的IP地址。查詢到IP地址后使用ping命令探測該Windows主機(jī)是否與Linux主機(jī)網(wǎng)絡(luò)互通。如果連接超時(shí),通常是防火墻的設(shè)置問題,建議最好關(guān)閉Linux與Windows端的防火墻。在探測網(wǎng)絡(luò)為相通后,就可以開始訪問。本文使用smbclient命令。輸入命令smbclient //192.168.2.103/share–U username后,出現(xiàn)如圖3界面,輸入密碼,就登錄了遠(yuǎn)端Windows系統(tǒng)的共享目錄,如圖4。在該目錄,可以使用ls命令來顯示共享目錄的所有文件,也可以使用cd命令跳轉(zhuǎn)到其他的共享目錄,如圖5。
[1] 基于Samba的Windows與Unix互連技術(shù)的研究與實(shí)現(xiàn)[J].中國地質(zhì)大學(xué),2009.
TP39 < class="emphasis_bold"> 文獻(xiàn)標(biāo)識碼:A
A