学习 Linux, 302 (混合环境): CIFS 集成

使用 Linux 作为 SMB/CIFS 服务器的客户端

除了用作 Windows 网络上的服务器之外,Linux 计算机还可以用作客户端。您可以使用类似于 ftp 的程序来传输文件和修改服务器,您还可以通过 Samba 或 Windows Server 计算机将共享内容装载到您的 Linux 计算机上,使普通程序能够直接访问服务器上的文件。在这样做时,请牢记原始 SMB 协议及其新的 CIFS 变体的特点,尤其在访问 Windows Server 计算机时:您可能无法访问 Linux 计算机支持的所有文件系统特性。

Tracy Bost, 顾问及培训师, 自由职业

作者照片 - Tracy BostTracy Bost 是一名经验丰富的软件开发人员和系统工程师。他的专长是企业应用程序集成。他过去曾担任过抵押行业标准维护组织 (Mortgage Industry Standards Maintenance Organization, MISMO) 业务规则工作组的联合主席和 RuleML2010 行业标准的委员会联合主席。他曾在多个行业任职,这些行业包括抵押贷款、房地产和非营利行业。



2012 年 2 月 13 日

关于本系列

本系列文章帮助您了解 Linux 系统管理任务相关知识。您可以使用本系列文章的资料准备 Linux Professional Institute Certification level 3 (LPIC-3) 考试

参见我们的 学习 Linux, 302(混合环境):LPI-302 路线图,查看本系列中各篇文章的介绍和链接。路线图仍在更新中,目前反映的最新内容是 LPIC-3 考试的最新目标(2011 年 3 月) 。在我们完成每篇文章后,都会将其添加到路线图中。

在本文中,将学习以下概念:

  • Server Message Block (SMB) 和 Common Internet File System (CIFS) 协议
  • 使用 CIFS 的特性和优势
  • 将 CIFS 共享装载到 Linux 客户端上

本文帮助您准备 Linux Professional Institute's (LPI) Mixed Environment 特性考试 (302) 的主题 312 下的目标 314.1。该目标的权值为 3。

先决条件

本文假设您拥有 Linux 命令行函数的工作知识,理解 Samba 配置的基础知识。您应该熟悉 smb.conf 配置文件的总体结构,还应该理解 Linux 装载本地和远程文件系统的基本操作(使用 mount 命令和 /etc/fstab 文件)。熟悉标准 Linux 文本模式 ftp 命令会对您有帮助,但这不是必须掌握这些知识。


了解 SMB/CIFS

关于可选的 LPI-302 考试

与其他许多认证一样,Linux Professional Institute Certification (LPIC) 提供多个不同级别,每个级别都比前一个级别要求更多知识和经验。LPI-302 考试是 LPIC 层级的第三级中的一门选修可选专业考试,要求具有高级 Linux 系统管理知识。

要通过 LPIC-3 认证,您必须通过前两个一级考试(101 和 102),两个二级考试(201 和 202),以及 LPIC-3 核心考试 (301)。到达这个级别后,才能参加一些选修专业考试,比如 LPI-302

在说明如何使用 Linux 作为 SMB/CIFS 服务器的客户端之前,可以先回顾协议的特点,看看它们与 Linux 文件系统要求相比较有何不同,这些有助于您的理解。这种比较分为两部分:检查原始 SMB 协议,调查新的 CIFS 扩展更改 SMB 基础的方式。您可能需要查看关于 LPI 目标 310.1 的一些 developerWorks 文章,这些文章介绍了 SMB/CIFS 背后的一些基本概念(请参阅 参考资料中的链接)。

基本 SMB 特性

从网络的角度来看,SMB 提供了几项独特的特性,包括它自己的计算机命名系统(Network Basic Input/Output System [NetBIOS] 名称)、工作组以及用户身份验证协议。为了理解 SMB 和 CIFS 如何用作 Linux 文件共享客户端的协议,最重要的特性是该协议所提供的元数据集。

元数据 是与文件关联的数据,但并不是文件的一部分。元数据包括文件的时间戳、所有者、权限,甚至文件的名称。毫无疑问,您可能熟悉 Linux 计算机上的文件元数据的某些常用特性,可能还熟悉 Linux 和其他操作系统(如 Windows)之间的某些差异。由于 SMB 是专门针对 DOS、Windows 和 IBM Operating System/2® (OS/2) 进行设计的,它共享了这些操作系统的多个元数据特性。最重要的是,SMB 缺少对 UNIX® 和 Linux 元数据的支持,比如,所有权、组和大多数权限。SMB 也缺少对符号链接和硬链以及其他特殊文件类型(比如设备节点)的支持。SMB 提供一些 Linux 通常无法理解的一些元数数据类型,例如隐藏、存档系统 位。您可以将 Read-only (只读)位映射到 Linux 的 Write permission(写权限)位。

构建自己的提要

您可以构建自定义的 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。访问 developerWorks RSS 提要。选择 Linux 作为专区,Articles 作为类型,输入 Linux Professional Institute 作为关键字。然后选择您想要的提要类型。

SMB 的另一个局限是,它的文件大小被限制为 2GiB。在如今备份文件、多媒体文件等文件大小均达到数 GB 的世界中,这种限制明显存在问题。

为了解决 SMB 与 Linux 的文件系统预期之间的这些差异,Linux 的 SMB 客户端要么只能忽略它们,要么只能提供 “伪造” 数据的选项。这些选项类似于在 Linux 上装载 NT 文件系统 (NTFS) 或文件分配表 (FAT) 文件系统时所使用的选项。幸运的是,CIFS 提供了更多更好的选项来处理这些限制。

您还应该知道 SMB 所用的网络端口,以及用户数据报协议 (UDP) 端口 137 与 138(用于名称解析和数据报服务)和 TCP 端口 139(用于会话服务,即大多数文件传输)。如果您需要使用低层网络诊断工具调试 SMB,则需要掌握这些信息。

SMB 的 CIFS 扩展

在 20 世纪 90 年代中期,Microsoft® 决定将 SMB 的名称改为 CIFS,同时为其添加了一组新特性。这些特性包括对符号、硬链接和更大文件的支持。除原来的端口 139 之外,CIFS 还支持在端口 445 上进行服务器访问。

在 CIFS 中,Microsoft 自己对 SMB 的扩展至少与其他厂商对 SMB 的扩展同等重要。特别是,被称为 UNIX 扩展 的 CIFS 特性集对文件的所有权、权限和一些 UNIX 风格的其他元数据都提供了支持。如果客户端和服务器都支持这些特性,与仅支持 SMB 的服务器相比,您在 Linux 上利用 CIFS 服务器的效果会好得多。如您所料,Windows Server® 操作系统不支持这些扩展,所以只有在您的 Linux 客户端连接到 Samba 服务器时才能使用它们。该服务器还必须配置以下全局选项:

unix extensions = Yes

在 Samba 3.0 版中,该选项默认设置为 No,但 Samba 3.0 将默认值改为 Yes,所以您并不需要明确设置该选项。


使用 smbclient

在某些方面,从 Linux 访问 SMB/CIFS 服务器的最简单方法是使用称为 smbclient 的文本模式实用工具。这个程序类似于经典的 ftp 客户端程序,所以,如果您熟悉 ftp,那么使用 smbclient 应该没有什么问题。如果不熟悉 ftp,该程序背后的原理是,向服务器发起一个连接,该连接 涉及以传统方式装载共享。您改为通过键入命令来查看、删除、下载或上传文件。

要使用 smbclient,您需要键入它的名称,后面跟服务名称,所采用的形式是 //服务器/服务,比如,//TANGO/GORDON 访问 TANGO 服务器上的 GORDON 共享。根据服务器的配置,您可能会看到要求输入密码的提示。如果输入正确,您就可以输入各种命令来访问服务器上的文件。表 1 总结了部分重要的 smbclient 命令;请参考该实用工具的主页,了解有关特殊命令的更多信息。

表 1:重要的 smbclient 命令
命令效果
?help显示命令摘要
cd更换成服务器上的某个新目录
del删除一个文件
dirls显示当前目录(或指定目录)中的文件
exitquit结束会话
get将一个文件从服务器传输到客户端
lcd更换本地计算机上的工作目录
mdmkdir在服务器上创建一个目录
mget将多个文件从服务器传输到客户端
more使用您的本地寻呼程序显示一个远程文件
mput将多个文件从客户端传输到服务器
put将一个文件从客户端传输到服务器
rdrmdir删除一个目录
rename重命名服务器上的一个文件
rm删除服务器上的一个或多个文件

默认情况下,smbclient 使用您的当前用户名来连接服务器;然而,您可以使用 -U 选项来更换您的用户名。实际上,还提供了其他命令行选项,包括无需进入 smbclient 的交互模式就能传输文件的选项。因此,您可以在脚本中使用 smbclient 来执行自动文件传输。请参考该程序的主页,了解有关该主题的详细信息。

在实际使用中,smbclient 会话可能类似于列表 1。

列表 1. smbclient 会话示例
$ smbclient //TANGO/GORDON/
Enter gordon's password: 
Domain=[RINGWORLD] OS=[Unix] Server=[Samba 3.4.12]
smb: \> cd mystuff
smb: \mystuff\> ls
  .                                   D        0  Mon May 16 19:20:08 2011
  ..                                  D        0  Mon May 16 19:18:12 2011
  xv-3.10a-1228.1.src.rpm                3441259  Tue May 18 19:09:26 2010
  License.txt                              27898  Mon May 16 19:17:15 2011
  xorg.conf                                 1210  Fri Jan 21 04:18:13 2011

		51198 blocks of size 2097152. 2666 blocks available
smb: \mystuff\> get xorg.conf
getting file \mystuff\xorg.conf of size 1210 as xorg.conf (9.4 KiloBytes/sec)
(average 9.4 KiloBytes/sec)
smb: \mystuff\> exit

提示:smbclient 是一个很好的调试工具。它很简单,使您能够通过装载共享以外的其他方式访问您的网络,如果您想针对某个问题进行调试,这是一个很有帮助的方式。


装载 SMB/CIFS 共享

虽然 smbclient 是一个有用的工具,但它无法为您提供您所习惯的类似于 Windows 客户端的服务器无缝访问。如果您需要进行这样的访问,则必须使用其他工具来装载 SMB/CIFS 共享。您可以使用标准的 Linux mount 命令来实现此操作,也可以编辑您的 /etc/fstab 文件,在计算机启动时自动装载 SMB/CIFS 共享。

临时装载共享

您可以使用与装载本地卷或网络文件系统 (NFS) 导出相同的 mount 命令来装载 SMB/CIFS 共享。您可以将文件系统类型指定为 cifs;在大多数情况下,mount 根据该命令的语法判断出要使用该驱动程序。或者,您可以直接调用辅助程序 mount.cifs。原则上,只有设备规范不同于装载本地文件系统,因此,要装载 TANGO 服务器的 GORDON 共享,则需要以 root 用户的身份键入以下内容:

# mount //TANGO/GORDON /mnt

但是,在实践中,这种用法存在一个问题:它将 root 作为用户名传递给服务器。如果服务器不允许 root 用户登录,那么装载尝试就会失败。您可以通过使用 -o user=name 选项将用户名传递给服务器,从而修正这个问题:

# mount -o user=gordon //TANGO/GORDON /mnt
Password:

还有其他几个通过 -o 选项传递给 mount 的可用装载选项。表 2 总结了最有用的选项。请访问 mount.cifs 主页,了解有关其他选项的信息。

表 2:重要的 mount.cifs 选项
选项效果
user=nameusername=name指定发送给服务器的用户名。
password=pass指定发送给服务器的密码。如果未指定密码,那么 mount.cifs 会使用 PASSWD 环境变量的值;如果未设置该变量值,程序会提示用户,要求其输入密码。
credentials=filename指定含有用户名、密码和工作组名称(可选)的文件。每个值都用单独的行显示,其开头分别为字符串 username=password=workgroup=
uid=UID设定拥有从共享装载的文件的用户的用户 ID (UID)。
gid=GID类似于 uid=UID 选项,但该选项影响组 ID (GID) 而不是 UID。
file_mode=mode以数字形式设置将从服务器分配给文件的文件模式(权限)。
dir_mode=mode类似于 file_mode=mode,但该选项影响目录而不是文件。
guest防止提示输入密码。此选项通常只在共享支持来宾访问时才有效。
hard如果服务器变得不可访问,试图访问服务器上的文件的进程将挂起,直到服务器恢复。
soft如果服务器变得不可访问,试图访问服务器上的文件的进程将接收错误消息。这是默认行为。

如果您连接到支持 CIFS UNIX 扩展的服务器,通常不必使用 uidgidfile_modedir_mode 选项。不过,在某些情况下,您可以使用这些特性来覆盖服务器所提供的值。还要注意,所有这些选项都会影响文件 在客户端上 的出现方式;在服务器上的权限和所有权不会受到这些选项的影响。

装载 SMB/CIFS 共享后,您可以访问它,就像访问本地卷或 NFS 卷一样。您可以使用 cp 复制文件,使用 rm 删除文件,直接使用文本编辑器或其他程序编辑文件,等等。不过,请记住,如果服务器不支持某个特性,那么您可能无法使用它。例如,除非该服务器支持 UNIX 扩展,否则您无法使用 chmod 命令来更改文件模式。(chmod 的部分例外是,您可以改变写入权限,这些权限已被反向映射到 SMB 的只读位。)

当您使用完共享后,您可以使用 umount 命令卸载它,就好像它是一个本地文件系统一样:

# umount /mnt

使用 SMB 装载共享

在内核 2.6.37 之前,Linux 内核都包括独立的 SMB 和 CIFS 驱动程序,您可以将文件系统类型指定为 smbfs,或使用 smbmount 程序,从而使用原始 SMB 协议装载共享。总体上讲,使用此特性的方式与使用 cifs 文件系统类型代码或 mount.cifs 程序的工作方式是相同的,但在某些细节上有所不同。使用 SMB 协议会导致无法使用仅支持 CIFS 的特性,比如 CIFS UNIX 扩展。

在过去,使用 SMB 有时是合理的,例如,它可以使用 Linux 的 smbfs 驱动程序而不是使用 cifs 来装载由非常旧的 Microsoft Windows 9x/Me 计算机导出的共享。现在,这种问题已经很少出现,因为流行的 cifs 实现已消除了大部分以前的限制。然而,如果您认为可能存在这样的问题,那么您可以尝试安装 2.6.37 之前的内核,看看 smbfs 驱动程序能否解决您的问题。

永久装载共享

如果您希望在一台计算机上永久装载 SMB/CIFS 共享,您可以通过在 /etc/fstab 中添加一个条目来实现这一点。该进程与 mount 命令到 /etc/fstab 条目的任何其他转换的工作方式非常相近。然而,在这里需要特别注意 表 2 中的一个选项 credentials。由于大多数 SMB/CIFS 服务器都使用密码进行身份验证,如果您预计到要使用 /etc/fstab 来装载共享,则必须永久保存密码。使用 password 选项可以将密码直接存储在 /etc/fstab 中,但不建议采用这种做法;因为该计算机的所有用户都必须能够读取 /etc/fstab 文件,所有人都应该可以读取以这种方式存储的密码。使用 credentials 使您可以将密码存储在一个只有 root 用户可以读取的文件中,从而提高密码的安全性。

SMB/CIFS 共享的有效密码条目可能具有以下类似形式:

//TANGO/BACKUPS  /saveit  cifs  credentials=/etc/samba/creds.txt  0 0

相关的凭据文件可能具有以下类似形式:

username=buuser
password=Iw2bUmS[t

注意:请务必赋予凭据文件适合的权限:一般是 0600 或 0400,以及 root 用户或者其凭据存储在该文件中的用户所拥有的所有权。

配置就绪后,当您重新启动计算机或键入 mount -a时,会自动装载 //TANGO/BACKUPS 共享。如果该特性不能正常工作,请验证用户名和密码是否正确,使用 mount 命令进行测试,并执行其他常规疑难解答程序。


下期简介

本系列下一篇文章是 “学习 Linux, 302 (混合环境):NetBIOS 和 WINS”,涉及使用 Windows Internet Name Service (WINS) 进行名称解析和浏览,这使计算机可以在计算机和共享的类似树的层次结构中定位网络共享。

参考资料

学习

讨论

  • 加入 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=793094
ArticleTitle=学习 Linux, 302 (混合环境): CIFS 集成
publish-date=02132012