歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

Samba簡介

日期:2017/2/27 12:18:43   编辑:Linux文化


Samba是由Andrew Tridgell在1991年(和Linux誕生的時間接近)制作的,當時他使用的是DEC的Pathworks網絡,但是他發現無法同時使用Sun的NFS協議(正如我們前面介紹的,NFS是一個非常有用的網絡協議),於是,連Socket(套接字)都不熟悉的他開始嘗試自己在PC機上實現NFS,經過不斷的摸索,他終於在自己的計算機上實現了NFS,采用的網絡協議是NetBIOS(因為NetBIOS是公開的,可以合法地得到)。到了1992年1月,他開發出了0.1版,稱為Server 0.1,隨後又開發了一段時間,由於得到了X終端,他放棄了進一步的開發。直到1992年底,從一封電子郵件中,Andrew Tridgell獲知了Linux,一個愛好者將Server 1.0轉換到了Linux上,很快,人們發現這個程序可以直接使用,應用戶的要求,Adrew Tridgell開始在Linux上開發,同時他發現smb-server已經被別人注冊了,所以就只好起名為Samba,這就是Samba這個名稱的由來。讀者如果感興趣的話可以訪問http://www.ssc.com/lj/issue7/samba.html了解這段歷史。

1. Samba服務能夠做什麼
* 在網絡上共享目錄,就好像一台文件服務器一樣。
* 在網絡上共享打印機。
* 決定每一個目錄由誰來使用,可以讓一個人、某些人、組和所有人訪問。
* 決定打印機由誰來使用,可以讓一個人、某些人、組和所有人使用。
可以看出,安裝和配置好了Samba服務器後,Linux就可以Windows網絡中的文件和打印服務器了。

2. Samba的安裝
我們假設用戶在安裝Red Hat Linux的時候,已經選擇了安裝Samba(如果安裝的時候你選擇了everything,那麼你的計算機上已經有了Samba),如果沒有安裝,可以從光盤的RedHat/RPMS目錄下安裝,也可以到ftp://metalab.unc.edu/pub/Linux/system/network/samba/去尋找最新版本,安裝的時候,請參考samba-HOWTO和軟件提供的幫助文件。

3. Samba軟件包的內容
Samba是SMB客戶程序/服務器軟件包,它主要包含以下程序:
* SMB服務器smbd:為SMB客戶機如Windows 9x/NT等提供Windows NT和Lan Manager風格的文件和打印服務。
* Netbios(RFC1001/RFC1002)名字服務器nmbd:可以提供浏覽支持。用戶甚至可以用Samba作為局域網的主浏覽服務器。
* SMB客戶程序smbclient:類似ftp程序,用以從UNIX、Netware和其他操作系統上訪問SMB服務器上的資源(如文件、打印機)
* SMB客戶服務程序的tar擴展smbtar:用以方便地拷貝SMB服務器上的文件。
在Linux上,Samba還提供了掛卸SMB文件系統的工具程序smbmount(smbmnt)和smbumount。
samba的核心是smbd和nmbd,如果你用ps –ef可以看到這兩個進程,那麼你的機器已經在運行samba了。Samba服務的狀態查詢、啟動和關閉:
# /usr/bin/smbstatus
# /etc/rc.d/init.d/smb stop
# /etc/rc.d/init.d/smb start

4. 定制Samba
這部分內容介紹如何配置Samba,主要就是如何調整/etc/smb.conf文件,所以請現在備份一下你的smb.conf文件。原始的smb.conf文件如下,我們在後面的配置過程中,會把相關的部分拿出來單獨介紹,為了方便,我們把原始文件的注釋部分用中文代替。
smb.conf文件的作用和語法類似於Windows 3.x裡面的ini文件,該文件現在一般位於/etc目錄下。
smb.conf文件的語法格式包含了許多區段(section),每一個區段都有一個名字,用方括號括起來,其中比較重要的區段是[global]、[homes]和[printers],[global]區段定義了全局參數,[homes]區段定義了用戶的主目錄文件服務,[printers]區段定義了打印機共享服務。
每一個區段裡面都定義了許多參數,格式為“參數名 = 參數值”,等號兩邊的空格被忽略,參數值兩邊的空格也被忽略,但是參數值裡面的空格有意義。如果一行太長,用“\”進行換行。

# Samba的配置文件,用戶應該在修改前仔細閱讀smb.conf(5)的手冊頁。
# Samba有許多選項,大多數沒有列在本文件中(手冊頁約130頁)
#
# 所有以分號;和井號#開頭的行都表示注釋,這些行都被忽略,本文約定,
# 文件中用井號表示評論,分號表示可以激活的選項
#
# 當你修改本文件後,應該運行testparm命令以檢查語法錯誤
#
#=======================設置全局變量的區段====================================
[global]

# workgroup = NT的域名或者工作組名
workgroup = MYGROUP

# server string 等價於NT的描述域(description field)
server string = Samba Server

# 下面的選項對於安全十分重要,它限制連接到當前服務器的本地網絡的IP地址。
# 下面的例子中,只允許兩個C類網絡地址和‘loopback’界面訪問SMB服務器。
# 更多信息,查看smb.conf的手冊頁。如果該選項要激活,把分號去掉。
; hosts allow = 192.168.1. 192.168.2. 127.

# 自動加載打印機,而不是每次單獨設置
printcap name = /etc/printcap
load printers = yes

# 除非你的打印系統的類型不標准,否則不用設置下面的參數,當前支持的打印
# 系統有:bsd, sysv, plp, lprng, aix, hpux, qnx
; printing = bsd

# 如果希望建立客戶賬號,激活此選項,同時把此賬號加入/etc/passwd文件中
# 否則使用用戶"nobody"作為客戶賬號
; guest account = pcguest

# 對從不同機器建立的連接建立不同的日志文件
log file = /var/log/samba/log.%m

# 限制日志文件的最大尺寸(單位是KB)
max log size = 50

# 安全模式,大多數用戶希望用戶級的安全,
# 詳細信息參考security_level.txt文件。
security = user

# 當security = server時使用口令服務器選項
; password server =

# 輸入口令應該和真實口令的前面Password Level個字符相符合
# 輸入用戶名應該和真實用戶名的前面username level個字符相符合
; password level = 8
; username level = 8

# 用戶可能需要使用口令加密,在使用下面的選項之前,請仔細
# 閱讀ENCRYPTION.txt,Win95.txt和WinNT.txt文件。
# 用戶密碼文件可以存放在/etc/passwd文件中
; encrypt passwords = yes
; smb passwd file = /etc/smbpasswd

# 如果要允許在Windwos中的密碼改動更新Linux系統的密碼,就需要下面的選項.
# NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above.
# NOTE2: You do NOT need these to allow workstations to change only
# the encrypted SMB passwords. They allow the Unix password
# to be kept in sync with the SMB password.
; unix password sync = Yes
; 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*

# Unix用戶可以映射成不同SMB用戶名
; username map = /etc/smbusers

# 對每個不同的客戶機使用不同的配置文件,%m代表客戶機的Netbios名字
; include = /etc/smb.conf.%m

# 下面的選項可以提高服務器的性能,特別是使用smbmount掛卸SMB文件系統時。
# 參考speed.txt文件。
socket options = TCP_NODELAY

# 如果SMB服務器使用了多個網卡,必須在下面列出並進行配置
; interfaces = 192.168.12.2/24 192.168.13.2/24

# Configure remote browse list synchronisation here
# request announcement to, or browse list sync from:
# a specific host or from / to a whole subnet (see below)
; remote browse sync = 192.168.3.25 192.168.5.255
# Cause this host to announce itself to local subnets here
; remote announce = 192.168.1.255 192.168.2.44

# 浏覽器控制選項:如果你不想讓Samba服務器成為網絡中的主浏覽器,
# 那麼local master設置為no,否則設置為yes(此時將參加主浏覽器的競爭)
; local master = no

# 競爭主浏覽器時對自身的評價
; os level = 33

# Domain Master specifies Samba to be the Domain Master Browser. This
# allows Samba to collate browse lists between subnets. Don't use this
# if you already have a Windows NT domain controller doing this job
; domain master = yes

# Preferred Master causes Samba to force a local browser election on startup
# and gives it a slightly higher chance of winning the election
; preferred master = yes

# Use only if you have an NT server on your network that has been
# configured at install time to be a primary domain controller.
; domain controller =

# Enable this if you want Samba to be a domain logon server for
# Windows95 workstations.
; domain logons = yes

# if you enable domain logons then you may want a per-machine or
# per user logon script
# run a specific logon batch file per workstation (machine)
; logon script = %m.bat
# run a specific logon batch file per username
; logon script = %U.bat

# Where to store roving profiles (only for Win95 and WinNT)
# %L substitutes for this servers netbios name, %U is username
# You must uncomment the [Profiles] share below
; logon path = \\%L\Profiles\%U

# All NetBIOS names must be resolved to IP Addresses
# 'Name Resolve Order' allows the named resolution mechanism to be specified
# the default order is "host lmhosts wins bcast". "host" means use the unix
# system gethostbyname() function call that will use either /etc/hosts OR
# DNS or NIS depending on the settings of /etc/host.config, /etc/nsswitch.conf
# and the /etc/resolv.conf file. "host" therefore is system configuration
# dependant. This parameter is most often of use to prevent DNS lookups
# in order to resolve NetBIOS names to IP Addresses. Use with care!
# The example below excludes use of name resolution for machines that are NOT
# on the local network segment
# - OR - are not deliberately to be known via lmhosts or via WINS.
; name resolve order = wins lmhosts bcast

# Windows的Internet命名服務支持區段:
# WINS支持—要求Samba的nmbd進程激活WINS服務
; wins support = yes

# WINS服務器—要求Samba的nmbd進程成為一個WINS客戶
# 注意:Samba可以成為一個WINS服務器或者客戶,但是不能同時選擇兩個身份
; wins server = w.x.y.z

# WINS Proxy - Tells Samba to answer name resolution queries on
# behalf of a non WINS capable client, for this to work there must be
# at least one WINS Server on the network. The default is NO.
; wins proxy = yes

# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
# via DNS nslookups. The built-in default for versions 1.9.17 is yes,
# this has been changed in version 1.9.18 to no.
dns proxy = no

# Case Preservation can be handy - system default is _no_
# NOTE: These can be set on a per share basis
; preserve case = no
; short preserve case = no
# Default case is normally upper case for all DOS files
; default case = lower
# Be very careful with case sensitivity - it can break things!
; case sensitive = no

#============================== 共享服務的定義================================
[homes]
# 說明文字,當一個客戶機列出服務器的共享資源時,給出該服務器的描述
comment = Home Directories
# 當一個客戶程序以guest身份列出服務器的共享服務時,homes服務將不出現在列表中,
# 但是為本機的真實用戶創建的主目錄服務繼承[global]區段的設訂(browseable=yes)
browseable = no
writable = yes

# Un-comment the following and create the netlogon directory for Domain Logons
; [netlogon]
; comment = Network Logon Service
; path = /home/netlogon
; guest ok = yes
; writable = no
; share modes = no


# Un-comment the following to provide a specific roving profile share
# the default is to use the user's home directory
;[Profiles]
; path = /home/profiles
; browseable = no
; guest ok = yes


# 定義打印機共享,使用BSD風格的打印系統不必單獨定義每一個打印機
[printers]
comment = All Printers
# path指定的目錄必須事先創建,否則不能使用
path = /var/spool/samba
browseable = no
# 設定public = yes允許用戶(guest account)使用打印機
guest ok = no
# printable服務總是允許往服務目錄寫文件,但是只能通過打印緩存操作實現
writable = no
printable = yes
# 設置網絡用戶共享文件的臨時區域,每個人可以在這裡存放文件供別人使用
;[tmp]
; comment = Temporary file space
; path = /tmp
; read only = no
; public = yes
# 一個共享的目錄,普通的訪問者只讀,屬於staff組的用戶可以讀寫
;[public]
; comment = Public Stuff
; path = /home/samba
; public = yes
; writable = yes
; printable = no
; write list = @staff
# Other examples.
#
# 一個私有的打印機,只供fred使用,打印緩存存放在fred的主目錄裡# home directory. # 注意fred必須對打印緩存的目錄有寫權
;[fredsprn]
; comment = Fred's Printer
; valid users = fred
; path = /homes/fred
; printer = freds_printer
; public = no
; writable = no
; printable = yes

# 私有的目錄,只供用戶fred使用,fred需要對該目錄有寫權
;[fredsdir]
; comment = Fred's Service
; path = /usr/somewhere/private
; valid users = fred
; public = no
; writable = yes
; printable = no

# 下面的配置,使得每個不同的計算機都有不同的連接
# 在path參數值後面加上%m,代表機器名,也就是說,主機lidf會連接到
# SMB服務器的/usr/pc/lidf目錄上
;[pchome]
; comment = PC Directories
; path = /usr/pc/%m
; public = no
; writable = yes

# 一個共享目錄,對於所有用戶都可讀可寫。注意目錄中創建的文件屬於缺省的用戶,
# 所以所有用戶都可以在該目錄中修改、刪除其他用戶的文件
;[public]
; path = /usr/somewhere/else/public
; public = yes
; only guest = yes
; writable = yes
; printable = no

# 下面的例子解釋了如何共享一個目錄,從而兩個用戶可以在裡面放置文件。
# 在下面的配置中,目錄應該是對兩個用戶可寫的,並且有setuid,
# 當然,也可以設置更多的用戶共享這一個目錄。
;[myshare]
; comment = Mary's and Fred's stuff
; path = /usr/somewhere/shared
; valid users = mary fred
; public = no
; writable = yes
; printable = no
; create mask = 0765

4.1 關於lmhosts文件和WINS
在Windows網絡中,負責計算機的netbios name到IP地址轉換的服務由WINS服務器實現,這種轉換的靜態地址表叫做lmhosts,Windows NT將其存入.mbd格式的數據庫中,在Linux中,要擔任WINS服務器,就只能靠在/etc目錄下的lmhosts文件來實現靜態地址轉換。lmhosts文件的格式和hosts文件類似,只是這裡輸入的是計算機的netbios名字,而不是TCP/IP網絡中的主機名。要讓Linux主機擔任WINS服務器,激活以下參數:
wins support = yes
或者,讓Linux主機擔任wins客戶機,激活下面的參數:
wins server = w.x.y.z
強行給Linux主機指定一個netbios名字:
netbios name = linux206
4.2 對連接的主機的限制
要允許IP為192.168.0.x的主機使用Samba服務,激活並設置以下參數:
hosts allow = 192.168.0. 127.
4.3 對連接的用戶的限制
要允許用戶syy使用Samba服務,激活並修改以下參數:
guest account = syy
4.4 為了提供最大限度的訪問,修改安全模式如下:
security = share
4.5 主浏覽器(Main Browser)
在Windows的“網絡鄰居”中,主浏覽器負責維護當前網絡中的主機的列表,但是往往由於刷新過慢,使得我們重新啟動的smb服務看不到效果,以為自己設置的仍然不對,這時我們可以調整remote browse sync和remote announce兩個參數,remote browse sync將收集網絡中其他機器的信息,remote announce參數將自己聲明給當前的子網。例如:
remote browse sync = 192.168.0.1 192.168.0.26
remote announce = 192.168.0.1 192.168.0.9
或者,干脆調整local master = yes參加網絡的主浏覽器的競選,調整os level = 65以確保自己能夠競爭成功。
如果還看不到SMB服務器,就選擇開始-運行,輸入SMB服務器的netbios名字,例如:\\linux206,這時候一般就會打開SMB服務器了。
4.6 關於密碼
從Windows 95開始,用戶登錄Windows網絡采用了密文(在這之前采用明文,即所謂的clear text),所以從windows 95訪問Linux上的SMB服務,可能會涉及到密碼的問題。
一種變通的解決方案是,調整Windows 9x的注冊表,我們選擇開始,運行regedit,在HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP/中,創建一個DWORD,起名為“EnablePlainTextPassword”,設置其值等於1。重新啟動計算機,以後的登錄就變成明文的方式了。
另一種解決方案是,讓SMB服務器支持密文登錄,修改參數如下:
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
此時,需要以root的身份運行smbpasswd命令,為已經在/etc/passwd中存在的用戶設置smb的password,如:
[root@linux206 jw]# smbpasswd -a jw
New SMB password:
Retype new SMB password:
startsmbfilepwent: unable to open file /etc/smbpasswd
Added user jw.
Password changed for user jw.
[root@linux206 jw]# more /etc/smbpasswd
# Samba SMB password file
jw:502:82DD2DCB1F75A511F9393D97E7A1873C:4C5A33C075FC8AB4102A8F8381DFCBA8:[U
]:LCT-38BB2E4A:
此後,用戶jw就可以訪問SMB服務器的資源了。
4.7 關於smb的重啟
我們在前面介紹過啟動和停止Samba服務的命令,當我們修改過smb.conf 文件後,一是注意用testparm命令來進行語法檢查,二是不需要重新啟動系統,只要重新啟動smb服務就可以了。

關於Samba的設置有很多技術細節,請仔細查看smb.conf的手冊頁,和閱讀/usr/doc/samba*/目錄下面的說明文件,另外,在/usr/doc/samba*/examples/目錄下,還有很多現成的例子供參考。

5. smbclient、smbmount(smbmnt)和smbumount
假設SMB服務器的Netbios名字是milkyway_core,那麼我們可以使用smbclient命令察看服務器的共享服務:
# smbclient –L milkyway_core
然後SMB服務器會詢問當前用戶的口令,回答正確的話,就建立連接。聯接不成功,則作為guest處理。如果聯接成功,將進入一個類似ftp的界面,可以用?來察看可以使用的命令。關於smbclient的詳細用法,請察看smbclient的手冊頁和Samba軟件包中的說明。
我們還可以使用smbmount(smbmnt)和smbumount命令,像NFS一樣,mount服務器的共享目錄,為了讓普通用戶可以使用這兩個命令,請將命令屬性改成setuid,如:
# chmod 4755 /usr/local/samba/bin/smbmnt
# chmod 4755 /usr/local/samba/bin/smbumount
例如要安裝Windows 98主機lidf上的download目錄,命令如下:
% smbmount ‘\\lidf\download’ –c ‘mount /home/jw/inport –f 3755’

6. Linux和Windows 9x/NT上的打印機共享
Samba使Linux上的打印機可以稱為共享資源,同樣也讓Linux可以使用Windows 9x/NT等SMB服務器的共享打印機。
6.1 在Linux上使用Windows共享的打印機
安裝了Samba軟件包後,我們就得到了一個smbprint腳本,它可以把一個打印請求發送到網絡打印機上。如果smbprint腳本不在samba目錄的bin目錄下,請拷貝到bin目錄下,並將屬性調整為可執行。
如果我們使用Red Hat提供的printtool,那麼下面的設置工作可以不做,直接在圖形界面中進行設置即可。手工設置的話,首先,我們在/etc/printcap文件中,為網絡打印機建立一個新的隊列,例如:
smb:\
:sd=/var/spool/lpd/smb:\
:mx#0:\
:sh:\
:lp=/dev/null:\
:af=/var/spool/lpd/smb/acct:\
:if=/var/spool/lpd/smb/filter:
其中,lp=/dev/null,是因為網絡打印機不和本地的任何文件有聯系;af參數設置記賬,主要是為了進行網絡打印機的共享。
網絡打印機的過濾器只要簡單地拷貝以前的過濾器,然後稍微修改一下(見打印機部分)。關於網絡打印機的名字、口令,存儲在af所定義的目錄下,在此處就是/var/spool/lpd/smb/acct,假如沒有.config文件的話,我們可以手工創建,如:
server=Milkyway_core
service=HP6L
password=”hello”
然後重新啟動打印服務並打印測試文件:
# lpc restart all
# lpr –P smb test_file
注意,第一次使用smbprint時要確保其缺省的日志文件/tmp/smb-print.log不存在,否則會失敗並不斷嘗試。
6.2 在Windows上使用Linux共享的打印機
首先,在Linux上將本地打印機設置為共享資源。
如果用戶安裝打印機時使用的是Red Hat提供的printtool,那麼由於printtool提供的打印過濾器能夠自動區分打印文件的格式,所以Windows用戶可以像安裝Windows網絡打印機一樣安裝Linux共享的網絡打印機。
如果用戶配置打印機的時候,是自己手工配置的,並且打印機過濾器不能自動區分文件格式(比如使用Ghostscript)那麼用戶需要安裝PostScript的打印機驅動,比如你的打印機是HP LaserJet 6L,那麼需要安裝HP LaserJet PostScript(隨便什麼型號)的驅動,並且將打印機屬性中的PostScript輸出格式調整成“自動存檔”。

7. 如果要與Netware服務器通訊(共享目錄、打印機),需要安裝IPX軟件包(如光盤上提供的ncpfs-2.2.0.12-5.i386.rpm)。然後可以實現一下功能:
ncpmount:安裝Netware服務器的卷(volume)
ncpumount:卸載Netware服務器的卷(volume)
ncopy:向Netware服務器拷貝文件
nprint:向Netware打印服務器提交打印請求
其他功能請查看ncpfs的幫助文件(/usr/doc/ncpfs*/),不過遺憾的是,該軟件包的作者是在Netware 3.11環境上實現的,對Netware 4.x/5.x的支持可能有問題。


——摘自:http://www.linuxaid.com.cn


Copyright © Linux教程網 All Rights Reserved