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

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