精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>网络书籍>>《FreeBSD使用大全》>>FreeBSD连载(67):配置samba

主题:FreeBSD连载(67):配置samba
发信人: Hopper()
整理人: hahalee(2000-02-28 20:03:36), 站内信件
http://www.sina.com.cn 2000年1月8日 17:02 王波

配置samba
  虽然缺省情况已经适合大部分用户访问自己在服务器上的个人目录的要求,
但是为了充分发挥samba提供的功能,与这些复杂多样的Windows网络相适应,就
必须更改smb.conf的设置。以提供更多的共享设置、服务器设置,以及用于支持
包括比较简单的共享方式和复杂的域认证方式在内的认证方式。

  smb.conf中的语法非常简单,整个配置文件分为多个不同的部分,每个部分
具有一个标题。使用方括号将标题引起来,标题下包括一些相关设置,每一行都
用于一个相关设置。设置文件中的每个部分或者定义了一个共享资源的名字,或
者设置了一组参数。以下以缺省smb.conf为例,介绍smb.conf中的相关设置。


[global]设置

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#
# Any line which starts with a ; (semi-colon) or a # (hash)
# is a comment and is ignored. In this example we will use a #
# for commentry and a ; for parts of the config file that you
# may wish to enable
#
# NOTE: Whenever you modify this file you should run the command "test
parm"
# to check that you have not many any basic syntactic errors.
#
#======================= Global Settings =============================
========
[global]
 
 

  [global]部分定义了服务器本身使用的配置参数,以及其他共享资源部分使
用的缺省配置参数,因此相当重要。

# workgroup = NT-Domain-Name or Workgroup-Name, eg: REDHAT4
   workgroup = MYGROUP
 
 

  工作组设置本地网络使用工作组名字(或者是NT域名字),这对于将正确进
行浏览数据中非常重要。否则,Windows客户就不能从其网络邻居中发现这个Sam
ba服务器。

# server string is the equivalent of the NT Description field
   server string = Samba Server
 
 

  server string是对于本地服务器的简单描述,这些信息将作为这台服务器的
属性,返回给Browser,显示在Windows客户中作为对这个服务器的描述。

# This option is important for security. It allows you to restrict
# connections to machines which are on your local network. The
# following example restricts access to two C class networks and
# the "loopback" interface. For more examples of the syntax see
# the smb.conf man page
;   hosts allow = 192.168.1. 192.168.2. 127.
 
 

  hosts allow参数用于限制可以访问这台samba服务器的客户机的IP地址范围
,通过指定一系列网络地址,使得只有这些网络中的计算机才能访问这台服务器
提供的资源,以提供安全限制。缺省情况下,这行配置被注释了,使得所有的客
户都可以访问这台计算机,这样就存在一定的安全问题。

# If you want to automatically load your printer list rather
# than setting them up individually then you'll need this
   load printers = yes
 
# you may wish to override the location of the printcap file
;   printcap name = /etc/printcap
 
# on SystemV system setting printcap name to lpstat should allow
# you to automatically obtain a printer list from the SystemV spool
# system
;   printcap name = lpstat
 
# It should not be necessary to specify the print system type unless
# it is non-standard. Currently supported print systems include:
# bsd, sysv, plp, lprng, aix, hpux, qnx
;   printing = bsd
 
 

  这些设置是用于设置samba服务器的打印机资源,load printer=yes就允许s
amba服务器对外共享服务器的打印机。由于不同的Unix系统中会使用不同的打印
系统和不同的打印设置文件,因此需要设置正确的 printcap和printing类型,对
于使用BSD打印系统的FreeBSD来讲,打印系统为BSD,使用的设置文件为 printc
ap,这些是缺省设置,不需要改动。对于使用Unix System V打印系统的Samba,
则需要重新进行设置。

# Uncomment this if you want a guest account, you must add this to /et
c/passwd
# otherwise the user "nobody" is used
;  guest account = pcguest
 
 

  由于Mircrosoft客户没有用户的概念,因此有时会用没有用户和口令的请求
访问服务器,就需要将这个没有用户的请求映射为系统中的某个用户,Samba服务
器才能安全的访问系统。guest account 就定义这样的请求在Unix下对应的用户
权限。为了安全的原因,不能让这个帐户在系统中有可写的权限,通常可以增加
一个专用帐户,如pcguest。如果这个设置被注释的情况下,系统缺省使用nobod
y执行 Windows客户的请求。一些使用者建议不要使用nobody用户,因为系统中的
很多程序缺省都使用它,因此就会有安全问题。

# this tells Samba to use a separate log file for each machine
# that connects
   log file = /var/log/log.%m
 
# Put a capping on the size of the log files (in Kb).
   max log size = 50
 
 

  这里定义samba的日志文件为/var/log目录下的以log为前缀的文件,%m用于
代表从访问的NetBIOS 计算机名,如果使用的用户级认证,还可以使用%U表示不
同的登录用户。例如从一台名字为win95c的计算机访问samba服务器的日志,将记
录在/var/log/log.win95c文件中。max log size定义每个日志文件的存储限制。


# Security mode. Most people will want user level security. See
# security_level.txt for details.
   security = user
# Use password server option only with security = server
;   password server = <NT-Server-Name>
 
# You may wish to use password encryption. Please read
# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.

# Do not enable this option unless you have read those documents
;  encrypt passwords = yes
 
 

  在SMB协议中,有多个不同的认证方式,包括简单的共享级认证和用户级认证
。Unix为多用户操作系统,缺省就使用用户级认证方式。当使用用户级认证的时
候,Samba服务器使用Unix操作系统的用户和口令(来自/etc/passwd )对用户进
行认证,这是一种独立的认证方式。而有时候希望所有的服务器使用同一个认证
数据库进行统一认证,因此就导致出现了基于域的统一认证模式。在一个域中,
用户只需要通过域控制器进行认证即可,域中其他SMB服务器就将认可域控制器的
认证。

  为了使Samba服务器支持域认证方式,可以有两种不同的设置方式,一种为真
正的域认证,另一种为服务器认证方式,将Samba服务器配置为通过服务器验证用
户,这需要指定security=server,以及指定password server的名字为NT的域控
制器。认证服务器的方式不能事先域认证方式提供的一些特征,但它的适用范围
并不仅限于域,使用工作组的网络也能通过统一的认证服务器来使用统一认证模
式。设置域认证方式在后面进行详细解释。

  在Windows NT 4及Windows 98之后,客户和服务器之间进行认证时,口令不
再以明文的方式在网络中传输了。为了支持加密口令传输,需要设置encrypt pa
sswords选项。同样,这也需要其他复杂的设置。

# Using the following line enables you to customise your configuration

# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /usr/local/etc/smb.conf.%m
 
 

  系统管理员可以为每个特定的计算机定制一个特定的配置文件,那里的设置
将覆盖smb.conf中的缺省设置。这样就可以针对不同的计算机提供不同的配置。


# Most people will find that this option gives better performance.
# See speed.txt and the manual pages for details
   socket options = TCP_NODELAY
 
 

  socket参数用于配置对TCP的处理方式,以适合Microsoft客户的特征。Micr
osoft习惯为每个很短的会话都建立单独的连接,而不是使用一个连接进行多次传
输,这样在传输中就需要进行多次连接会话设定过程,对性能有一定影响。为了
改善性能,需要设置TCP_NODELAY或IPTOS_LOWDELAY选项。

# Configure Samba to use multiple interfaces
# If you have multiple network interfaces then you must list them
# here. See the man page for details.
;   interfaces = 192.168.12.2/24 192.168.13.2/24
 
 

  如果计算机上有多个网络界面,那么就需要让samba向多个界面广播b-node广
播包,以及为这些界面提供资源服务,否则samba就会只向某一个界面提供网络服
务。当然也可以设置这个参数,使得samba 只服务于某个指定的网络,而不是服
务器连接所有的网络。

# Browser Control Options:
# set local master to no if you don't want Samba to become a master
# browser on your network. Otherwise the normal election rules apply
;   local master = no
 
# OS Level determines the precedence of this server in master browser

# elections. The default value should be reasonable
;   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 s
tartup
# 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 = <NT-Domain-Controller-SMBName>
 
 

  这些设置选项主要用于SMB网络中进行浏览时,设置samba服务器的行为。缺
省情况不让samba服务器参加broswser的推举过程,为了使得samba服务器能成为
browser,就需要设定local master =yes。然后samba服务就可以根据os level设
置的权重进行推举,缺省的os level为0,这个权重不会赢得推举。但可以取消注
释,将os level设置为33,这将在与所有Windows计算机(包括Windows NT)的推
举竞赛中获得胜利,因为NT server的权重为32。设置比33更高的权重,只是在不
同的samba 服务器之间进行选择时才有意义。

  由于Unix及Samba服务器在同样硬件配置下具有更高的网络性能,因此一般情
况下,使用Samba服务器作Browser更佳。当然可能在Samba服务器启动之前,网络
中都已经存在了Browser了,一般情况下不必重新进行推举过程,让网络中的现有
Browser继续发挥作用。如果希望Samba服务器总是成为Browser,可以设置当Sam
ba服务器启动时,迫使网络中重新进行推举过程,这需要设定perfered master参
数。

  通常Samba能够胜任master Browser的角色,然而在多个子网的情况时,网络
上就会存在Local master Browser和Domain master Browser。以上的设置只能使
Samba成为 Local master Browser,缺省Samba并不参加Domain master Brower的
推举。设置Samba服务器成为Domain master Browser就必须使用domain master参
数进行设置,这对于使用工作组方式进行跨子网浏览意义重大。

  但是如果网络使用的是NT的域方式,就要使用NT的域控制器作为Domain mas
ter Browser ,不要设置与NT域控制器同一个子网中的Samba服务器的domain br
ower与browser功能,以免它和域控制器竞争。不让Samba服务器和NT域控制器竞
争的原因是由于Windows NT中域控制器还涉及域认证(不是认证域用户,而是认
证域上的合法成员计算机),SMB协议中各种复杂功能交错混合,浏览和认证两种
不同的功能竟也混合在一起。由于域控制器完成的域认证任务,Samba服务器不能
够完成,因此为了避免与NT域控制器相互冲突,最好使用域控制器作Domain mas
ter Browser。

  让Samba服务器了解当前域中存在的域控制器的方法是指定在设置文件中指定
域基本控制器PDC(primary Domain Controller)的NetBIOS名字,这需要使用d
omain 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
 
 

  当用户通过一台Windows 9x客户机使用用户级认证访问网络时,他可以选择
登录进网络中的域。这意味着他不但要在SMB服务器中进行验证,而且会执行服务
器中相应目录中的登录脚本,以自动执行一些相关设置。通常这种登录功能是由
Windows NT服务器来执行的,然而Samba服务器也能完成这个任务,但必须设定d
omain logons 参数。此后就可以对不同的客户计算机或不同用户指定相应的登录
脚本。这个功能还必须要求在本配置文件后面设置 netlogon共享选项,以便客户
机能访问相应的登录脚本。

  除了登录脚本之外,Windows NT中为了支持移动用户在不同地点进行漫游,
也提供了针对每个用户的描述其使用环境的Profile文件,Samba服务器也可以通
过logon path来支持对windows客户机这种漫游能力的支持。这样当Windows客户
机使用漫游功能的时候,客户机会自动将用户的配置文件保存到服务器上,此后
每次登录进域的时候都重新下载这个配置文件,设置Windows桌面环境。

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable it's WINS
 Server
;   wins support = yes

# WINS Server - Tells the NMBD components of Samba to be a WINS Client

#       Note: Samba can be either a WINS Server, or a WINS Client, but
 NOT both
;   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 nam
es
# 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
 
 

  上面的这些选项是用于设置NetBIOS名字解析方式,wins support选项使得n
mdb能对外表现为一个NBNS服务器。wins server用于指定一个外部名字服务器的
地址(可以为NT上的wins服务器或另一个Samba服务器),使得nmbd能用做NBNS客
户端,通过访问该wins名字服务器解析NetBIOS名字。 

  此外,还有一些不使用名字服务器进行解析的NetBIOS客户,如果名字服务器
位于另一个子网上,那么它们就无法正确解析名字,而Samba可以使用wins prox
y帮助它们使用名字服务器解析地址。例如一个WINS服务器在另一个子网上,本地
子网内的Samba服务器配置了wins server的地址,其他Windows客户没有设置win
s服务器地址,它们使用b-node广播方式查询名字,在这台Samba服务器设置了wi
ns proxy能力之后,它就能代替wins服务器回应客户请求。因此要用作wins代理
,就必须本身能使用名字服务器进行解析,就要求先设置wins server参数。

  此外,NetBIOS名字解析也可以扩展到通过DNS查询进行帮助,使用dns prox
y设置就能让Samba 服务器通过dns进行查询,回应NetBIOS名字查询请求。


[homes]个人目录共享

#============================ Share Definitions ======================
========
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
 
 

  [homes]部分使得每个Unix用户通过SMB客户登录上来的时候,可以共享使用
他自己的个人目录。这个共享资源具备特别属性,当用户登录上之后,共享名就
不是homes,而是被服务器映射为用户自己的标识符。

  设置这个特别的共享选项,就允许每个用户访问自己的个人目录,而不必为
每个用户都配置一个共享资源部分。正由于系统会自动映射,因此就不需要定义
要共享的文件目录路径,而在其它文件资源共享选项中,都需要使用path参数进
行定义。

  由于Samba系统会自动将homes共享名改变为用户的个人标识符,因此要设定
browseable=no ,设置homes本身这个名字不出现在资源列表中。writable为用户
写权限设置,由于是在用户的个人目录下,用户可以具备写权限。


[netlogon]与[Profiles]

# Un-comment the following and create the netlogon directory for Domai
n Logons
; [netlogon]
;   comment = Network Logon Service
;   path = /usr/local/samba/lib/netlogon
;   guest ok = yes
;   writable = no
;   share modes = no
 
 

  当允许Samba服务器支持客户的网络登录功能之后(设置domain logon),就
需要设置[netlogon] 部分(删除注释符号),为guest用户打开登录路径的访问
权限,以保证每个用户都能访问其自己的登录脚本。由于需要使用guest对应的U
nix帐户访问登录脚本,这个登录路径及其下面的脚本文件都要允许该Unix帐号可
以读取。

  建立这个目录之后,要设定正确的权限,并且创建这个目录下对应各个计算
机或用户的登录脚本,以提供给客户正确的登录脚本。

# Un-comment the following to provide a specific roving profile share

# the default is to use the user's home directory
;[Profiles]
;    path = /usr/local/samba/profiles
;    browseable = no
;    guest ok = yes
 
 

  当支持Windows计算机漫游能力时,可以设定[Profiles]部分,并为相应的路
径建立目录,及分配权限。来为Window计算机用户设置桌面环境。


[Printers]打印机设置

# NOTE: If you have a BSD-style print system there is no need to
# specifically define each individual printer
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
# Set public = yes to allow user 'guest account' to print
   guest ok = no
   writable = no
   printable = yes
 
 

  这个部分就用于设置将printcap中定义的所有打印机使用的相关设置,缺省
情况下允许所有的合法客户使用所有的打印机。BSD风格的打印系统,不需要任何
设置就能正确共享所有的打印机,当然也可以使用printer参数指定具体的打印机
以提供共享。而path参数定义的是打印机缓冲区的位置。guest ok、writeable用
于设置正确的权限,而printable用于设置打印属性。

  由于Windows的打印驱动已经将要打印的文件转化为打印机支持的那种描述语
言,因此这些打印文件不再需要任何过滤器进行转换。因此需要在printcap中定
义一个不使用任何过滤器、直接将打印文档输出到打印机端口的打印机选项。


其他专有共享目录

# This one is useful for people to share files
;[tmp]
;   comment = Temporary file space
;   path = /tmp
;   read only = no
;   public = yes
 
# A publicly accessible directory, but read only, except for people in

# the "staff" group
;[public]
;   comment = Public Stuff
;   path = /home/samba
;   public = yes
;   writable = yes
;   printable = no
;   write list = @staff
 
# Other examples.
#
# A private printer, usable only by fred. Spool data will be placed in
 fred's
# home directory. Note that fred must have write access to the spool d
irectory,
# wherever it is.
;[fredsprn]
;   comment = Fred's Printer
;   valid users = fred
;   path = /homes/fred
;   printer = freds_printer
;   public = no
;   writable = no
;   printable = yes
 
# A private directory, usable only by fred. Note that fred requires wr
ite
# access to the directory.
;[fredsdir]
;   comment = Fred's Service
;   path = /usr/somewhere/private
;   valid users = fred
;   public = no
;   writable = yes
;   printable = no
 
# a service which has a different directory for each machine that conn
ects
# this allows you to tailor configurations to incoming machines. You c
ould
# also use the %U option to tailor it by user name.
# The %m gets replaced with the machine name that is connecting.
;[pchome]
;  comment = PC Directories
;  path = /usr/pc/%m
;  public = no
;  writable = yes
 
# A publicly accessible directory, read/write to all users. Note that 
all files
# created in the directory by users will be owned by the default user,
 so
# any user with access can delete any other user's files. Obviously th
is
# directory must be writable by the default user. Another user could o
f course
# be specified, in which case all files would be owned by that user in
stead.
;[public]
;   path = /usr/somewhere/else/public
;   public = yes
;   only guest = yes
;   writable = yes
;   printable = no
 
# The following two entries demonstrate how to share a directory so th
at two
# users can place files there that will be owned by the specific users
. In this
# setup, the directory should be writable by both users and should hav
e the
# sticky bit set on it to prevent abuse. Obviously this could be exten
ded to
# as many users as required.
;[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
 
 

  此后,缺省smb.conf中给出了一些设定各种共享文件资源、打印机资源的例
子,例如设置特定打印机的 [fredprn],设置私人文件共享资源的[freddir]和[
myshare],使用宏为多个用户设置共享的[pchome],提供公共访问的[public]和
[tmp],FreeBSD的管理员可以根据具体情况,根据这些设置例子设置相应的共享
资源,并设置相应的访问权限,以保护文件系统不被非法访问。

  需要注意的是,当使用valid user用来设置合法访问用户时,或者使用wirt
e list定义具备写权限的用户时,都可以使用@staff的形式使用Unix的组名,这
样凡是属于该staff组成员的用户,都会具备相应权限。

  从这些例子中可以看到[global]用于设定全局参数,不会出现在资源列表中
,[homes]用于设定个人目录共享,其共享的名字映射为个人标识符而非homes,
[printers]设定打印机共享,将共享所有的打印机名字,除了这些标题的共享名
字与标题不同之外,其他每个标题都将代表一个共享资源的名字。

  当更改设置之后,可以重新启动Samba服务器,提供新的共享服务了。但在重
新启动服务器之前,最好使用 Samba软件包中提供的测试软件,检查一下设置是
否正确。这些小工具程序包括检查smb.conf设置的testparm ,检查打印机名字的
正确性的程序testprn,用于进行NetBIOS名字解析的nmblookup等。


使用swat配置samba

  samba 2.0提供了一个能够通过浏览器来配置samba的工具──swat。它是一
个专用www服务器,使用inetd 来启动,然后经过认证,可以允许用户通过浏览器
来配置smb.conf。为了达到这个目的,首先要为swat分配一个固定的端口,这个
工作可以通过在/etc/services中增加一行来完成:

swat    901/tcp
 
 

  出于安全的考虑,应该使用1024以下的端口,这是因为非root用户也能占用
1024以上的端口,如果使用 1024之上的端口,可能在某些情况下,普通用户就可
能通过欺骗的方法获得管理员的口令。

  为了启动swat,需要在inetd.conf中增加一个入口,并重起inetd:

swat  stream    tcp  nowait   root /usr/local/sbin/swat     swat
 
 

  然后就能使用Netscape等浏览器来配置samba了,为了避免认证口令通过网络
传输,应该在本地启动浏览器(并进一步可以使用tcp_wrapper提供保护)。输入
URL为:http://localhost:901 /,浏览器将提示用户名和口令对用户进行认证,
可以输入任意一个Unix用户进入swat页面,但普通用户只能读取 samba设置,而
不能更改,为了设置samba,必须使用root用户进行认证。一些功能简单的浏览器
不支持浏览器方式的用户认证,就无法使用swat设置Samba。

  由于改变smb.conf对于系统安全有严重的影响,因此使用swat一定要小心。
为了防止进行swat认证时root密码被窃听,不应该在远程启动浏览器进行设置,
应该在控制台或本地安全网络内进行设置。而且一旦设置完毕,应该立即退出浏
览器,因为浏览器在内存中保存用户的认证信息,直到浏览器退出。

  注意,swat将删除原有smb.conf中的全部注释,并重新安排各个设置项的位
置,因此应该在使用swat 设置之前备份原有的smb.conf。而且swat只是提供了一
个容易使用的设置界面,并不能保证设置一定就是正确的,因此还是要在理解sm
b.conf的基础上才能正确设置。

  swat提供7个不同功能的页面,提供管理员访问。主页面HOME,提供了对Sam
ba文档的连接,用于管理员实时查看相关手册;GLOBALS页面提供对smb.conf中[
globals]部分中的各个参数进行设置;SHARES 用于选择、增加、删除各个共享资
源,查看并更改其设置选项;PRINTERS用于设置打印机选项;STATUS 用于检查当
前Samba服务器的状态,包括客户计算机的连接状态和用户的连接信息,管理员可
以使用它来重新启动 Samba,这样就能在更改设置之后使新设置生效;VIEW用于
查看当前设置的smb.conf的内容;PASSWORD 用于管理加密口令,提供加密认证情
况下增加和管理用户,并可以保持Unix和Windows NT的口令一致,这个功能只在
使用了加密口令功能之后才有用,更改的口令将直接保存在/usr/local/private
目录下的smbpasswd 文件中。PASSWORD功能将不但更改smb.conf,还将更改Samb
a使用的口令选项,因此对于使用加密口令认证方式的系统,最为有用。

  使用SWAT,设置Samba就非常容易,不再需要手工编辑设置文件,而可以直接
使用浏览器更改设置,并重新启动Samba服务器。

未完,待续。。。  



--
小多子:你知道我们佟家百年不衰的道理么?
        那就是,不要一条路走到黑!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]

[关闭][返回]