Samba介紹和使用

 Samba協議基礎

 自從出現NetBIOS協議,Microsoft用它實現了網絡文件/打印服務,即大家熟知的打印與共享服務,它是基於SMBServer Message Block)協議,實現不同計算機之間共享打印機、串行口和通訊抽象(如命名管道、郵件插槽等)。
隨着Internet的流行,Microsoft希望將這個協議擴展到Internet上去,成爲Internet上計算機之間相互共享數據的一種標準。因此它將原有的幾乎沒有多少技術文檔的SMB協議進行整理,重新命名爲 CIFSCommon Internet File System),並打算將它與NetBIOS相脫離,試圖使它成爲Internet上的一個標準協議。
爲了讓WindowsUNIX主機實現資源共享,可行的一種方法就是在UNIX計算機中安裝支持SMB/CIFS協議的軟件,這樣Windows客戶就不需要更改設置,同對待Windows主機一樣,能用UNIX計算機上的資源了。Samba是用來實現SMB的一種軟件,它的工作原理是讓NetBIOS Network Basic Input/Output System)和SMB這兩個協議運行於TCP/IP協議之上,並且使用WindowsNetBEUI(Net BIOS Enhanced User Interface)協議,讓類UNIX主機可以在網絡鄰居上被Windows主機看到。它的功能有:
n實現Linux主機之間和Linux主機與Windows主機之間的文件共享
n實現Linux主機之間和Linux主機與Windows主機之間的打印機共享
2
Samba的配置
(1)
安裝Samba
檢查是否已經安裝了Samba:
#rpm -qa | grep samba
samba-swat-3.0.7-1.3E.1 --Samba
web管理工具,端口爲901
samba-3.0.7-1.3E.1 --Samba
的核心文件
redhat-config-samba-1.0.16-2 --Samba
的可視化配置工具
samba-common-3.0.7-1.3E.1 --Samba
通用文件
samba-client-3.0.7-1.3E.1 --Samba
客戶端工具
如果沒有安裝,則可以通過光盤或NFS(後面講解)安裝。安裝文件的具體光盤位置,請查看光盤下RedHat/RPMS下的內容。安裝的方法如下:
#rpm -ivh *samba*.rpm --
可以一次完成所有安裝
(2)
啓動Samba服務器和web管理服務
#chkconfig smb on --
將服務添加到服務管理器中
#service smb start --
啓動共享服務,但修改後仍需要重啓動
#chkconfig swat on --
取消swatxinetd服務中的不啓動限制
#service xinetd restart --
通過重新啓動xinetd服務啓動swat服務
(3)
配置Samba
(1)
方法1:利用system-config-samba 進行配置,方法如下:
system-config-samba
這裏你可以對samba服務器進行一些基本的設置裏,應該說比較簡單了,我看沒有必要介紹了,配置好之後,記住重新啓動服務.
重新啓動的方法有兩種:
#service smb start
restart
#/etc/rc.d/init.d/smb start
(2)
方法2:利用samba-swat
swat
文件在/etc/xinetd.d/下,文件名就是swat
首先,你要修改swat的配置文件,默認的情況下是關閉的
service swat
{
port = 901 (swat
用到的端口是901)
socket_type = stream(
類似tcp協議的東西,呵呵這是我自己的理解)
wait = no
only_from = 127.0.0.1(
只從這個啓動swat,關鍵!)
user = root(
啓動swat用到的名子)
server = /usr/sbin/swat
log_on_failure += USERID
disable = yes (
一定要把yes改成no)
}
修改過之後,啓動xinetd就可以了
啓動方法跟剛纔我說的一樣
然後在瀏覽器裏些上:http://127.0.0.1:901/   回車,你成功了 !(注意,這個IP地址要跟你在SWAT配置文件裏的IP地址一樣才形,切記!)
至於如何使用swat,自己摸索一下應該不成問題了,配置完成以後,記得重新啓動服務就可以了.對了,爲了使得sambaswat在每次開機的時候啓動,你可以這樣:
#setup,
然後找到system service,SMBSWAT前搞個*,也可以#ntsysv,同樣的效果.
3)
方法3:修改smb.conf文件
Samba
的配置文件爲/etc/samba/smb.conf,該文件的初始內容很多,其實很多都是註釋,但這些註釋往往對我們的後續配置很有幫助,建議讀者仔細閱讀。
Samba
的配置可以分爲三部分:全局部分([global]標識)、打印機部分([printers]標識)和共享部分([homes]標識和自己設定的其他標識)。全局部分的配置影響到其它所有部分,打印機部分用於設置打印機的共享,而其餘部分則是提供一般共享的部分。所以,Samba配置的一般方法就很明確了,配置global部分,設置全局參數,配置打印機部分則可以實現打印機共享,其它共享部分的配置則是提供特殊共享服務,配置 [homes]部分可以讓本地用戶的目錄也加入共享。
a)
全局設置
workgroup = syd168Group
設置該Samba服務器所在的工作組或者域(如下面的security=domain的話)。
server string = syd168’s Samba Server %v
設定Samba服務器的顯示名。還可以包含特定變量。常用的包括:
變量
%S
當前服務名(如果有的話)
%P
當前服務的根目錄(如果有的話)
%u
當前服務的用戶名(如果有的話)
%U
當前對話的用戶名
%H
當前服務的用戶的Home目錄
%v Samba
服務的版本號
%h
運行Samba服務機器的主機名
%m
客戶機的NETBIOS名稱
%L
服務器的NETBIOS名稱
%M
客戶機的主機名
%I
客戶機的IP
%T
當前日期和時間
2-1
hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .syd164.com
可以設置允許訪問的網絡和主機IP,比如允許192.164.1.0/24192.164.2.1/32訪問,就用hosts allow = 192.164.1. 192.164.2.1 123.0.0.1 注意後面加“.”號,各個項目間用空格隔開,注意要把本機也加進去,否則本地也將無法測試。
printcap name = /etc/printcap
存放打印機描述信息的文件,一般是/etc/printcap
load printers = yes|no
設定是否自動共享打印機而不用設置[printers]部分
printing = lprng
定義打印系統的類型,缺省是lprng,可選項有:bsd sysv plp lprng aix hpux qnx
guest account = guest
定義遊客帳號,而且該賬號必須已經存在於/etc/passwd中,不然它就用缺省的nobody
log file = /var/log/samba/%m.log
定義記錄文件的位置LogFileName(一般是用/var/log/samba/%m.log
max log size =100
定義記錄文件的大小size(單位是KB,如果是0的話就不限大小)
security = security_level
定義Samba的安全級別,按從低到高分爲四級:shareuserserverdomain。它們對應的驗證方式:
Ø share:任何用戶無需用戶名和口令即可訪問服務器上的資源。
 user
samba的默認配置,在訪問共享資源之前必須通過本地用戶驗證。Ø
Ø Server:驗證是通過另一臺服務器進行的,如果失敗,就退到user級。
Ø domain:驗證通過網絡上的Windows的主域控制器進行。
後面三種安全級都要求用戶在提供共享的Linux主機上要有帳戶。
password server = <NT-Server-Name>
設置驗證服務器的服務器名。當security設爲server或者domain的時候纔有必要。
encrypt passwords = yes|no
設置是否對密碼進行加密,samba本身有一個密碼文件/etc/samba/smbpasswd,如果不對密碼進行加密則在驗證會話期間客戶機和服務器之間傳遞的是明文密碼,samba直接把這個密碼和Linux裏的/etc/samba/smbpasswd密碼文件進行驗證。但是在Windows 95 OS/2以後的版本和Windows NT SP3以後的版本缺省都不傳送明文密碼,要讓這些系統能傳送明文密碼必須在其註冊表裏更改,比較麻煩,好的方法就是把這裏的這個開關設置爲yes
smb passwd file = /etc/samba/smbpasswd
設置存放samba用戶密碼的文件smbPasswordFile(一般是/etc/samba/smbpasswd)
ssl CA certFile = sslFile
samba編譯爲支持SSL的時候,需要指定SSL的證書的位置(一般在/usr/share/ssl/certs/ca-bundle.crt)。
UNIX password sync = yes|no
passwd program = /usr/bin/passwd %u
passwd chat =*New*UNIX*password* %n/n *ReType*new*UNIX*password* %n/n *passwd:*all*authentication*tokens*updated*successfully*
這三項設置能否從Windows的應用程序修改UNIX系統的用戶密碼
username map =/etc/samba/smbusers
指定用戶映射文件(一般是/etc/samba/smbusers),當我們在裏面指定一行root = administrator admin的時候,當客戶機以用戶admin或者administrator連接時會被當作用戶root看待。
include = MachineConfFile
指定對不同機器的連接採用不同的配置文件MachineConfFile(一般爲了靈活管理設置爲/etc/samba/smb.conf.%m,由於採用了samba的變量,把配置文件和客戶機的NETBIOS名稱關聯起來,能很容易地控制這些客戶機的權限和設置)。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
這個是網絡socket方面的一些參數,能實現最好的文件傳輸性能。相關的選項還有SO_KEEPALIVESO_REUSEADDR SO_BROADCASTIPTOS_LOWDELAYIPTOS_THROUGHPUTSO_SNDLOWAT*)、SO_RCVLOWAT *)等,帶*號的要指定數值。本地網絡,就只用IPTOS_LOWDELAY,如果是廣域網絡,就試試IPTOS_THROUGHPUT
interfaces = interface1 interface2
如果有多個網絡接口,就必須在這裏指定。如interface = 192.164.12.2/24 192.164.13.2/24
remote browse sync = host(subnet)
這裏指定瀏覽列表同步信息從哪裏取得,如用host(比如192.164.3.25)或者整個子網(192.164.1.255)。
remote announce = 192.164.2.255/SERVERS 192.164.4.255/STAFF
指定這些機器向網絡宣告自己,從而在網絡鄰居中可以看到該機器。
local master = yes|no
這個參數指定nmbd是否試圖成爲本地主瀏覽器,默認值是yes,如果設爲nosamba服務器就永遠都不會成爲本地主瀏覽器。但即使設置了yes,也不等於samba服務器就會成爲本地主瀏覽器。只是參與本地主瀏覽器選擇。
os level = n
n
的值是個整數,決定了nmbd是否有機會成爲本地廣播區域的工作組裏的本地主瀏覽器,默認值是零,零則意味着nmbd失去瀏覽選擇。如果要nmbd更有機會成爲本地主瀏覽器的話,可以設爲65
domain master = yes|no
這個參數讓nmbd成爲一個域瀏覽器,取得各本地主瀏覽器的瀏覽列表,並將整個域的瀏覽列表遞交給各本地主瀏覽器。
preferred master = yes|no
這個參數指定nmbd是否是工作組裏的主瀏覽器,如果指定爲yesnmbd在啓動的時候就強制一個瀏覽選擇。
preserve case = yes|no
short preserve case = yes|no
指定拷貝DOS文件的時候保持大小寫,缺省是no
default case = lower|upper
所有的DOS文件的缺省是大寫還是小寫
case sensitive = yes|no
大小寫敏感,一般是no,不然會出現一些問題。
b)
共享設置:
每個SMB服務器能對外提供文件或打印服務,每個共享資源需要被給予一個共享名,這個名字將顯示在這個服務器的資源列表中。共享名必須放在[]中,如 [homes]。如果一個資源的名字的最後一個字母爲$,則這個共享就爲隱藏共享,不能直接出現在瀏覽列表中,而只能通過直接訪問這個名字來進行訪問。
[homes]
這是samba共享中比較奇怪的一個段,專門用於提供用戶目錄共享的。這個段一般不需要設置共享資源的路徑,其實路徑就是每個用戶的主目錄。當客戶機發出服務請求時,首先查找由smb.conf文件的其它配置部分設定的共享服務,如果沒有發現,並且配置了homes段,則通過搜索/etc/passwd得到用戶的home 目錄。通過homes段,Samba可以得到用戶的home目錄並使之共享。下面是這個段的最基本的幾個設置。
[homes]
comment=Home Directory
browseable=no
writable=yes
其它共享段。其它共享段是提供特殊共享的段,每個共享繼承[global]中的設置,但如果該段中再次設置了參數,則覆蓋[global]中的設置參數。下面是一個顯示爲share1的共享的配置:
===========================
共享的建立============================
[share1] --
共享名
comment =comment --
共享說明
path = /home/grind --
共享文件位置
allow hosts = host(subnet) --
允許共享訪問的設置,同[global]中設置方法
deny hosts = host(subnet) --
不允許訪問共享的限制,方法同上
writable = yes|no --
共享是否可以寫入
valid users = user(@group) --
允許訪問的用戶和組
invalid users = user(@group) --
不允許訪問的用戶和組
read list = user(@group) --
只允許讀取的用戶和組
write list = user(@group) --
總是允許讀寫的用戶和組
admin list = user(@group) --
能管理該共享(讀寫和權限修改等)的用戶和組
guest ok = yes|no --
是否允許遊客訪問,即無需密碼訪問
guest account = nobody --
遊客訪問帳號,必須在/etc/passwd中存在
hide dot files = yes|no --
是否不顯示隱含文件
create mode = 0755 --
新建立的文件的屬性,一般是0755
directory mode = 0755 --
新建立的目錄的屬性,一般是0755
sync always = yes|no --
對該共享資源進行寫操作後是否進行同步操作
case sensitive = yes|no --
是否區分大小寫,一般選no,不然可能引起錯誤
force user = grind
如果一個目錄,讓guest可以寫,那麼guest就可以刪除,如果用force user= grind強制建立文件的屬主是grind,同時限制create mask = 0755,這樣guest就不能刪除了。
wide links = yes|no
上面設置確定是否允許共享外符號連接,比如共享資源裏面有個連接指向非共享資源裏面的文件或者目錄,如果設置wide links = no將使該連接不可用。
max connections = 100 --
同時連接最大數
read only = yes|no --
共享爲只讀方式
===========================
共享的建立============================
通過上面的方法,我們可以實現多個不同的共享設置,只要各個共享的顯示名不同就可以了。但如果想把光驅、移動硬盤等動態設備共享,就需要注意,這些設備可能不是常在線的,所以,需要動態建立共享。下面我們就以光驅的共享爲例,看看如何實現動態資源的共享。

===========================
光驅的共享===========================
[cdrom]
comment = syd168’s DVDROM
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 -0 iocharset=cp936 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
===========================
光驅的共享===========================
這裏root preexec指明瞭連接時用root的身份運行mount命令,而root postexec則指明瞭斷開時用root身份運行umount,有效實現了對光驅的共享。
c)
打印機共享的設置:
==========================
打印機的共享===========================
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
==========================
打印機的共享===========================
這裏printable指明該打印機可以打印, guest ok說明遊客也能打印,path指明打印的文件隊列暫時放到/var/spool/samba目錄下。printer driver的作用是指明該打印機的類型,這樣我們在安裝網絡打印機的時候可以直接自動安裝驅動而不必選擇。
d) Samba
用戶管理:
需要注意的是,如果Sambasecurity配置爲user,則將由 Samba服務器負責用戶的認證。所有要訪問Samba的本地用戶帳號必須包含在smb passwd file 參數指定的文件中,默認是/etc/samba/smbpasswd。要將系統用戶添加到smbpasswd中,使用smbpaswd命令即可實現, smbpasswd的命令格式如下:
smbpasswd
參數用戶
具體參數見下表:
變量舉例
-a
添加用戶 #smbpasswd -a syd1
-x
刪除用戶 #smbpasswd -x syd168
-d
禁用帳號 #smbpasswd -d guest
-e
取消禁用 #smbpasswd -e guest
-n
清除密碼 #smbpasswd -a syd1
2-2
上面主要介紹了Samba服務端的設置,一般應用中使用上面的配置就可以滿足需要了,對於一些不常用的配置就省略了,詳細的信息可以用man smb.conf參考。
e) Linux
下訪問Samba服務
1
)列出可共享的網絡資源:
smbclient -L IP
NETBIOS
作用是顯示某臺提供samba服務的服務器上的共享資源。命令執行效果如下:
#smbclient –L 172.12.0.3
該命令的執行結果如下:
========================
下面是共享的信息========================
共享名共享類型說明
--------- ---- -------
Homes Disk Home Directories
Var Dis var
IPC$ IPC syd168's samba server v3.0.7-1.3E.1
ADMIN$ IPC syd168's samba server v3.0.7-1.3E.1
sydlinuxp1 Printer Created by redhat-config-printer 0.2.x
================
下面是共享服務器的信息========================
服務器說明
--------- -------
SYDLINUX syd168's samba server v3.0.7-1.3E.1
=====================
下面是Mast機器的信息=====================
工作組主服務器
--------- -------
SYD168-RHAS3 SYDLINUX
上面第一段列舉了該機器172.12.0.3上面的共享資源,第二段列舉了172.12.0.3所在的工作組裏面所有提供samba服務的機器,第三段列舉了其他工作組提供Browse服務的Master機器信息。
2
)使用網絡資源:
smbclient //IP
NETBIOS/共享名 [-U 用戶名]
命令執行效果如下:
#smbclient //172.12.0.3/syd1
added interface IP=172.12.0.3 bcast=172.12.251.255 nmask=251.251.0.0
got a positive name query response from 172.12.0.3 (172.12.0.3)
Password:
Domain=[BLUESUN] OS=[Windows 1.0] Server=[Windows 2000 LAN Manager]
smb: >
接着的操作和ftp的命令一樣,用get下載文件,用put上傳文件,用help命令查看幫助。
另一種使用共享的方法就是將共享掛載在文件系統下,象訪問本地目錄一樣訪問。掛載的方法如下:
smbmount //IP
NETBIOS/共享名 /本地掛接點 [-o option]
常用的optionusername=<用戶名>password=<密碼>guest(指定爲用guest訪問,不用提供密碼,但username=guest也會要求輸入密碼),ro(有時候爲了系統安全要指定爲只讀模式),rw爲可讀寫,如有多個option,之間用逗號隔開。
或者可以用如下命令實現同樣的功能:
mount -t smbfs [-o option] //IP
NETBIOS/共享名 /本地掛接點
例子如下:
#smbmount /172.12.0.3/syd1 /mnt/test1 -o guest

#mount -t smbfs -o guest iocharset=cp936 //172.12.0.3/syd1 /mnt/test1
然後就能通過訪問/test來使用網絡上的資源了。
如果不再需要,可以簡單地使用如下的命令卸載連接:
smbumount /mnt/test1
umount /mnt/test1
f) Windows
下訪問Linux的共享
要在Windows下訪問Linux中提供的共享,和使用一般的Windows共享一樣,可以有多種方法:
1
Windows搜索Linux服務器
2
在使用Windows提供的網絡鄰居功能
3
在地址欄輸入//samba服務器IP/共享名

該介紹的我都介紹完了,重新啓動服務!
或許您會發現客戶端無法連接,奶奶的,真讓人生氣,忙了這麼久,還是不能訪問,why?
1)
客戶端應安裝tcp/ip netbios ipx(這個東東不太懂)
2lmhosts, IP
地址和netbios名子對應.
3)iptables(
這個東西最壞,就是因爲他,我浪費了兩天時間!我得出一個小小的結論,做各種配置前把iptables給關閉!)
由於我對iptables不太懂,我的解決方式有兩種:
1:#setup
然後選擇防火牆,然後關閉
2.
修改/etc/sysconfig/iptables
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
0:1023的兩行的REJECT改成ACCEPT
重新啓動防火牆就可以了
#service iptables start
這樣應該可以了,建議多實踐,由於自己是個新手,可能有很多地方讓您見笑了


samba
中文亂碼問題

vi /etc/samba/smb.conf
根據locales的設置,修改該文件:
1.
如果localezh_CN.UTF-8,做如下設置:
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8

2.
如果localezh_CN.GBKzh_CN.gb2312,做如下設置:
display charset = cp936
unix charset = cp936
dos charset = cp936

重啓samba:
service samba restart

則無論從windows的網上鄰居,還是直接用securecrt登陸,均可顯示正常中文
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章