[轉]samba服務的原理與搭建

samba的安裝

gunzip
tar xvf
cd source
./configure --with-smbmount --prefix=/usr/local/samba
make
make install

vi /etc/ld.so.conf
/usr/local/samba3.4/lib
ldconfig

vi /etc/rc.d/rc.local

/usr/local/samba/sbin/smbd -D &
/usr/local/samba/sbin/nmbd -D &
/usr/local/samba/sbin/winbindd -D &


samba原理

Samba服務功能強大,這與其通信基於SMB協議有關。SMB不僅提供目錄和打印機共享,還支持認證、權限設置。在早期,SMB運行於NBT協議 (NetBIOS over TCP/IP)上,使用UDP協議的137、138及TCP協議的139端口;後期SMB經過開發,可以直接運行於TCP/IP協議上,沒有額外的NBT 層,使用TCP協議的445端口。

(1)samba的工作流程
當客戶端訪問服務器時,信息通過SMB協議進行傳輸,其工作過程可以分成四個步驟:

步驟1:協議協商
客戶端在訪問Samba服務器時,發送negprot指令數據包,告知目標計算機其支持的SMB類型。Samba服務器根據客戶端的情況,選擇最優的SMB類型,並做出迴應;

步驟2:建立連接
當SMB類型確認後,客戶端會發送session setup指令數據包,提交帳號和密碼,請求與Samba服務器建立連接,如果客戶端通過身份驗證,Samba服務器會對session setup報文作出迴應,併爲用戶分配唯一的UID,在客戶端與其通信時使用;

步驟3:訪問共享資源
客戶端訪問Samba共享資源時,發送tree connect指令數據包,通知服務器需要訪問的共享資源名,如果設置允許,Samba服務器會爲每個客戶端與共享資源連接分配TID,客戶端即可訪問需要的共享資源;

步驟4:斷開連接
共享使用完畢,客戶端向服務器發送tree disconnect報文關閉共享,與服務器斷開連接。

(2)samba相關進程
Samba服務是由兩個進程組成,分別是nmbd和smbd。
nmbd:其功能是進行NetBIOS名解析,並提供瀏覽服務顯示網絡上的共享資源列表。
smbd:其主要功能就是用來管理Samba服務器上的共享目錄、打印機等,主要是針對網絡上的共享資源進行管理的服務。當要訪問服務器時,要查找共享文件,這時我們就要依靠smbd這個進程來管理數據傳輸

 

samba搭建

一、安裝和啓動samba
(1)使用命令rpm -qa | grep samba可以檢查是否安裝了samba服務,沒有安裝下載安裝一個即可;
(2)關閉防火牆:可使用service iptables stop命令關閉防火牆,也可以對防火牆進行修改,放行某些端口(如445);
(3)samba服務操作:service smb start | stop | restart;如果想讓samba服務開機自動加載,可使用ntsysv命令打開開機自動加載的服務,並勾選smb後按Tab鍵確認退出,即可實現開機加載samba服務;

二、配置samba服務
(1)samba服務的配置文件是 /etc/samba/smb.conf,smb.conf文件中包括4中結構, [Global]、[Homes]、[printers]、[Userdefined_shareName],其中Globa用於定義全局參數和缺省 值;Homes用於用戶的home目錄共享;Printers用於定義打印機共享;Userdefined_ShareName用於自定義共享(可有多 個)。(說明:文件中開頭帶有"#"爲說明文件,不執行, 開頭帶有";"爲舉例文件,不執行(若想讓其執行,去掉";"));
(2)配置全局參數[global]
1) 基本全局參數
workgroup 設置samba要加入的工作組;server string 指定瀏覽列表裏的機器描述;netbios name 設置samba的NetBIOS名字 (需要自己添加);client code page 設置客戶字符編碼也 936爲簡體中文(需要自己添加);display charset、unix charset、dos charset是設置字符集(主要目的是支持中文,通過locale命令獲取LANG的值,這裏爲zh_CN.GBK,可在相應 的.bash_profile裏添加export LANG=zh_CN.GBK後source即可);

2) 日誌全局參數
log file 指定日誌文件的名稱;max log size 指定日誌文件的最大尺寸(KB)。

3) 安全全局參數
security 定義samba的安裝等級:share:用戶不需要用戶名和密碼即可登陸samba服務器;user:由提供samba服務的samba服務器負責檢查帳 戶及口令;server:檢查帳戶及口令的工作指定由另一臺WindowsNT/2000或samba服務器負責;domain:指定windowsNT /2000域控制器來驗證用戶帳戶、密碼;

encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
這兩行用於設定是否對samba密碼進行加密,並指定加密文件存放路徑。
hosts allow 定義允許訪問此服務器的IP地址,如192.168.1. 意思爲只有192.168.1.0這個網段的IP才能訪問該服務器

(3)配置home共享[home]
由於在home共享默認將用戶的宿主目錄進行了共享,這是十分危險的。所以我們必須刪除home共享,方法很簡單,將所有的指令前加";"或"#",讓這條指令不執行,也就不對用戶的宿主目錄共享了

(4)配置自定義共享
自定義共享,只需在文件最後加入[$name],$name任意起,其參數意義爲:comment 描述該共享的名稱;path 定義該共享的目錄;browseable 指定共享的目錄是否可瀏覽;writable 指定共享的目錄是否有寫入權限;read only 指定共享的目錄爲只讀權限;public 指定是否可以允許Guest帳戶訪問;guest ok 通public相同,yes爲允許guest訪問;only guest 指定只有guest用戶可以訪問;calid users 指定訪問該共享的用戶。

(5)其他
1) 訪問服務器需用戶名和密碼驗證:命令行下輸入smbpasswd -a test,使test用戶同時成爲samba用戶(前提Global中設置security=user);smbpasswd -d test 禁用test用戶作爲samba用戶、smbpasswd -e test 啓用test用戶作爲samba用戶、smbpasswd -x test 刪除test用戶作爲samba用戶;
2) 客戶端只能通過用戶訪:在相應[Userdefined_shareName]中添加valid users = test,即可只允許該用戶登錄;
3) 上面實例中給出的是一個針對guest用戶僅read功能的情況,那其中的東西該如何維護,可以新建一用戶,其宿主目錄設爲/home/seqa_photo,僅該用戶維護即可。

完成以上配置後重啓samba服務,在文件窗口打開"\\\10.20.146.13"即可看到存放在linux上的內容。


 

 

亂碼處理

用windows訪問Linux下的samba服務器,在訪問有漢字的文件夾的時候,看到裏面的中文文件名都是亂碼。
解決辦法:
(1) 打開/etc/sysconfig/i18n
設置爲:
LANG="zh_CN.GB2312"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
    其中LANG="zh_CN.GB2312" 是必須的(如果你不想讓中文亂碼的話!!!),其它的可以按照自已的需求來改變。
(2) 打開smb.conf
添加:
    display charset = cp936
    unix charset = cp936
    dos charset = cp936
重新啓動系統即可。

注:主要還要看Linux服務器用什麼locale,比如我用GBK的,smb.conf裏那些全都得改成GBK,而不是cp936。

發佈了41 篇原創文章 · 獲贊 0 · 訪問量 4391
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章