为您的环境编译、安装和配置 Samba
Daniel Robbins
总裁/CEO,Gentoo Technologies, Inc.
内容:
下载 Samba
编译和安装
配置服务器
安全性选项
测试共享
创建用户
最终配置
启动 Samba
配置客户机
进行测试
下一次
参考资料
关于作者
在他的上一篇文章中,Daniel 介绍了 Samba 的用途。现在该让它在系统上运行了。在本文中,他将指导您完成 Samba(版本 2.0.7)的编译、安装和最初的配置,使它可以在您的环境中使用。
下载 Samba
现在应该从 Samba.org 网站上下载 Samba 2.0.7 或更高版本(请参阅本文后面的参考资料)。选择最近的镜象站点后,单击 \"download\"(下载)链接。这时我们开始准备下载源代码了。您可以在页面中间紧接着 \"Download\" 标题后的那一段中找到正确的链接。我说明这一点是因为人们很容易错过这段,而导致不知道应该在哪个链接上单击。
安装说明:
要从头开始编译 Samba,可以选择从二进制软件包(例如和 Linux 发行版一起提供的 RPM)中安装 Samba。这当然可以。但如同我在上一篇文章中讲到过的,如果您这样做,文件位置与在这里所引用的会有略微不同。
下载了 Samba 2.0.7 或更高版本后,就可以把它解压缩到您选择的目录位置中了。从命令提示上输入:
% tar xzvf samba-2.0.7.tar.gz
将创建一个 samba-2.0.7 目录。cd 到它,然后查看它包含的内容。首先请注意 docs 目录。在这个目录中,可以看到另一个称为 textdocs 的目录。texdocs 包含整个 Samba 文档集。在 textdocs 目录中一个最重要的文件是 DIAGNOSIS.txt。如果您在使用相应的 Samba 操作时遇到了一些问题,它会指导您完成问题诊断的一步一步的过程。我们会介绍在该文件中提到的某些诊断过程,但不是全部。
编译和安装 Samba
还需要关注一下主 samba-2.0.7 目录中的 sources 目录。在 sources 中,可以找到一个设计完美的配置脚本,它是为正确建立所有 makefile 而设计的。和所有其它配置脚本一样,要获得配置选项的列表,输入:
$ ./configure --help
可以将输出定向到 \'more\',这样就能查看所有的选项:
$ ./configure --help | more
请注意目录和文件名选项。要注意每个文件的安装位置,缺省的安装路径是 /usr/local/samba。 可以在配置 Samba 时通过传递 \"--prefix=/usr/local\" 选项来将它更改为 /usr/local。 例如,我将使用以下路径设置:
$ ./configure --prefix=/usr/local --localstatedir=/var/log --sysconfdir=/etc
上述配置选项会导致除配置文件以外的 Samba 的缺省树都在 /usr/local 中。Samba 将在 /etc 中查找这些文件,而日志文件往往在 /var/log 中。如果省略这些配置选项, 可以在 /usr/local/samba(/usr/local/samba/var、/usr/local/samba/etc 等等)目录中找到所有文件。
现在可以开始进行编译了。运行完配置后,输入:
$ make
编译完成后,以 root 输入以下命令来安装软件:
# make install
配置服务器
配置通常是从 smb.conf 文件开始和结束的。这是 Samba 的主配置文件。它有许多不同的配置选项。为避免混淆,我们只介绍一些对于 Samba 正确操作必不可少的那些选项。首先,需要找出 smb.conf 的位置。如果使用我在上面指定的那些配置选项,应该将 smb.conf 放在 /etc 中。如果使用缺省路径,Samba 将在 /usr/local/samba/etc 中查找它。要开始使用,cd 到相应的目录,启动您常用的文本编辑器,然后输入以下几行。我会随时提供一些注释,帮助您理解每个选项都起什么作用。将以下几行添加到 smb.conf 文件中:
[global]
workgroup = YOURWORKGROUP
security = user
encrypt passwords = yes
guest account = guest
第一行告诉 Samba 我们将选项放在了 \"global\" 那一节。有许多选项只能在这一节中定义。 这些选项控制着 Samba 的整体行为。
第二行告诉 Samba 它将创建的 Windows 工作组的名称。用您工作组的相应名称来替代 YOURWORKGROUP。
在第三行上,我们告诉 Samba 以用户级别的安全性方式来运行。 这个选项将导致 Samba 通知所有连接的 Windows 客户机,它们需要提供有效的用户名/口令组合来获得对任何网络资源的访问。这绝对是个好办法。用户级安全性是 Samba 最常用的安全性级别,因为它是绝大多数文件共享情况下的最佳方案。但也可以使用其它的安全性级别。有一种方便的方式,它告诉 Samba 根据现有 Windows NT 或 2000 Server 的安全性数据库来认证所有用户。在这篇文章中将不介绍这种特定方式。如果希望了解有关它的更详细信息,请查看 smb.conf 主页的 \"security\"(安全性)选项。
现在该轮到第四行了。在这里,我们告诉 Samba 与 Samba 之间以加密方式交换口令。 通常您总是希望以加密方式运行 Samba,除非所有客户机都极其古老(例如 Windows for Workgroup 时代的机器)。支持加密口令的确会使 Samba 除了标准 Unix 口令数据库以外还需要自己的口令文件。如果您认为不使用加密口令比较好,从而可以避免维护两个口令文件,千万不要这么做!不使用加密口令将导致在 Windows 2000 以及不太旧版本的 Windows NT 4.0 中产生共享问题。如果确实希望避免维护两个单独数据库,Samba 提供了几种同步两个数据库的方法,这将是一种比较好的办法。
下一行指定了用于 guest 访问的有效 Unix 用户帐户。人们通常会使用 \"guest account=nobody\", 因此如果还没有这样的用户,建议您向系统添加一个字面上就是 \"guest\" 的用户。新的 \"guest\" 帐户不需要设置口令,并且不需要以交互方式登录。 (也可以选择使用口令和有效的缺省外壳来配置 guest。)
现在,我们可以向 smb.conf 添加 WINS 支持选项了。需要向 global 节添加以下两行之一:
wins support = yes
或者
wins server = WINS 服务器的 IP 地址
如果在当前子网中已有一个 WINS 服务器(例如,运行 WINS 的 Windows NT Server),则需要使用另一个选项,并在等号右边指定 WINS 服务器的名称。这样就禁用了 Samba 的内部 WINS 服务,并且将使用您指定的 WINS 服务器。
如果子网中没有 WINS 服务器在运行,或者您是在家中设置 Samba,不知道确切的 WINS 服务器,那么就需要使用第一个选项。它将通知 Samba 让它成为 LAN 的 WINS 服务器。
您一定想知道 WINS 是做什么用的。从根本上说,可以把 WINS 看做是本地的动态 DNS 数据库。当 Samba 作为 WINS 服务器运行的时侯,同一子网上每个与 Windows 兼容的机器都会向 Samba 注册它的 IP 地址和 NetBIOS 名称(又称“计算机名”)。这可以让 Windows 机器使用 Samba 的 WINS 数据库来请求特定 NetBIOS 名称的 IP 地址。WINS 是网络浏览的关键组件;您在 Windows 机器上“网络邻居”中四处查看时的行为就是一种网络浏览。
现在可以将更多选项添加到 global 节:
local master = yes
os level = 99
domain master = yes
preferred master = yes
现在开始一一说明。所有这些选项都与网络浏览有关。我已提到过 WINS 是网络浏览的关键组件,但要使浏览正确运行,还需要另一种元素。必须有一个本地主浏览器。听上去比较奇怪吧? 需要进一步解释。
为使浏览正常进行,必须有一些中央位置,用来保存本地子网上存在哪些机器和工作组信息的记录。这个特别的列表称为浏览列表。浏览列表用于构建您在第一次单击“网络邻居”时看到的工作组、域和机器的列表。 任何现代的 Windows 机器都可以成为本地主浏览器。理想情况下,我们希望 Samba 是网络上的本地主浏览器。
这是怎样实现的呢?基本上,在子网上会有几个强健的与 Windows 兼容的机器定期地在 LAN 上来回传递信息包,尝试确定谁将成为本地主浏览器,通过这种方法把情况搞明白。这一过程称为“浏览器选举”。
作个大度的人
请别使用 Samba 可以在所有“浏览器选举”中打败 Windows 的能力来作为取笑您所在组织 Microsoft 管理员的理由。记住,重要的是作个有道德的赢家。
最后,这种广播信息包大战中的“赢家”将成为本地主浏览器。我们可以通过使用选项 os level = 99 来使 Samba 赢得这场竞赛, 这个选项可以让它打败 LAN 上的其它所有机器。这是因为 Windows 的每个版本(从 Windows 95 到 NT 再到 2000)都有个硬编码的 OS 级别,导致最高版本的 Windows 成为本地主浏览器(Windows 版本越新,数字就越大)。 将 Samba 设置为 99 可以让它打败所有 Microsoft 的产品,使它每次都成为本地主浏览器。
安全性选项
在结束 global 这一节前,有一些您可能感兴趣的安全性选项。主机的 \'allow\' 选项可以让您限制与 Samba 连接的 IP 地址:
hosts allow = 192.168.1. 127.
除 localhost 127 以外,这个选项只允许 192.168.1 网络中的机器与 Samba 连接。要确保在 hosts allow 那一行的结尾有个 127。
接口选项在机器碰巧有多个网络接口时特别有用。它可以让您指定在哪个网络接口上可以使用 Samba。其使用方法如下:
interfaces = eth1
这是对一些必要的接口限制 Samba 的简单办法。限制接口可以防止来自有不良意图的用户可能的侵入尝试。
测试共享
我们已经配置好了 Samba 的 global 选项,现在该创建一个可以让我们访问 /tmp 目录的测试共享了。 添加以下行:
[tmp]
path=/tmp
writeable=yes
启动 Samba 后,这些设置将使一个名为 tmp 的共享可用。这个共享包含 Samba 服务器上 /tmp 目录的内容。另外,如果特定的用户和大多数用户在 /tmp 中有写权限一样,这个用户就可以在该目录中创建和修改文件。
现在我们已向 smb.conf 添加了所有这些项,到了验证我们的配置是否正确的时侯了。为进行验证,我们使用 testparm 实用程序:
$ testparm
在单击了 Enter 键后,在屏幕上列示一个包含所有配置选项的列表。这时还将注明 smb.conf 中的所有错误,并加以注释。如果有任何错误,按照屏幕上的指令来改正它们。现在我们可以开始配置 Samba 用户并启动 Samba 来进行测试运行。
创建用户
为使 \"myuser\" 用户(口令为 \"mypass\" )能够使用 Samba,必须有以下要素存在:
有效的 \"myuser\" Unix 帐户。myuser 不需要有进行登录的能力,Samba 不使用 myuser 的 Unix 口令,因此如果需要,可以设置一个虚值。如果 myuser 还使用交互方式登录到 Samba 服务器,那也没关系。
在 smbpasswd 文件中有效的 \"myuser\" 项。smbpasswd 文件是在名为 private 的目录中找到的,该目录带有缺省 Samba 安装前缀(在本例中是 /usr/local/private)。 可以通过作为 root 用户使用 smbpasswd 命令并输入以下内容来将 myuser 添加到 smbpasswd 文件中:
# smbpasswd -a myuser
New SMB password:
Retype new SMB password:
Added user myuser.
这些步骤必须对每个新的 Samba 用户重复执行。如果您是支持 Samba 的现有 Unix 帐户,记住要将用户名和口令添加到 smbpasswd 文件。如果添加的是仅 Windows 用户,要记住除了将用户添加到 smbpasswd 文件,还需要创建一个用户名相同的有效 Unix 帐户。实际上,首先需要创建 Unix 帐户,因为除非 Unix 帐户已存在,否则 smbpasswd 不会添加用户。
两个帐户都是需要的,因为 Samba 使用 Unix 来在磁盘上设置正确的权限,而 smbpasswd 文件则用于认证的目的。 如果您要从 Windows NT 进行连接,则需要创建 Samba \"administrator\" 用户。
最终服务器配置
我们现在几乎可以启动 Samba 以及配置客户机了。 但必须首先确保 Samba 机器可以通过名称 ping 到网络上的每台 Windows 客户机。 如果不行,需要将某些项添加到 /etc/hosts,或更新 DNS,以使 Samba 机器可以顺利找到 Windows 机器。
还有必要说明一点:Samba 在设置了 /etc/hosts 后能达到最佳工作状态,只有这样,\"localhost\" 名称才能映射为 127.0.0.1。机器的 FQDN 应该映射为在 LAN 上使用的主要 IP 地址。例如:
#/etc/hosts excerpt
127.0.0.1 localhost
192.168.1.1 mybox mybox.mydomain.com
启动 Samba
到这时为止,Samba 已经过配置,可以运行了。我们将启动 Samba,然后集中说明如何正确配置 Windows 机器。要启动 Samba,以 root 输入以下命令:
# smbd
# nmbd
这将启动 Samba 的两个主要服务器进程,smbd 和 nmbd。 它们将把所有信息性的和错误消息分别记录到 /var/log/log.smb 和 /var/log/log.nmb 中。现在 Unix 方已完成了设置并正在运行,该是着眼于如何正确配置客户机的时候了。
配置客户机
要配置 Windows 机器,使它可以参与到 Samba 工作组中,需要确保已正确配置了 TCP/IP 协议。还必须确保:
Windows 机器可以通过名称 ping 到 Unix 机器。 (在 C:\\> 提示上输入 \"ping myserver\"。)
将 Windows 机器配置为使用 WINS 服务器。 如果 Samba 提供的是 WINS 服务,这应该设置为 Samba 机器的 IP。如果不是,应该设置为有效 WINS 服务器的 IP。通常可以在 TCP/IP 设置对话框中找到这个设置。
Windows 机器是 YOURWORKGROUP 的一个成员。
进行测试
现在该是验证的时候了。在 Windows 机器完成重新引导后,需要使用 Samba 能接受的用户名/口令来登录到 Windows 上。如果使用的是 Windows 95/98,这个用户名/口令组合就将存储在一个文件中,在稍后尝试与任何网络资源连接时使用。
如果使用的是 Windows NT Workstation,这个用户名/口令组合还必须在 NT 的本地安全性数据库中(否则就无法在最初时登录到 NT 上)。 要实现这一目的,以 administrator 登录到 NT,然后使用“用户管理器”创建帐户。然后注销,再作为新用户登录。
正确登录之后,在“网络邻居”上双击,然后查看 YOURWORKGROUP 工作组。仔细看看。看是否列出了 Samba 服务器。双击它,然后看是否列出了 /tmp 共享。如果列出了,恭喜您!Samba 在起作用!如果没有,检查以下事项:
运行 testparm。smb.conf 能使用吗?如果不能,改正问题后重新启动 Samba。
smbd 和 nmbd 在运行吗?如果不在,检查日志文件了解可能发生的错误,改正所有问题,然后重新启动 smbd 和 nmbd。
将 Windows 客户机配置成使用合适的 WINS 服务器了吗?如果没有,在查找网络上机器的 IP 地址时就会有问题。
可以从 Windows ping 到 Unix 并且反向也行吗?如果不行,就需要配置 /etc/hosts 文件或 DNS 使名称解析能正确发挥作用。
如果检查了所有这些内容而 Samba 仍不能使用,则要仔细按照 docs/textdocs 目录中 DIAGNOSIS.txt 文件里的步骤进行操作。您应该可以在几分钟的时间内确定并改正配置或网络问题。 如果以任何方式更改了 smb.conf,则需要向 smbd 和 nmbd 发送一个 HUP 信号,强制它们重新读取 smb.conf。 这是通过以下命令做到的:
# kill -hup
# kill -hup
也可以简单地杀死 smbd 和 nmbd,然后再次重新启动它们。
下一次
在下一篇 Samba 文章中,我会让您熟悉 Samba 的更多高级选项。然后您就可以设置共享,使它按照您所需的方式工作。我们还会探讨 Samba 的一些高级特性,例如 Samba 打印。到时再见!
参考资料
从主 Samba 网站下载 Samba
订阅 Amiga Samba 邮件列表
请参阅 Samba Notes for Redhat,它提供了最新的,但不完全是最终版本的说明,是有关 Red Hat 6 上的 Samba 和版本相对比较旧的 Red Hat 5.x 上的 Samba 1。
查看 Samba/iX,这是一套程序,可以使运行 MPE/iX 操作系统的 HP e3000 能够通过使用微软的 Message Block (SMB) 来提供服务。
IBM Learning Services 提供了关于 Samba 的为期 2 天的上机实践课程。
请阅读 Samba Unleashed,Steve Litt 著,其中包含 Daniel Robbins 的投稿
Using Samba (O\'Reilly Publishing; 1999) 是关于 Samba 管理的综合指南,包括一些最近添加的内容,例如与 Windows NT 域进