| 為了實現windows 和 Linux以及其它操作系統之間的資源共享,軟件商推出nfs 和samba兩種解決方案。因為市場上缺乏象pc-nfs那樣的client工具,使得Linux和windows的資源共享變得復雜。Samba的出現攻克了 這一問題,它以其簡潔、有用、靈活配置的特點受到越來越多人們的廣泛關注。 |
| Windows利用SMB協議來實現操作系統間文件和打印機共享,而Samba本身具備SMB協議,它實現局域網內和Windows系列計算機的資源共享。 |
| 本文就Samba在Linux系統下的配置為重點,討論局域網內windows 與 Linux 的資源共享。 |
| |
| 一、Samba 介紹 |
| 1、SMB協議 |
| SMB (Server Message Block,服務信息塊) 協議,是局域網上的共享文件/打印機的一種協議,它能夠為網絡內部的其它windows和linux 機器提供文件系統、打印服務。SMB的工作原理是讓NetBIOS和SMB執行在TCP/IP之上,且使用NetBIOS的nameserver讓 linux機器能夠在windows 網絡鄰居里被瀏覽。 |
| |
| 2、Samba |
| Samba是用來實現SMB的一種軟件,由澳大利亞的Andew Tridgell開發,是一種在Linux 環境里執行的自由軟件。它能夠完畢例如以下功能: |
| 文件服務和打印服務,實現Windows和Linux的資源共享。 |
| 登錄server,能夠作為局域網的server。 |
| 作為主域控制器。 |
| WINSserver。 |
| 支持SSL。 |
| 支持SWAT。 |
| |
| 二、 Samba服務 |
| 1、 核心進程 |
| Samba 有兩個守護進程:smbd 和nmbd,它們是Samba的核心進程。nmbd進程使其它計算機瀏覽Linuxserver,Smbd進程在SMB服務請求到達時對它們進行處理,而且為使用或共享的資源進行協調。 |
| |
| 2、 啟動服務 |
| Samba 有兩種啟動方式:Daemon形式和Inetd形式。 |
| (1)Daemon形式 建立啟動腳本:rc.samba |
| smbd -D -d1 |
| nmbd -D -d1 |
| |
| -D 表示以Daemon形式運行;-d1 表示除錯記錄級別 |
| 運行腳本文件rc.samba |
| |
| (2)Inetd形式 |
| 設置文件:/etc/services |
| netbios -ssn 139/ tcp |
| netbios -ns 137/ udp |
| |
| 設置文件:/etc/inetd.conf |
| netbios -ssn stream tcp nowait root /usr/sbin/smbd smbd |
| netbios -ns dgram udp wait root /usr/sbin/nmbd nmbd |
| |
| 重新啟動動Inetd daemon |
| # kill -HUP 1 |
| |
| 3、 客戶工具 smbclient |
| Smbclient命令用來存取遠程Sambaserver上的資源。其命令形式與ftp類似。 |
| 命令語法是:#smbclient
|
| (1) 解釋:servicename是要連接的資源名稱,資源名稱的形式例如以下: |
| //server/service server 是遠程服務器的NetBIOS名字,對於windows服務器而言,就是出如今網上鄰居中的名字。 |
| Service是各server所提供的資源的名字。 |
| pssword 是存取該資源所需的口令 |
| option 各種命令選項,當中 -L 用於列出遠程server提供的全部資源 |
| -I 指定遠程server的IP地址。此時,servicesname 中的NetBIOS名部分將被忽略。 |
| |
| (2)多種smbclient命令: |
| 運行smbclient命令成功后,進入smbclient環境,出現提示符: smb:/> |
| 這里有很多命令和ftp命令類似,如cd 、lcd、get、megt、put、mput等。通過這些命令,我們能夠訪問遠程主機的共享資源。 |
| |
| 4、 Samba系統裝載與卸載 |
| (1) 裝載其它主機的資源 |
| 我們能夠利用Samba提供的smbmount命令,裝載其它主機的共享資源。 |
| Smbmount的命令語法:# smbmount
|
| 當中 servicename 是資源名,mount-point是安裝點。 |
| |
| 比如: # smbmount "//server/tmp" -c ' mount /mnt' |
| 表示:把名字為“server”的計算機上的共享資源“tmp”的內容裝載到本地的 /mnt |
| 文件夾下。 |
| |
| (2) 卸載資源 |
| 卸載一個已經裝載的SMB文件系統,使用smbunmount命令,同一時候指定要卸載的裝載點。 比如: # smbunmount / mnt |
| |
| 三、Samba配置 |
| Samba組件的配置文件是 /etc/smb.conf ,該文件差點兒包括了Samba系統程序執行時所需的全部配置信息。 |
| |
| 1、 配置選項 |
| 配置文件里有比較重要的幾個節:[gloabal]、[homes]、[printers],以下分別給與說明。 |
| (1)[gloabal]節 在全局參數中,參數的設置直接影響samba系統。 |
| NetBIOS name:設置主機名稱 |
| Workgroup:用來指定主機所在網絡上所屬的NT域名或者工作組名稱。格式是 |
| Workgroup= Nt Domain-Name or workgroup-name |
| Server string:用來設置本機描寫敘述,缺省是 Samba Server |
| Host Allow:它同意設置哪些領域的機器能夠訪問它的Sambaserver |
| Load printers:同意自己主動載入打印機列表,而不須要單獨設置每一台打印機。 |
| Interface:配置Samba使用多個網絡界面。 |
| Domain controller: 僅當網絡中有一台在安裝時設置為主域控制器時使用此選項。 |
| Security: 設置安全參數,定義安全模式。Samba 的安全模式有四種 |
| Share、 user、 server 、domain |
| encrypt passwords 、smb passwd file:用於適用加密口令。 |
| |
| 以下是一段參數配置樣例: |
| [global] |
| smb passwd file = /etc/smbpasswd |
| remote announce = 172.18.158.234 172.18.153.55 172.18.153.255 |
| dns proxy = no |
| security = user |
| encrypt passwords = yes |
| server string = Ftp Server |
| workgroup = turing |
| socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 |
| log file = /var/log/samba/log.%m |
| load printers = yes |
| guest account = dscan |
| remote browse sync = 172.18.158.234 172.18.153.55 172.18.153.255 |
| printcap name = /etc/printcap |
| max log size = 50 |
| hosts allow = 172.18.158. 172.18.153. 127. |
| ... ... |
| |
| (2)[homes]節 全部使用者的home文件夾 |
| 當不論什么一個客戶訪問Sambaserver時,在網絡資源中都能出現自己的home文件夾共享。其配置例如以下: |
| [homes] |
| comment = Hnnw Directories |
| browseable = no |
| writable = yes |
| (3)用戶共享文件夾 |
| 用來指定某一特定用戶組或者用戶擁有訪問權限的文件夾配置,下列參數配置僅有hnnw組的用戶有權訪問文件夾/home/samba。 |
| [public] |
| comment = Public Hnnw |
| path = /home/samba |
| public = yes |
| writable = yes |
| printable = no |
| write list = @hnnw |
| |
| 2、 用戶映射 |
| 全局參數“username map”用來控制用戶映射,它同意管理員指定一個映射文件,該文件包括了在客戶機和server之間進行用戶映射的信息。 |
| 如:username map= /etc/smbuser |
| 用戶映射常常在windows 和linux 主機間進行。 兩個系統擁有不同的用戶賬號,用戶映射的目的是將不同的用戶映射成為一個用戶,便於共享文件。 |
| 以下是一個映射文件的樣例: |
| # Map Windows admin to root |
| root=admin administrator |
| ;Map the member of developer to studio |
| studio = @developer |
| |
| 等號左邊是單獨的Linux賬號,等號右邊是要映射的賬號列表。 |
| server逐行分析映射文件,假設提供的賬號和某行有右側列表中的賬號匹配,就把它 |
| 替換為等號左邊的賬號。 |
| |
| 3、 使用加密口令 |
| 新版本號的windows 95以及windows98、winnt(sp3以上版本號),在網絡傳輸中僅傳遞加密口令作為用戶認證的信息。這類客戶機和不支持加密口令而且以user 安全級執行的Sambaserver通訊時,會出現問題。為了正常的通訊,sambaserver使用加密口令。以下討論怎樣在samba中使用加密口令。 |
| (1) 口令文件 /etc/smbpasswd |
| 為了使用加密口令,samba 須要一份口令文件(/etc/smbpasswd),而且該文件應該和Linux的口令文件(/etc/passwd)保持同步。以下是生成文件命令: |
| |
| # cat /etc/password | mksmbpasswd > /etc/smbpasswd |
| |
| smbpasswd 是須要的口令文件,其權限是0600,全部者是root |
| smbpasswd和passwd文件的記錄相應,password部分不同。password有兩部分組成,每部分 |
| 是32個"X",前部分用於和Lanman通訊,后部分和Windows NT通訊。 |
| Root用戶能夠使用smbpasswd命令為每一個用戶設定samba口令。 |
| |
| (2) 改動配置文件 /etc/smb.conf |
| 要使Samba使用加密口令,須要在配置文件smb.conf中增加例如以下參數。 |
| Encrypt passwords=yes |
| Smb passwd file= /etc/smbpasswd |
| 第一行通知samba使用加密口令,第二行給出口令文件的位置。 |
| |
| (3) 重新啟動動samba 服務。 |
| 改動完配置文件后,須要又一次啟動samba服務,可用例如以下命令: |
| # /usr/sbin/samba restart |
| |
| 4、windows系統中的明碼口令使用 |
| Samba系統中使用明碼口令作為連接SMB的默認設置。當SMBserver對協商協議做出響應時,響應信息包括了一位,以說明server是否支持詢問或者響應加 密。隨着win95的網絡重定向更新程序的公布,Microsoft改動了默認值,這樣,windows客戶就不會向不支持加密的server發送明碼口令了。 |
| 在這樣的情況下,有兩種解決的方法: |
| (1)設置Sambaserver使用加密口令 |
| (2)讓windows客戶使用明碼口令 |
| 這里選用第2種解決的方法,通過改動注冊表來實現。以下對win95/win98、winnt用戶分別給與說明。 |
| (1)win98/win95系統用戶 |
| 在注冊表中增加下列注冊字,並又一次啟動機器: |
| [HKLM/System/CurrentCntrolSet/Services/VxD/VNETSUP] |
| “EnablePlainTextPAssword”= dword:00000001 |
| |
| (2)Winnt系統用戶 |
| 改動注冊表,增加下列注冊表項,並又一次啟動機器: |
| [HKLM/System/CurrentCntrolSet/Services/Rdr/Parameters] |
| “EnablePlainTextPAssword”= dword:00000001 |
| |
| 四、Samba應用 |
| 1、 windows資源共享與使用 |
| (1)windows資源共享 |
| a. 使用TCP/IP協議作為網絡默認通訊協議 |
| b. 改動網絡配置,設置文件和打印機共享。 |
| c. 設置好計算機名和所屬工作組 |
| d.共享系統資源 |
| |
| (2)在windows系統中使用Linux共享資源 |
| a. 登錄進入windows網絡 |
| b. 通過網上鄰居查看、使用共享資源。 |
| c. 命令行下工具使用共享資源 |
| 使用命令行下的net.txt工具來查看、使用共享資源: |
| net use 命令的語法: c:>net use X://servername/sharename |
| 在這里,X:是共享的驅動器盤符,//servername/sharename是到共享的UNC的網絡路徑。 |
| 比如: c:/>net use h://hey/myfile |
| 表示:將hey機器上的myfile共享資源映射為本地的h盤 |
| |
| 2、Linux資源共享與使用 |
| (1)將Linux 的資源共享 |
| 通過編輯Samba配置文件,加入須要共享的Linux資源。同一時候能夠設定訪問此資源的用戶群及其訪問權限。以下是一段樣例,將本機的 /public/data 文件夾共享,全部人都有讀寫權限。 |
| [data] |
| comment = Public Data |
| path = /public/data |
| public = yes |
| writable = yes |
| printable = no |
| |
| (2)在Linux中使用共享資源 |
| 能夠使用smbclient命令,訪問全部的Samba資源。詳細用法見前述。 |
| |
| 五、Samba應用程序 |
| smbclient :訪問全部共享資源 |
| smbstatus: 列出當前全部的samba連接狀態 |
| smbpasswd:改動samba用戶口令、添加samba用戶。 |
| Nmblookup:用於查詢主機的NetBIOS名,並將其映射為IP地址 |
| Testparam: 用於檢查配置文件里的參數設置是否正確 |
