Samba實(shí)用技巧:更換用戶、端口監(jiān)聽、列表控制
原創(chuàng)【51CTO獨(dú)家特稿】本文一步一步介紹了FreeBSD8.1下的samba的基礎(chǔ)配置。SMB協(xié)議可以看作是局域網(wǎng)上的共享文件/打印機(jī)的一種協(xié)議,它可以為網(wǎng)絡(luò)內(nèi)部的其它Windows和Linux機(jī)器提供文件系統(tǒng)、打印服務(wù)或是其他一些信息。而Samba是用來實(shí)現(xiàn)SMB的一種軟件,由澳大利亞的Andew Tridgell開發(fā),是一種在Linux(Unix)環(huán)境下運(yùn)行的免費(fèi)軟件。通過使用Samba,Linux系統(tǒng)可以實(shí)現(xiàn)多種功能。有關(guān)Samba服務(wù)器更基礎(chǔ)的知識,可以參考之前一篇文章:Samba服務(wù)器簡介與快速配置指南。
作者簡介:余洪春(博客),網(wǎng)名撫琴煮酒,英文名Andrew.Yu,武漢某外企高級Linux/Unix系統(tǒng)管理員、項(xiàng)目實(shí)施工程師,紅帽RHCE講師,擅長負(fù)載均衡高可用和中小型證券類和商務(wù)網(wǎng)站架構(gòu),目前關(guān)注網(wǎng)站架構(gòu)研究及網(wǎng)絡(luò)安全。
一、Samba基礎(chǔ)
1、 簡介
1)SMB協(xié)議
SMB(Server MessageBlock,服務(wù)信息塊)協(xié)議可以看作是局域網(wǎng)上的共享文件/打印機(jī)的一種協(xié)議,它可以為網(wǎng)絡(luò)內(nèi)部的其它Windows和Linux機(jī)器提供文件系統(tǒng)、打印服務(wù)或是其他一些信息。SMB的工作原理是讓NetBIOS(Win95網(wǎng)絡(luò)鄰居通信協(xié)議)與SMB這兩種協(xié)議運(yùn)行在TCP/IP的通信協(xié)議上,且使用NetBIOS nameserver讓用戶的Linux機(jī)器可以在Windows的網(wǎng)絡(luò)鄰居里被看到,所以就可以和Win95/NT主機(jī)在網(wǎng)絡(luò)上相互溝通,共享文件與服務(wù)了。
2)什么是Samba
Samba是用來實(shí)現(xiàn)SMB的一種軟件,由澳大利亞的Andew Tridgell開發(fā),是一種在Linux(Unix)環(huán)境下運(yùn)行的免費(fèi)軟件。
通過使用Samba,Linux系統(tǒng)可以實(shí)現(xiàn)如下功能:
● 文件服務(wù)和打印服務(wù)(在Linux和Win95/NT之間系統(tǒng)之間提供打印機(jī)和磁盤的共享)
● 登陸服務(wù)器,使用Windows客戶能注冊到網(wǎng)絡(luò)上
● 作為主要域控制器和域中成員的功能
● WINS服務(wù)器以及瀏覽功能
● 支持SSL(Secure Socket Layer)
● 支持SWAT (Samba Web Administration Tool )
Samba除了支持Linux(Unix)和Win95/NT之外,還支持DOS、IBM OS/2、Macintosh 等操作系統(tǒng)。
2、Samba的記錄文件
Samba為smbd、nmbd和訪問Samba的客戶提供了下列記錄文件,分別記錄有關(guān)smbd、nmbd運(yùn)行信息和每個(gè)客戶的訪問信息:
記錄smbd 信息
/var/log/samba/log.smb
記錄nmbd信息
/var/log/samba/log.nmb
記錄客戶訪問信息
/var/log/samba/log.%m
3、在FreeBSD8.1下配置samba34
#cd /usr/ports/net/samba34 #make install clean
進(jìn)行默認(rèn)配置,不進(jìn)行任何改動
#cp /usr/local/share/examples/samba34/smb.conf.default /usr/local/etc/smb.conf #vi /usr/local/etc/smb.conf
加入如下東西
[dev] path = /usr/local/dev public = yes only guest = yes writable = yes printable = no
添加smbpasswd用戶
#/usr/local/bin/smbpasswd -a username添加用戶名,更具提示信息來進(jìn)行操作 #vi /etc/rc.conf
加入
nmbd_enable=”YES” smbd_enable=”YES”
手動啟動就是
#/usr/local/etc/rc.d/samba start
二、FreeBSD8.1下Samba配置及使用
1、定制文件/etc/smb.conf
在安裝完Samba后,還需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由于SMB是一個(gè)非常復(fù)雜的協(xié)議,所以配置Samba的工作也是比較繁瑣的,大約有超過170條配置項(xiàng)出現(xiàn)在smb.conf文件中。
1)smb.conf的語法
smb.conf文件有一個(gè)清晰的語法結(jié)構(gòu),與Windows的*.ini文件十分類似。如下所示:
該文件被分成幾部分,每一部分都包括幾個(gè)參數(shù),用來定義Samba輸出的共享及其詳細(xì)操作。
文件被分隔成若干節(jié),每一節(jié)都由一個(gè)被方括號括起來的標(biāo)識開始(例如,[global]、[home]、[printers]),每一個(gè)配置參數(shù)或是一個(gè)全局參數(shù)(影響或控制整個(gè)服務(wù)器),或是一個(gè)服務(wù)參數(shù)(影響或控制服務(wù)器提供的某項(xiàng)服務(wù) )。
global部分定義的參數(shù)用來控制Samba的總特性。除global部分外,每一部分都定義了一個(gè)專門的服務(wù)。
你可以使用下面的語句來指定一個(gè)參數(shù):
name=VALUE
name可以是一個(gè)單詞或者用空格隔開的多個(gè)單詞。VALUE可以是布爾值(ture或false;yes或no;1或0)、數(shù)字或字符串。
注釋以分號開頭,可以單獨(dú)一行,也可以跟在一條語句之后。
通過在一行的最后一個(gè)字符后加反斜杠"\"可以將一行分成多行。
每一部分的名字和參數(shù)都不區(qū)分大小寫,例如,參數(shù)browseable=yes與browseable=YES是完全等價(jià)的
2)smb.conf文件的功能
smbd和nmbd這兩個(gè)守護(hù)進(jìn)程啟動時(shí)(通常為系統(tǒng)引導(dǎo)時(shí))讀配置文件smb.conf,這一配置文件向這兩個(gè)守護(hù)進(jìn)程說明輸出什么共享、共享輸出給誰以及如何進(jìn)行輸出等等。因?yàn)榘踩珕栴}是最重要的,所以你必須指定哪些計(jì)算機(jī)可以訪問這一共享,smb.conf文件可以很靈活的明確指定每一服務(wù)有哪些用戶可以訪問。隨著Linux網(wǎng)絡(luò)的增大,這一控制越來越重要。
3)smb.conf文件結(jié)構(gòu)
smb.conf文件主要包括三部分:
● global(全局)參數(shù)
● directory shares (目錄共享)部分--包括標(biāo)準(zhǔn)的[home]部分
● printer shares(打印共享)部分
其中,global參數(shù)用來設(shè)置整個(gè)系統(tǒng)的規(guī)則;[home]部分和[printer]部分是服務(wù)的特定例程,services(服務(wù))這一術(shù)語是網(wǎng)絡(luò)客戶機(jī)共享或輸出的目錄和打印機(jī)的Samba術(shù)語。這些服務(wù)定義了哪些用戶可以訪問這些目錄和打印機(jī)以及如何訪問這些目錄和打印機(jī)。
下面的清單給出了smb.conf文件的一個(gè)簡單的例子。
[global] workgroup = MYGROUP server string = Samba Server security = user printing = lprng log file = /var/log/samba lock directory = /var/lock/samba [homes] comment = Home Directory browseable = no read only = no [printers] browseable = no guest ok = yes printable = yes
在 [global] 段中設(shè)置了主機(jī)名稱, 主機(jī)所在的工作組名稱和瀏覽時(shí)可看到的對本機(jī)的描述。安全參數(shù)告訴 Samba使用"用戶級別"的安全保護(hù)方式。 SMB 有兩種安全模式: 共享級別, 將資源加密碼控制;用戶級別, 可以使用某一用戶的所有資源。
這里不能詳細(xì)解釋兩種方式的微妙差別, 但大部分情況下, 你會想用用戶級別安全控制。
[global] 段中還定義了日志文件目錄和鎖定文件的位置。日志文件在解決故障和完善系統(tǒng)時(shí)是很有用的,鎖定文件可以阻止多個(gè)用戶同時(shí)修改相同的文件。
[homes] 段中的設(shè)置控制了每一個(gè)用主目錄的共享權(quán)限。comment 參數(shù)指定的字符串在你瀏覽本機(jī)資源時(shí)出現(xiàn)在指定資源的旁邊。
browseable 參數(shù)控制一項(xiàng)服務(wù)是否能夠出現(xiàn)在網(wǎng)絡(luò)資源瀏覽表中。這里是一些非直覺的東西, browseable = no意味著這個(gè)目錄將在瀏覽時(shí)顯示為要驗(yàn)證的用戶名稱。 舉例來說, 指定 browseable = no, 當(dāng)我瀏覽這個(gè) Samba 服務(wù)器時(shí),我將看到一個(gè)名稱為 cuckoo 的共享目錄。當(dāng)指定 browseable = yes 時(shí), 我將看到一個(gè)名為 homes 和 cuckoo的共享目錄。設(shè)置 read only = no 將允許通過驗(yàn)證的用戶對主目錄有寫入的權(quán)限。 但是, 如果他們的主目錄的 UNIX 權(quán)限 不允許寫入,那么他們就沒有寫的權(quán)限。 無論 UNIX 的權(quán)限怎樣, 設(shè)置 read only = yes 后, 他們的主目錄是只讀的。
printing 命令描述了本地打印系統(tǒng)類型, 這可以讓 Samba 知道怎樣提交打印任務(wù), 顯示打印隊(duì)列, 刪除打印任務(wù)和其它操作。
如果打印系統(tǒng)是 Samba 所不知道的, 你必須在每次執(zhí)行打印操作時(shí)指明命令。
清單中[printing]一段配置允許任何能夠登錄到 Samba 服務(wù)器的用戶使用 printcap 中出現(xiàn)的 每一臺打印機(jī)。 正常情況下,如果使用用戶級別安全控制, guest ok = yes 并不能授權(quán)每一個(gè)用戶(使用系統(tǒng))。 每一個(gè)打印服務(wù)必須定義為 printable =yes。
三、在window xp下共享samba比較實(shí)用的辦法
FreeBSD8.1安裝完samba34后,如果將實(shí)際用戶添加進(jìn)samba用戶庫中,則FreeBSD機(jī)器本身的用戶就是samba用戶,他可以默認(rèn)對自己的/home/用戶目錄進(jìn)行讀寫,我們可以用磁盤映射的辦法來做;這樣windows機(jī)器默認(rèn)啟動后,就有一個(gè)遠(yuǎn)程的磁盤可以讀寫,這樣方例自己工作,截圖如下:

四、windows下更換用戶訪問Samba服務(wù)器
在Windodows客戶機(jī)訪問Samba服務(wù)器時(shí),常出現(xiàn)的一種現(xiàn)象是:在建立了訪問Samba服務(wù)器的連接之后,再次訪問該服務(wù)器時(shí),不再出現(xiàn)身份認(rèn) 證對話框,這樣便無法更換用戶身份,很多同學(xué)喜歡用注銷來解決這個(gè)問題,這樣很麻煩而且也浪費(fèi)時(shí)間;其實(shí)造成這一現(xiàn)象的原因是Windows本身的機(jī)制問 題更確切地說這是SMB服務(wù)的問題,由于NETBIOS服務(wù)是面向連接的,當(dāng)客戶與Samba服務(wù)器建立連接后,此連接在一段時(shí)間內(nèi)始終是活躍的,所以當(dāng) 用戶再次訪問該服務(wù)器時(shí),便采用了前面的身份而無需再次驗(yàn)證身份解法方法:net use \\samba文件服務(wù)器IP地址\IPC$ /delete,在成功刪除共享連接后即可更換用戶身份訪問Samba服務(wù)器。
五、關(guān)于samba服務(wù)使用的端口
實(shí)驗(yàn)過程中,發(fā)現(xiàn)samba服務(wù)雖然監(jiān)聽了四個(gè)端口,但僅僅使用445端口用來傳輸數(shù)據(jù),為了驗(yàn)證此說明,特地開了防火墻及抓包工具來驗(yàn)證,及INPUT和OUTPUT默認(rèn)為DROP,然后加上
iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 445 -j ACCEPT
samba服務(wù)就能與客戶端正常通訊及提供數(shù)據(jù)了,特地用抓包工具wireshark抓了下包,證實(shí)了此說法。很多教材上面說還要采用137、138、139等端口,這種說法也是成立的,這是由于將samba作了WINS服務(wù) 器的原因,即UDP138、UDP139是進(jìn)行NETBIOS解析的;如果不進(jìn)行NETBIOS解析的話,445端口夠用了。簽于目前RHEL5教材只用 445端口,大家在建samba服務(wù)器時(shí)也可采取這種做法。
六、通過主機(jī)名稱和IP地址列表控制Samba訪問
vi /etc/samba/smb.conf ,在[global]中添加:
hosts allow=192.168.1.0/24 127.0.0.1
即指示服務(wù)器只接受網(wǎng)絡(luò)192.168.1.0中的主機(jī)和本地主機(jī)接受主機(jī)訪問,也可以使用主機(jī)名代替IP地址,如果無此項(xiàng)的話,即默認(rèn)允許所有主機(jī)訪問,加入此項(xiàng)后,就默認(rèn)禁止192.168.1.0和本機(jī)以外的主機(jī)訪問samba服務(wù)器
hosts allow=mail.test.com
當(dāng)然,如果禁止的只是少數(shù)機(jī)子,可以用下列語法來實(shí)現(xiàn)
hosts allow=test.com EXCEPT mail.test.com
在實(shí)際工作中,推薦寫在點(diǎn)分十進(jìn)制方便記憶:即hosts allow =192.168.1.0/255.255.255.0;如果在現(xiàn)實(shí)中,要同時(shí)實(shí)現(xiàn)用戶服務(wù)和主機(jī)的訪問控制,可采用PAM(可插入認(rèn)證模塊),即 samba+PAM,它實(shí)現(xiàn)的功能是允許特定用戶通過特定主機(jī)訪問samba服務(wù)器。
【51CTO.com獨(dú)家特稿,轉(zhuǎn)載請注明原文作者和出處。】
【編輯推薦】