了解 Linux,302(混合环境): 文件服务

了解如何在混合环境中创建和配置文件共享

通过为面向系统管理员的 Linux 专业协会认证考试 LPI-302 做准备,了解如何配置 Samba 和构造配置文件。同时,了解 Samba 如何与网络进行交互,如何配置日志,以及如何调试 Samba 问题。

Sean A. Walberg, 高级网络工程师

Photo of Sean WalbergSean Walberg 是一位网络工程师,也是两本网络书籍的作者。他曾在多个行业中任职,其中包括医疗和媒体。



2011 年 7 月 12 日

关于本系列

本系列文章将帮助您了解 Linux 系统管理任务。您还可以使用这些文章中提供的资料为 Linux 专业协会认证 3 级 (LPIC-3) 考试做准备。

请参阅 学习 Linux, 302(混合环境):LPI-302 路线图,其中包含本系列每篇文章的介绍和链接。这个路线图仍在不断更新,以反映 LPIC-3 考试的 最新目标(2010 年 11 月)。在编写完每一篇文章之后,都会将它添加到这个路线图中。

本文内容如下:

  • 创建和配置文件共享
  • 规划文件服务迁移
  • 隐藏管理共享,即 IPC$
  • 创建用户和组用来处理文件共享的脚本
  • 使用与文件共享有关的命令行工具

本文将帮助您完成 Linux 专业协会的混合环境专业考试(302)的 Topic 312 中的 Objective 312.2 考试的准备。这个目标所占比重为 4。

先决条件

为了更好地理解本系列文章的内容,您应该精通 Linux 知识,并熟悉一个可供您练习本文介绍的命令的 Linux 系统。此外,您还应该具有访问 Windows 环境的权限,用 Windows 环境来测试文件和打印访问数据。

创建文件共享

学习 Linux,302(混合环境):配置 Samba介绍了 Samba 能够识别 smb.conf 文件中各个部分的共享名,除了 homesprintersglobal。除了共享名之外,将共享名映射到磁盘上的某个位置也是一个重要信息。下面是一个最简单的有用共享:

[tmpdir]
path = /var/tmp

关于选修的 LPI-302 考试

Linux 专业协会认证 (LPIC) 与其他认证一样提供了不同级别的考试,每一级要求的知识和经验都要比前一级高一些。LPI-302 考试是 LPIC 3 级中的一门选修专业考试,要求考生精通 Linux 系统管理知识。

要通过 LPIC 3 级 (LPIC-3) 认证,则必须通过两个 1 级考试(101 和 102),两个 2 级考试(201 和 202),以及 LPIC-3 核心考试(301)。在到达这个级别之后,您就可以参加选修专业考试,如 LPI-302。

这段代码定义了一个共享 tmpdir,它将映射到 Samba 服务器的 /var/tmp 目录。例如,如果服务器名称为 phoenix,那么用户就能够通过通用命名规范 (UNC) 路径 \\phoenix\tmpdir 访问该文件共享。然而,这个简短的配置实际上用处不大:默认的共享设置是只读的,所以上面的共享是不可写的。

使用安全参数

Samba 有许多与安全性相关的参数,它们能够对用户与文件进行访问控制。这些参数大多都会影响 Samba 与底层 UNIX 文件权限的交互,但这些不在本文的讨论范围之内,本文将介绍一些常用的参数。

Server Message Block (SMB) 服务器,包括 Microsoft 本机实现,都包含一个名为 IPC$ 的共享,它是一种进程间通信共享,可以使用它通过网络执行软件功能。以美元符号($)结尾的共享都是隐藏共享,不会显示在 Microsoft 客户端,即使服务器会报告该共享的存在。

即使没有 smb.conf,Samba 也会创建一个 IPC$ 共享。如果创建了该共享,则可以控制对它的访问。下面是一个严格 IPC$ 共享的示例:

[IPC$]
  hosts allow = 192.168.1.0/255.255.255.0
  browsable = no

创建自己的 Feed

您可以创建一个自定义 RSS、Atom 或 HTML Feed,这样您能够收到我们新增文章或更新内容的通知。请访问 developerWork RSS Feed。专区选择 Linux,类型选择 Articles,输入关键字 Linux Professional Institute。然后,选择您喜欢的 Feed 类型。

这个代码片段定义了 IPC$ 共享,并将它设置为只允许在 192.168.1.0 网络内访问。这个示例还关闭了 Browsable 特性,这表示当客户端请求 IPC$ 共享时,Samba 不会显示它。

以前,常见做法是隐藏一些敏感共享,如 IPC$,这样做主要是希望能够逃过攻击者的视线。对于 IPC$ 共享而言,这事实上不是一种很聪明的做法。例如,向服务器请求获得一个共享清单时,必须连接到 IPC$ 共享。如果查看 Samba 调试信息和数据包跟踪信息,就会发现这个 Browsable 选项根本没用。我提到这一点是因为考试大纲也提到了这一点。保护 IPC$ 共享的更好方法是限制能够连接的主机,而不是试图隐藏 IPC$ 共享。

用户可以在不指定用户的情况下登录一个共享,此时该用户是一名 访客。默认情况下,不允许访客访问共享,但是您可以通过 guest ok = yes 在共享中启用访客帐号。默认的访客用户是 nobody,但是您可以通过全局的 guest account 参数修改这个用户。

UNIX 系统中大量使用符号链接来链接文件系统的两个区域。例如,在 home 目录中,您可以创建一个指向系统级临时目录的符号链接并使用它,就像它是 home 的目录的一部分一样。Samba 也支持使用这些符号链接,让用户访问文件共享以外的区域。如果您不希望出现这种情况,那么您可以在共享配置中添加 follow symlinks = no

如果您希望限制可以访问共享的用户,那么可以使用 valid users 参数。例如,valid users = sean, jon, isaac 表示只允许参数所指定的三种用户访问这个共享。除了文件级权限之外,您还可以使用该参数为敏感共享提供额外的安全保护。

Home 共享

人们经常使用 home 目录保存个人文件。UNIX 密码文件中的每一个用户都会分配一个 home 目录。您可以直接通过 Samba 导出任意数量的 home 目录,无需使用 [homes] 代码段来键入单独的配置代码段。当有人请求一个名为 joe 的共享时,Samba 会查找一个名为 joe 的已配置好的共享;如果 Samba 找不到该共享,那么它会查找同名的用户。如果找到了这个用户,那么 Samba 就会使用 [homes] 代码段中的配置作为此共享的模板。

清单 1 显示了一个典型的 [homes] 代码段。

清单 1. 用户 home 共享的模板
[homes]
 comment = Home Directories
 writable = yes
 browsable = yes
 valid users = %S

清单 1 中的配置可以执行以下任务:

  • 开始配置 homes 代码段
  • 添加一个备注,该备注会显示在服务器可用文件共享的详细信息中
  • 将这个共享标记为可写,这样用户就能够修改他们的 home 目录
  • 指出用户浏览共享列表时能够看见这个共享;用户可以同时看到 homes 以及与用户名同名的共享
  • 限制只有该共享的拥有者才能够访问这个共享

注意清单 1 中 %S 宏的用法:可以将这个宏扩展到共享名称。因为用户名是与共享名相同,所以 valid users 限制了只有该共享的拥有者才能够使用这个共享。

现在,只要用户查找共享列表,就会看到他们的 home 目录,并且能够连接到该共享。然后此共享会映射到用户的 UNIX home 目录上。

关于 homes 共享中的一个有意思的方面是:如果您直接访问 \\server\homes 目录,则会直接进入自已的共享,效果与访问 \\server\username 一样。这是 Samba 团队提供的一项额外功能,旨在为共享主机上的用户提供帮助和减少混淆。

添加用户和组的脚本

如果查看用户列表的 Microsoft 域,就会发现连接您服务器的用户可能没有本地 UNIX 帐号。解决这个问题的一个方法是,在用户连接服务器时,让 Samba 使用 add user script 参数为您创建该用户。可以将 %u 宏扩展到这个用户。您可以使用诸如 useradd 这样的系统工具或编写自己的脚本。

在使用 Microsoft 工具管理 Samba 时,还可以使用为组 (group) 而存在的类似参数 —add group script。如果您使用的工具是 add user to group 和 类似的 delete 脚本,那么这些参数也很有用的。smb.conf 的手册页中包含的可脚本化任务的完整列表。

让守护程序根据需要创建用户并不总是最好的方法。使用 winbind 或者基于 Lightweight Directory Access Protocol (LDAP) 的认证机制效果可能更好一些,这样 Samba 和 Linux 就能够共享一个通用的用户数据库。

处理混合情况

文件或目录名的字母大小写与 Microsoft 域中不太一样。例如,FILE、fileFiLe 均指向同一个文件。然而,在 Linux 中,大小写很重要,因此这三个文件是完全不同的。Samba 需要知道如何实现这两种平台之间的映射,以解决它们之间的冲突。这种大小写映射进程是称为 名称改编 的更大进程的一部分。

有一些参数会影响名称大小写的改编。其中最重要的参数是 case sensitive,它可以设置为 yesnoauto。如果启用了 case sensitive,那么 Samba 就会使用客户端要求的大小写。如果禁用该设置,那么 Samba 会以大小写无关的方式查找这个目录。

与区分大小写有关的一个问题是:如果设置不正确,您可能无法访问一些文件。假设一个目录有两个文件,一个是 test,另一个是 TEST。如果 Samba 以大小写无关的方式访问它们,则无法区分这两个文件。

该设置的默认值是 auto,它会寻找一个客户端扩展字段来指示客户端是否支持区分大小写的访问。Windows 客户端不支持这项功能,所以它们是大小写无关的。

default casepreserve case 这两个参数可以一起使用。如果将 preserve case 设置为 yes,则会使用客户端的设置。如果 preserve case 设置为 no,则会使用 default case 的值来确定新创建文件的大小写。

启用 Usershare

用户可以使用 Usershare 特性创建自己的共享,不必修改 smb.conf。在管理员启用 Usershare 特性之后,一般用户即可使用命令行工具导出他们选择的目录。用户还可以在完成操作之后删除它们的共享。

使用 Usershare 的第一步是在全局范围内启用这个特性。清单 2 显示了启用 Usershare 的 smb.conf 代码的一部分。

清单 2. 启用 Usershare
[global]
  usershare path = /var/lib/samba/usershares
  usershare max shares = 5
  usershare prefix allow list = /home
  usershare prefix deny list = /var, /usr

清单 2 显示的是 [global] 代码段中的代码。首先,usershare path 定义了一个目录,Samba 使用这个目录来保存与用户共享相关的配置。这个目录有一些限制条件,我们将在后面的内容中进行说明。接下来介绍的是用户共享数量限制。最后两个参数展示了如何限制可以共享的目录。usershare prefix allow list 将所有共享都限制在给定目录中,在这里,这些共享都必须位于 /home 目录下。usershare prefix deny list 参数则相反,只允许共享给定目录以外的目录。

Samba 对用户共享使用了其他两个方面的限制。首先,创建共享的用户必须能够对 usershare path 指定的目录进行写入操作,这个目录必须具有粘贴位 (sticky bit) 设置(1000+t)。其次,用户必须拥有共享的目录,除非 usershare owner only 设置为 false

与文件权限有关的第一个限制意味着创建 usershare path 时必须小心。如果您希望将用户共享限制为只允许 usershares 组的用户共享,则需要添加以下一系列的命令:

# mkdir -p /var/lib/samba/usershares
# chown root:usershares /var/lib/samba/usershares
# chmod 1770 /var/lib/samba/usershares

第一个命令创建了目录以及所有必要的父目录。第二个命令将目录的用户和组的所属权分别设置为 root 和 usershares。最后一个命令将目录的所有者和组权限设置为 Read/Write/Execute,即拒绝其他所有人访问,并设置了粘贴位。因此,只有 root 和 usershares 组的成员能够使用这个目录;通过粘贴位设置,只有文件的拥有者才能够删除该文件。

创建共享可能是这个练习中最难的一部分。用户可以执行以下命令:

net usershare add docs /home/me/Documents/ "My docs" Everyone:F

上面这个命令会将 /home/me/Documents 导出为一个称为 docs 的共享,并拥有完全控制所有人的控制权。其他允许使用的命令包括:

  • net usershare list 列出用户已经创建的用户共享。
  • net usershare info docs 显示 docs 共享的配置。
  • net usershare delete docs 删除 docs 共享。

命令行工具

Samba 提供了一些命令行工具。通过 Samba 提供的 libsmbclient,其他人可以开发一些常用的 SMB/Common Internet File System (CIFS) 工具。

UNIX 和 Windows 之间的一个显著区别是 UNIX 有一个大型文件系统,而 Windows 有一系列的驱动器名。smbclient 实用程序允许您通过一个类似 File Transfer Protocol (FTP) 的界面来浏览远程的 Windows 共享,但是远程 Windows 共享对应用程序是透明的,所以它像其他文件系统一样应该是可挂载的。

Samba 提供了一个名为 smbmount 的工具,有时会将它重新打包为 mount.cifs。您可以直接调用这个命令,或者通过 mount 命令调用它。清单 3 显示的是将远程 CIFS 共享挂载到常规文件系统的 Linux 系统。

清单 3. 挂载远程 CIFS 共享
# mount -t cifs '\\192.168.1.134\docs' /mnt -o user=myuser
Password:
# mount
...
\\\\192.168.1.134\\docs on /mnt type cifs (rw)

第一个命令将一个 CIFS 文件系统挂载到指定的 UNC 路径,然后将它放到 /mnt 下。与 UNC 路径不同的是,它看起来好像是一个标准的 mount 调用。选项是通过 -o 传递的。这里所需的唯一选项是用户名。mount.cifs 手册页中概括了其他所有选项,其中可能包含一个密码和一个域。如果您没指定一个密码,系统会提示您输入一个密码。最后,mount 命令会显示已挂载的文件系统。

另一个命令是 smbshsmbsh 没有通过标准的 UNIX 方法挂载文件系统,而是拦截文件请求的库调用,然后在必要时将请求重定向到某个 CIFS 共享。但是,大多数系统都不再提供这个命令,因为用它不像挂载文件系统那样稳定。

迁移文件共享

当您将一个文件服务从一台服务器移到另一台服务器时,用户可能会忘记访问新的服务器。Samba 允许您让服务器响应另一个名称。例如,如果您将文件共享从服务器 phoenix 移动到服务器 fs2 时,您可以让 fs2 来响应 phoenix 的请求。当然,您必须保证 phoenix 不会响应请求,或者关闭或重命名它。

要为服务器添加别名,可以使用全局参数 netbios aliases。如果您希望将 Samba 服务器的名称修改为不同于服务器的 UNIX 名称的其他名称,则可以使用参数 netbios name

在准备迁移时,您目前为止所了解的有关挂载文件系统的命令还有助于将文件从一台服务器复制到另一个服务器。您可能还希望使用一些 UNIX 工具(如 rsync)来帮助您解决问题。


后续内容

这是关于文件共享主题的系列文章中的最后一篇文章。下一个考试目标是 312.3,将教您如何创建和配置打印共享,并了解如何从其他系统访问这些共享。

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=732164
ArticleTitle=了解 Linux,302(混合环境): 文件服务
publish-date=07122011