Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1785105
  • 博文数量: 226
  • 博客积分: 8233
  • 博客等级: 中将
  • 技术积分: 3514
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-18 22:54
文章分类
文章存档

2019年(3)

2018年(7)

2017年(2)

2012年(8)

2011年(67)

2010年(45)

2009年(94)

分类: LINUX

2009-04-26 15:52:14

1、定制文件/etc/smb.conf
在安装完Samba后,还需要定制它的配置文件smb.conf,才能使Samba正常工作以符合要求。由于SMB是一个非常复杂的协议,所以配置Samba的工作也是比较繁琐的,大约有超过170条配置项出现在smb.conf文件中。

1)
smb.conf的语法
smb.conf
文件有一个清晰的语法结构,与Windows*.ini文件十分类似。如下所示:
该文件被分成几部分,每一部分都包括几个参数,用来定义Samba输出的共享及其详细操作。

文件被分隔成若干节,每一节都由一个被方括号括起来的标识开始(例如,[global][home][printers]),每一个配置参数或是一个全局参数(影响或控制整个服务器),或是一个服务参数(影响或控制服务器提供的某项服务 )。
global
部分定义的参数用来控制Samba的总特性。除global部分外,每一部分都定义了一个专门的服务。
你可以使用下面的语句来指定一个参数:
name=VALUE
name
可以是一个单词或者用空格隔开的多个单词。VALUE可以是布尔值(turefalseyesno10)、数字或字符串。
注释以分号开头,可以单独一行,也可以跟在一条语句之后。
通过在一行的最后一个字符后加反斜杠"\\"可以将一行分成多行。
每一部分的名字和参数都不区分大小写,例如,参数browseable=yesbrowseable=YES是完全等价的

2)
smb.conf文件的功能
smbd
nmbd这两个守护进程启动时(通常为系统引导时)读配置文件smb.conf,这一配置文件向这两个守护进程说明输出
什么共享、共享输出给谁以及如何进行输出等等。
因为安全问题是最重要的,所以你必须指定哪些计算机可以访问这一共享,smb.conf文件可以很灵活的明确指定每一服务有哪些用户可以访问。随着Linux网络的增大,这一控制越来越重要。

3)
smb.conf文件结构
smb.conf
文件主要包括三部分:
global
(全局)参数
directory shares
(目录共享)部分--包括标准的[home]部分
printer shares
(打印共享)部分
其中,global参数用来设置整个系统的规则;[home]部分和[printer]部分是服务的特定例程,services(服务)这一术语是网络客户机共享或输出的目录和打印机的Samba术语。这些服务定义了哪些用户可以访问这些目录和打印机以及如何访问这些目录和打印机。

清单1-1给出了smb.conf文件的一个简单的例子。
清单1-1 smb.conf文件的一个简单示例
[global]
netbios name = FRODO
workgroup = UAB-TUCC
server string = John Blair\'s Linux Box
security = user
printing = lprng
log file = /var/log/samba
lock directory = /var/lock/samba
[homes]
comment = Home Directory
browseable = no
read only = no
[printers]
browseable = no
guest ok = yes
printable = yes
[global] 段中设置了主机名称, 主机所在的工作组名称和浏览时可看到的对本机的描述。安全参数告诉 Samba
使用"用户级别"的安全保护方式。 SMB 有两种安全模式: 共享级别, 将资源加密码控制;用户级别, 可以使用某一用户的所有资源。
这里不能详细解释两种方式的微妙差别, 但大部分情况下, 你会想用用户级别安全控制。
[global]
段中还定义了日志文件目录和锁定文件的位置。日志文件在解决故障和完善系统时是很有用的,锁定文件可以阻止多个用户同时修改相同的文件。
[homes]
段中的设置控制了每一个用主目录的共享权限。comment 参数指定的字符串在你浏览本机资源时出现在指定资源的旁边。
browseable
参数控制一项服务是否能够出现在网络资源浏览表中。这里是一些非直觉的东西, browseable = no
意味着这个目录将在浏览时显示为要验证的用户名称。 举例来说, 指定 browseable = no, 当我浏览这个 Samba 服务器时,
我将看到一个名称为 cuckoo 的共享目录。当指定 browseable = yes , 我将看到一个名为 homes cuckoo
的共享目录。设置 read only = no 将允许通过验证的用户对主目录有写入的权限。 但是, 如果他们的主目录的 UNIX 权限 不允许写入,
那么他们就没有写的权限。 无论 UNIX 的权限怎样, 设置 read only = yes , 他们的主目录是只读的。
printing
命令描述了本地打印系统类型, 这可以让 Samba 知道怎样提交打印任务, 显示打印队列, 删除打印任务和其它操作。
如果打印系统是 Samba 所不知道的, 你必须在每次执行打印操作时指明命令。
清单中[printing]一段配置允许任何能够登录到 Samba 服务器的用户使用 printcap 中出现的 每一台打印机。 正常情况下,
如果使用用户级别安全控制, guest ok = yes 并不能授权每一个用户(使用系统) 每一个打印服务必须定义为 printable =
yes

下面的一段配置片断增加了一个命名为 public 的共享目录, 直接对匿名FTP目录有只读的 权限。 你必须在客户机上建立打印机驱动程序。 对于
Windows 95
Windows NT 客户机, 你可以使用printer name printer driver命令自动建立打印驱动。

[public]
comment = Public FTP Directory
path = /home/ftp/pub
browseable = yes
read only = yes
这段描述并不是解释一些微妙的主题,
例如用户级和共享级安全性的区别或者其它的授权认证主题。它仅仅让我们看到了Samba这座冰山的一角。另一方面,这是一个良好的例子,从中我们可以了解产生一个简单但可工作的smb.conf文件是多么容易。
下面,我们举另一个例子说明如何通过SambaLinux的打印机共享给Windows机器。
为了共享Linux的打印机给Windows机器,必须确定Linux机器上的打印机已经设置好。如果能从Linux上打印,那么设定Samba的打印机共享是很简便的。只要根据自己的情况,对smb.conf文件有关打印的部分进行修改就可以了。在修改中唯一需要注意的是确保打印机的路径要与 /etc/printcap中的spool目录相符合,然后就可以在Win95/NT上配置网络打印机了(关于如何在Win95/NT上配置网络打印机,本文不做介绍)。

4)
.标准smb.conf文件清单
Samba的软件包里的example目录中有一个缺省的配置文件 smb.conf.defaults。我们可以对它做适当修改后拷贝到你的安装目录下的lib目录里,并改名为smb.conf。清单1-2Samba 系统提供的标准的配置文件。为方便读者阅读,本文翻译了文件中的注释并适当的添加了解释。

清单1-2 标准smb.conf 文件
#
这是服务器的主要配置文件。您应该阅读smb.conf(5)的用户手册以了解下面
#
列出的每一个选项。Samba有很多的选项,它们之中的大多数并没有出现在这
#
个例子中。
#
#
以分号""或井号"#"开始的每一行都是注释,在执行时被忽略。在本例中
#
我们使用"#"作为注释而使用""作为可选配置的注释。
#
#
注意:无论何时修改了这个配置文件,您都要运行"testparm"命令来检查您所
#
做的修改有没有基本的语法错误。
#
#===================
全局变量设置Global Settings ====================
[global]
# workgroup
用来指定您的机器在网络上所属的NT域名或组名。格式是
# workgroup = NT-Domain-Name or Workgroup-Name
。缺省的组名是 MYGROUP
workgroup = MYGROUP
# server string
用来设置NT描述域。缺省值是Samba Server
server string = Samba Server
#
下面的选项对于安全很重要。它允许您设置哪些领域的机器可以访问您的Samba
#
服务器。下面的这个例子允许两个C类子网和"lookup"的连接请求而禁止来
#
自其他网段机器的连接请求。有关的例子请参看smb.conf的用户手册。
; hosts allow = 192.168.1. 192.168.2. 127.
#
允许自动加载打印机列表,而不需要您单独设置每一台打印机。
load printers = yes
#
您也许希望覆盖原有的printcap 文件。
; printcap name = /etc/printcap
#
对于SystemV系统,如果将printcap名设置为lpstat 将允许您从SystemV
# spool
中自动获得打印列表。
; printcap name = lpstat
#
除非您的打印机不是标准型号,否则您没有必要在下面指定打印机系统的类型。
#
目前支持的打印机系统包括:bsd, sysv, plp, lprng, aix, hpux, qnx
; printing = bsd
#
如果希望建立一个客户帐号,去掉下面语句前面的分号""。同时,您必须在
# /etc/passwd
中加入这个帐号的定义,否则将使用用户"nobody"作为客户帐户。
; guest account = pcguest
#
此选项将为每一个与服务器连接的机器定义一个单独的日志文件。
log file = /usr/local/samba/var/log.%m
#
此选项设置最大的日志文件的大小(以KB为单位)
max log size = 50
#
定义安全模式。大多数人都喜欢用户级安全模式,详细内容参看security_level.txt
security = user
#
只有当安全模式设置为服务器级(security = server)时,才定义下面选项。
; password server =
#
如果用户想使用加密口令的话,请参阅ENCRYPTION.txtWin95.txt WinNT.txt
#
文件,请在阅读以上文件后使用下面选项。
; encrypt passwords = yes
#
使用此选项允许您对每一个机器使用不同的配置。%m将被替换成与服务器
#
请求连接机器的NetBIOS名。
; include = /usr/local/samba/lib/smb.conf.%m
#
大多数人会发现此选项将显著提高服务器的执行效率,请参读speed.txt和用户
#
手册以了解更多细节。
socket options = TCP_NODELAY
#
配置Samba来使用多个网络界面,如果您有多个网络界面,那么必须按照下面
#
格式在这里列出。请参阅用户手册以获得更多的细节。
; interfaces = 192.168.12.2/24 192.168.13.2/24
#
浏览控制选项
#
如果不想使您的Samba服务器成为局域网内部的主浏览服务器,将此选项设为no
; local master = no
# OS Level
决定了该服务器在局域网内的访问优先权。
; os level = 33
# Domain Master
Samba服务器定义为主域浏览器。此选项将允许Samba在子
#
网列表中比较浏览。如您已经有一台Windows NT域控制器,不要使用此选项
; domain master = yes
# Preferred Master
使Samba在启动时选择一个本地浏览器并给它获得选择的较高
#
的机会
; preferred master = yes
#
仅当您的网络中有一台在安装时设置为主域控制器的NT服务器时使用此选项。
; domain controller =
#
如果想使Samba成为Windows95工作站的登录服务器,则使用此选项。
; domain logons = yes
#
如果允许域登录服务,那么您也许希望每台机器或每个用户的登录脚本运行一
#
个特定的每工作站的登录批处理文件。,
; logon script = %m.bat
#
运行一个特定的每用户名登录批处理文件。
; logon script = %U.bat
#
放置roving profiles 文件的位置(仅用于 Win95 WinNT) %L代表该服务器
# NetBIOS
名,%U是用户名,您必须取消后面定义的[Profiles]前面的注释号。
; logon path = \\\\%L\\Profiles\\%U
# Windows
Internet名服务支持记录部分
# WINS Support
告诉NMBD守护进程支持WINS服务器。
; wins support = yes
# WINS Serve
选项告诉NMBD守护进程作为WINS的客户机。
#
注意:Samba既可以作为WINS服务器也可以作为 WINS客户机,但不能兼
#
而有之。
; wins server = w.x.y.z
# WINS Prox
代表一个非WINS客户通知Samba响应名字解析请求。要使此选项
#
正常工作必须保证网络中至少有一台WINS服务器。缺省值是NO
; wins proxy = yes
# DNS Proxy
选项决定Samba是否通过DNS nslookups 去解析主机的NetBIOS
#
名。对于1.9.17 以前的版本内置值是yes ,对于1.9.18之后的版本内置值是no
dns proxy = no
#==================
定义共享服务Share Definitions ===================
#
所有使用者的home目录
[homes]
comment = Home Directories
#
当一个客户程序以客人用户类出本服务器的共享服务时,不列出homes服务。
#
但是本机用户创建的主目录服务仍使用[global]节设定的browseable
browseable = no
writable = yes
#
如果要创建一个netlogon目录则取消下面的注释。
; [netlogon]
; comment = Network Logon Service
; path = /usr/local/samba/lib/netlogon
; guest ok = yes
; writable = no
; share modes = no
#
如果要提供一个特定的共享roving profile则取消下面的注释。
#
缺省值是使用用户的home目录。
;[Profiles]
; path = /usr/local/samba/profiles
; browseable = no
; guest ok = yes
#
注意:如果您有一个BSD 风格的打印系统,您不需要单独定义每台打印机。
[printers]
comment = All Printers
path = /usr/spool/samba
browseable = no
#
设置public = yes 将允许以guest 帐号登录的用户使用打印机。
guest ok = no
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
#
其他例子:
#
#
下面定义了一台只有fred可以使用的私人打印机。Spool数据放在fredhome
#
目录里。注意:fred必须对Spool目录有写的权限,不管这个目录在什么位置。
;[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
#
下面定义的是对每个域服务器连接的机器有不同的目录的服务。这将允许您
#
对于不同的机器使用不同的配置,同样也可以使用%U选项为每个用户使用不
#
同的配置。%m在连接时将被替换为客户机的主机名。
;[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
#
下例说明了如何定义让两个用户共享一个目录,他们在这个目录里放置的文件
#
归他们各自所有。在此例中,这两个用户对该目录都有写的权限。当然文件的
#
保护应该设置恰当。很显然,这个例子可以扩展到适合于多个用户的情况。
;[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



阅读(1055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~