Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1607492
  • 博文数量: 185
  • 博客积分: 10363
  • 博客等级: 上将
  • 技术积分: 2205
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 22:29
文章分类
文章存档

2013年(12)

2012年(5)

2011年(2)

2010年(12)

2009年(9)

2008年(15)

2007年(48)

2006年(82)

分类: LINUX

2007-02-05 23:43:55

使 Samba 运转起来:配置阶段

Daniel Robbins
总裁/CEO,Gentoo Technologies, Inc.

内容:
添加一些共享
令人兴奋的共享
共享主目录
共享参数
snb.conf 选项
从 Samba 打印
参考资料
关于作者


在上一篇文章中,Daniel Robbins 指导您完成第一次设置 Samba 的过程。现在应该配置 Samba 使它执行您希望它执行的所有操作了。




这里有一个我们曾使用过的 smb.conf 清单:


[global]

# set YOURWORKGROUP to the name of your workgroup

workgroup = YOURWORKGROUP
security = user
encrypt passwords = yes
guest account = guest

# enable *one* of the following two lines
# enable the first line if you want to use an existing
# WINS server on your subnet, otherwise, enable the
# second.

# wins server = IP address of WINS server
# wins support = yes

local master = yes
os level = 99
domain master = yes
preferred master = yes

# optional security options. Customize for your site.

# hosts allow = 192.168.1. 127.
# interfaces = eth1

[tmp]
path=/tmp
writeable=yes




添加一些共享
当这个 smb.conf 文件生效后,它所能做的就是通过创建一个名称为 \"tmp\" 的共享,来和 Windows 一起共享 /tmp 目录。这不够让人兴奋。让我们创建另一个更有用的共享。向 smb.conf 添加以下几行,然后重新启动 Samba。


[ftp]
path=/path/to/ftp/root
writeable=no




如果在 Samba 服务器上有 ftp 位置或某种文件归档,那么可以通过使用类似的代码来在网络上共享数据。\"writeable=no\" 参数告诉 Samba 不允许任何人创建或修改该共享上的文件。任何具有有效 Samba 帐户的人都能够访问这个共享。

令人兴奋的共享
我知道您现在在想什么。但这仍不够让人兴奋。如果共享主目录呢?下面是实现如何这个目的的代码:


[drobbins]
comment=Home directory for drobbins
path = /home/drobbins
force user = drobbins
read only = no
valid users = drobbins administrator




这一个有趣得多。向 smb.conf 添加类似的代码可以让您共享主目录。在该例中,创建了 \"drobbins\" 共享。它在网络上共享了 /home/drobbins 的内容。幸运的是,有了 \"valid users\" 那一行,并不是所有人都能访问这个共享。这行导致 Samba 拒绝除 \"drobbins\" 或 \"administrator\" 帐户之外任何人进行的访问。因为使用的是 Windows NT,所以我经常作为 administrator 登录。在这种情况下,仍能访问 \"drobbins\" 共享。这一行 valid users 就可以允许这种情况发生。

您还会注意到 \"read only\" 参数的使用。您可能已猜到,\"read only\" 与 \"writeable\" 参数相反。我们只需要用 \"writeable=yes\" 就能替代这一行。这表示只要有合适的许可权,Samba 就允许写入这个特定的共享。因为 Samba 的 \"drobbins\" 用户直接映射成 Unix 的 \"drobbins\" 用户,并且 drobbins 恰巧又是 /home/drobbins 目录及其内容的所有者,所以就允许写和修改文件。

您是否曾作为 root 用户在主目录中创建文件,然后在作为一般用户登录后尝试修改它时被拒绝了写访问呢?对我来说,这种情况一直发生。要解决问题,需要执行 \"su\"、 \"chown drobbins.drobbins filename\",然后从 root 用户中 \"exit\" (退出)。最后终于允许我修改该文件。

我提到这一点是因为在您共享主目录并使用其它 Samba 用户访问它们时也可能产生类似的问题。请考虑以下情况。我作为 administrator 访问共享并创建了文件。通常,这个文件是由 administrator 拥有的,不能由 drobbins 用户修改。如果 drobbins 尝试修改它,访问就遭到拒绝。幸运的是,Samba 具有避免这种情况的 \"force user\" 选项。\"force user\" 选项将使所有对文件(在特定的 Samba SMB/CIFS 共享上)执行的操作将使用单一 Unix 帐户来执行。在 \"drobbins\" 共享示例中,这意味着 administrator 创建的所有文件实际上都由 drobbins 拥有,防止任何所有权冲突。因为 \"drobbins\" 共享包含了主目录的内容,我希望将 drobbins 帐户拥有的所有内容都保存在其中。

在开始下一个主题之前,我应该提一下 \"comment\" 参数。这允许您用从 Windows 可见的描述性注释来补充说明您的共享。

共享许多主目录
我们已介绍了如何共享单个主目录了。但如果恰巧您要管理包含几百个用户的服务器,而所有用户都希望能从 Windows 访问他们的主目录,在这种情况下您怎么做呢?很幸运,Samba 有一个特殊的共享,称为 \"homes\",专门用于这个目的。这里说明它是如何工作的:


[homes]
comment=Home directory for %S
path=/home/%u
valid users = %u administrator
force user=%u
writeable = yes
browseable = no




我提到过,这是一个“特殊”的共享。它与一般共享的工作原理不一样。Samba 能够认识这种特殊的标识 \"[homes]\" 并用不同的方式处理这个共享。

这个共享最不同寻常的地方是使用了 \"browseable=no\" 参数。这种特殊的选项使共享在“网络邻居”下不可见,它通常用于阻止那些想要“探索”它所能看到的所有共享的存心不良的用户。但为什么在这里使用它呢?

答案有些耐人寻味。您看,\"homes\" 共享确实创建了一个名为 \"homes\" 的共享。但这个特定的共享对我们一点用处没有。它不做任何事,所以我们把它隐藏起来。\"homes\" 共享所做的事非常多。它告诉 Samba 自动为每个个人用户即时创建主目录。例如,假设我们的 \"drobbins\" 共享没有在 smb.conf 中定义,而我们作为 NT 用户 \"drobbins\" 浏览“网络邻居”。就会发现一个名为 \"drobbins\" 的共享,它的行为与原始 \"drobbins\" 共享的行为相同。如果使用 NT 用户 \"jimmy\" 访问 Samba,就会发现一个配置完善的 \"jimmy\" 共享。这是 homes 的魅力所在。添加一个特殊的共享会相应地创建所有主目录共享。

现在,它的工作原理呢?当设置 \"homes\" 共享时,Samba 将检测哪个 NT 用户在访问 Samba。然后,它将创建一个已经为这个特定用户定制过的主目录共享。好象这个共享是个正常的非动态共享一样,它将出现在“网络邻居”中。而 NT 用户并没有意识到这个特定的共享是提前创建的。让我们看看每个特定选项是做什么的:

comment 参数使用 %S 通配符,它可以扩展成实际的共享名。这将导致 \"drobbins\" 共享带有注释 \"Home directory for drobbins\",\"jimmy\" 共享带有注释 \"Home directory for jimmy\" 等等。path 参数还包含通配符 %u。%u 扩展成访问共享的用户名。在特殊情况下,%u 等价于 %S,因此我们就使用 path=/home/%S 代替。它可以让 Samba 动态地将共享映射到磁盘上的正确位置。

我们再次使用 \"valid users=\" 那一行中的宏,以便只允许共享的所有者和管理员访问它。\"force user\" 也使用一个宏,以便所有文件访问将由一个帐户执行。当然,我们会使共享对所有已认证的用户可写。当使用 \"browseable=no\" 参数时,动态创建的共享在创建它们时将是可浏览的。当然,它只隐藏不起作用的 \"homes\" 共享。

共享参数
我们已经看过一些在创建共享时使用的一些方便技术。在这一节中,我将介绍一些常用的选项,可以让您根据每个共享定制 Samba 功能。也可以把所有与共享相关的选项放在 [globals] 这一节中,从而为所有共享设置缺省值。

comment=
comment = 参数是非常方便的选项,可以使 Samba 系统从 Windows 方查看时更正规。它可以让您指定特定共享所带的注释,描述共享的内容。指定注释时(特别在使用 \"homes\" 时),我经常使用 %S 宏,它扩展成共享的名称。

path=
path= 是最基本的 Samba 共享参数之一。它让您将路径设置成要导出的目录。请注意,缺省情况下,该目录树中的任何符号链接都会跟随。因此用户有可能“跳出”目录树。从 Windows 方,它们没有跟随符号链接的指示。它将只作为普通的文件或目录出现。我们将讨论一些参数,它们可以更改这种行为使符号链接更安全。

force user=
force user= 是我最喜欢用的参数之一。它强制所有文件修改都由单一用户帐户执行。通常需要和 valid users= 选项一起使用它来限制对某些用户的访问。因为所有文件操作都是使用单一用户帐户执行的,所以 force-user= 的一个副作用是您无法通过查看 Unix 文件权限知道谁做了什么。因此对于可写的共享,force user= 选项应该带有适当的安全性缺省值。没有这个选项,所有文件操作就将由正在访问共享的 Samba 用户执行。

force user 示例
force user=drobbins




browseable=
一种增强安全性的简单方法是使特定共享不可见。缺省情况下,共享在“网络邻居”中是可浏览的。使它们不可见可以帮助阻止不希望的黑客攻击。但不应该将它用作安全性的唯一方法。只是因为共享不列在浏览列表中并不能防止从 Windows 访问它。它只能减少您可能提供给不怀好意用户的信息量。要访问隐藏的共享,可以将它的 UNC 名称输入到“运行...”(Run...) 对话框中。例如,可以通过从 Windows 输入 \"\\\\myserver\\test\" 来访问 myserver 上名为 \'test\' 的隐藏的共享。

browseable 示例

browseable=no




available=
缺省情况下,available= 选项为 \'yes\',它只是禁用共享的一种方便的手段,而不是完全从 smb.conf 中注释掉或删除它。Available=no 将使共享在重新启动 Samba 后变成非活动的。

available 示例
available=no




valid users=
明确利用 valid users= 选项来限制对特定共享的访问。缺省情况下,允许所有已认证的用户访问 Samba 共享。可以通过将 \"@\" 附加到组名上来引用一个有效的 NIS 网络组或 Unix 组。

valid users 示例
要允许 drobbins 和 wheel 组的成员能访问共享:
valid users = drobbins @wheel




dont descend=
dont descend= 指定 Samba 不应该进入共享中的目录。它可以方便地防止 Samba 进入一个包含递归符号链接的目录,或者限制对如 /proc 和 /dev 等无关目录的访问。请务必测试 dont descend= 设置来确保它们能使用。例如,您可能需要将 \"dont descend= /dev\" 换为 \"dont descend= ./dev\"。

follow symlinks=
follow symlinks= 通常缺省值为 \'yes\',将导致 Samba 跟随所有符号链接,即使它们将 Samba 重定向至导出目录树以外的文件或目录。将 follow symlinks 设置为 \'no\' 将关闭这项功能,并能完全防止跟随符号链接。将 follow symlink 关闭将消除潜在安全性漏洞,它应该在不需要符号链接时执行。

follow symlinks 示例
follow symlinks=no




volume=
volume= 选项会导致 Samba 将 \"volume name\" 与特定的共享关联起来。这在使用 Samba 共享导出 CD-ROM 的内容时特别有用。许多安装程序都希望在 CD 上找到正确的卷名,没有这些卷它们将无法使用。

volume 示例
volume=My Favorite CD




create mask=
Samba 使用 create mask 来设置对新创建的文件的正确权限。create mask 定义新创建的文件将允许哪些权限。使用二进制 \"and\" 操作将提供的八进制数与所需的权限结合起来。将导致不在掩码中的任何许可权都从新文件的权限中删除。

create mask 示例

create mask= 0755




directory mask=
directory mask= 的工作方式和 create mask= 的类似。它指定一个八进制数,这个八进制数定义了新目录所允许的权限。

smb.conf 的其它选项
在这一节中,我们只介绍了在配置实用并且安全的 Samba 系统中最关键的那些 smb.conf 选项。 Samba 本身有许多有用的额外配置选项。要了解更多选项,请查看 smb.conf 主页,其中列出并详细描述了它们。(请参阅参考资料。)

从 Samba 打印
Samba 的打印机共享能力非常方便和好用。重新回忆一下,Samba 可以让您导出现有基于 lpd 的打印机,这样 Windows 客户机就可以与它们连接并打印。这种安排的一个好处是所有特定于打印机的代码在 Windows 方生成。这意味着您的 Unix 系统不需要对特定打印机有显式支持。只要 Unix 系统能将原始数据转储到打印机,它就可以运转,而且运转得很好。它甚至还可以让您共享和使用纯 Unix 环境中不完全起作用的打印机,例如 Adobe 基于 PrintGear 的 NEC SuperScript 870。

Samba 打印的工作原理
要使打印能够工作,首先需要启动 lpd 服务。但 lpd 配置不在本文的讨论范围内,它并不太困难,在 linuxdoc.org 上打印 FAQ (Printing FAQ) 中有详细描述。(请参阅参考资料。)您需要将打印机配置为缺省情况下的“原始”打印机,这样所有使用 lpr 命令发送给打印机的数据就都一字不差地复制,没有经过任何过滤或修改。测试 lpd 以确保它是以“原始”方式配置是很简单的。在 Windows 方,为特定打印机安装打印到 FILE 的打印机驱动程序:从常用的 Windows 字处理器打印一页并将它存储到文件中。然后将它复制到 Unix 机器并使用 lpr 打印它。如果得到正确的输出,您就完成了自动使用打印机 Samba 的配置。

Samba 打印全局参数
要在 Linux 系统上使 Samba 打印能正确工作,需要将以下参数添加到 [global] 一节:


printcap name=/etc/printcap
printing=bsd




如果 printcap 位于其它地方,对 printcap name= 参数作相应调整。如果使用的打印系统不是标准 BSD lpd,请参考 smb.conf 主页中的 printing= 选项来了解有关如何使 Samba 在您的打印系统中正确工作的信息。

现在设置打印机共享。以下是我在 smb.conf 中关于打印机的代码。我们将它用作样板:


[nec]
#my NEC SuperScript 870
path=/var/spool/smb
print command=/usr/bin/lpr %s
lprm command=/usr/bin/lprm -P%p %j
printer=lp
public=yes
printable=yes




首先理解 path 参数是很重要的。当 Samba 接受来自 Windows 的打印作业后,在 Samba 使用 lpr 提交作业之前,先要将它存储在磁盘上 path 指定的某个位置。由 path= 参数指定的目录应该具有 Unix 权限 1777,这样任何人都可以将文件写入该目录。通常不需要 print command= 和 lprm= 那两行。只有在希望为打印命令指定确切的路径,或者需要将任何命令行参数传递给 lpr 时才包括它们。使用以上宏作为示例。%s 扩展成临时文件名,%p 扩展成打印机名,%j 扩展成作业号。

您可能已经猜到了,printer= 选项是告诉 Samba 打印到哪个 Unix 打印机。要确保这个打印机是以原始方式设置的。public=yes 甚至可以让没有口令的用户与这个打印机连接。如果稍后希望加强安全性,则略去这个选项(需要使用 valid users= 那行来替换这行以真正加强安全性)。printable=yes 既告诉 Samba 这个共享应该配置成打印机,又让这个共享接收打印作业。

重新启动 Samba 后,应该能够从 Windows 看到新的打印机了。这时您应该能够在 Windows 方安装该打印机,并向这个新的共享资源发出测试页。(Windows 将告诉您是在为 NULL 的打印机安装驱动程序。别担心。只需从列表中选择正确的打印机驱动程序。)如果出于某种原因,打印不能工作,确保检查 /var/log/log.smb 找出所有错误消息。我还应该说明一下,还有许多与打印机相关的实用 smb.conf 配置选项。我只涉及最常用的那些。请务必仔细阅读 smb.conf 主页以熟悉所有选项。

结束语
在本文中,我们介绍了 Samba 功能的关键要素,包括共享主目录和打印。我还尝试重点介绍了一些与安全性有关的参数。但不要以为这些就是 Samba 的全部。Samba 不只非常强大,而且还是可配置的。它旨在让您的管理员确定,如何在您的组织中使用以及在哪些范围内使用。在 Samba 设置中涉及到许多手工 smb.conf 配置时,效果非常值得,因为您能让每一样都如您希望的那样确切使用。

有一些额外的 Samba 功能我们还没来得及接触到,这其中包括使 Samba 成为整个 Windows NT 域的部分(甚至控制它)的能力。鼓励您充分发掘这个极其强大的工具的潜力。

参考资料


从主要 Samba 网站下载 Samba
frgpasswrd 是为设置 Samba 并相伴隐蔽口令的口令同步化实用程序
GnoSamba 是配置 Samba 的 GUI 工具
KNetmon 是用于 Samba 和 smbsf 包的前端
SambaLink/Q 是用于 smb.conf 文件的与版本无关的编辑器
SMB Mode for Emacs 可以帮助您编辑 Samba 的配置文件 smb.conf
请参阅 linuxdoc.org 上的打印 FAQ
请阅读 Ed Weinberg 所著的 Samba
IBM Learning Services 提供了关于 Samba 的为期 2 天的上机实践课程。
Using Samba (O\'Reilly Publishing; 1999) 是关于 Samba 管理的综合指南,包括一些最近添加的内容,例如与 Windows NT 域进行集成,还有 SWAT 图形配置工具
访问 SWAT 主页
Samba Notes for Redhat 提供了最新的,但不完全是最终的,版本的说明,涵盖 Red Hat 6 上的 Samba 2 和版本相对比较旧的 Red Hat 5.x 上的 Samba 1。
查看 Samba/iX,这是程序套件,可以使运行 MPE/iX 操作系统的 HP e3000 能够通过使用微软的 Message Block (SMB) 来提供服务。
请参阅 Linuxcare 上的 Kernel Cousin Samba
xSMBrowser 是 Samba 支持 WINS 和广播网络的浏览实用程序
请阅读 Samba Unleashed,Steve Litt 著,其中包含 Daniel Robbins 的投稿
订阅 Amiga Samba 邮件列表
查看 Nerdgear 中的一系列 Samba clothes

关于作者
Daniel Robbins 居住在美国新墨西哥州的阿尔布开克。他是 Gentoo Technologies, Inc. 的总裁/CEO、 Gentoo Project 的主创人、由 MacMillan 出版的几本书(包括 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed)的投稿人。Daniel 自小学二年级起就与计算机结下不解之缘,那时他首先接触的是 Logo 程序语言,并沉溺于 Pac-Man 游戏中。这也许就是他至今仍担任 SONY Electronic Publishing/Psygnosis 的首席图形设计师的原因所在。Daniel 喜欢与妻子 Mary 和他们的女儿 Hadassah 一起共渡时光。可通过 drobbins@gentoo.org 与 Daniel Robbins 联系。
阅读(2229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~