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 *ReType*new*UNIX*password* %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 = \%LProfiles\%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
; [1] [url=http://www.chinamx.com.cn/Article/os/Linux/200605/20060530130614_29233_2.html][2] 下一页