使 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 访问它。它只能减少您可能提供给不怀好意用户的信