9.2. 挂载 SMB 共享
在 Red Hat Enterprise Linux 上,内核的
cifs.ko
文件系统模块提供对 SMB 协议的支持。但是,要挂载并使用 SMB 共享,还必须安装 cifs-utils 软件包:
#
yum install cifs-utils
cifs-utils 软件包提供以下工具:
- 挂载 SMB 和 CIFS 共享
- 在内核的密钥环中管理 NT Lan Manager (NTLM)凭据
- 在 SMB 和 CIFS 共享上的安全描述符中设置和显示访问控制列表(ACL)
9.2.1. 支持的 SMB 协议版本
cifs.ko
内核模块支持以下 SMB 协议版本:
- SMB 1
- SMB 2.0
- SMB 2.1
- SMB 3.0
注意
根据协议版本,并非所有 SMB 功能都已实施。
9.2.1.1. UNIX 扩展支持
Samba 在 SMB 协议中使用
CAP_UNIX
功能位来提供 UNIX 扩展功能。cifs.ko
内核模块也支持这些扩展。但是,Samba 和内核模块仅支持 SMB 1 协议中的 UNIX 扩展。
要使用 UNIX 扩展:
- 将
/etc/samba/smb.conf
文件中的[global]
部分中的server min protocol
选项设置为NT1
。这是 Samba 服务器中的默认设置。 - 通过向 mount 命令提供
-o vers=1.0
选项,使用 SMB 1 协议 挂载共享。例如:mount -t cifs -o vers=1.0,username=user_name //server_name/share_name /mnt/
默认情况下,内核模块使用 SMB 2 或服务器支持的最高协议版本。将-o vers=1.0
选项传给 mount 命令会强制内核模块使用 SMB 1 协议,该协议在使用 UNIX 扩展时是必需的。
要验证是否启用了 UNIX 扩展,请显示挂载共享的选项:
#
mount
...
//server/share on /mnt type cifs (...,unix,...)
如果在挂载选项列表中显示了
unix
条目,则启用了 UNIX 扩展。
9.2.2. 手动挂载 SMB 共享
要手动挂载 SMB 共享,在
-t cifs
参数中使用 mount
工具:
# mount -t cifs -o username=user_name //server_name/share_name /mnt/ Password for user_name@//server_name/share_name: ********
例 9.1. 使用加密的 SMB 3.0 连接挂载共享
要将
\\服务器\示例\
共享作为 DOMAIN\Administrator
用户通过加密的 SMB 3.0 连接挂载到 /mnt/
目录:
# mount -t cifs -o username=DOMAIN\Administrator,seal,vers=3.0 //server/example /mnt/ Password for user_name@//server_name/share_name: ********
9.2.3. 在系统引导时自动挂载 SMB 共享
要在系统引导时自动挂载 SMB 共享,请将共享条目添加到
/etc/fstab
文件中。例如:
//server_name/share_name /mnt cifs credentials=/root/smb.cred 0 0
重要
要让系统自动挂载共享,您必须将用户名、密码和域名存储在凭据文件中。详情请查看 第 9.2.4 节 “使用凭据文件对 SMB 共享进行身份验证”。
在
/etc/fstab
文件的第四个字段中,指定挂载选项,如凭据文件的路径。详情请查看 第 9.2.6 节 “常用挂载选项” man page 中的 mount.cifs(8) 和 OPTIONS 部分。
要验证共享挂载是否成功,请输入:
#
mount /mnt/
9.2.4. 使用凭据文件对 SMB 共享进行身份验证
在某些情况下,管理员希望在不输入用户名和密码的情况下挂载共享。要实施此操作,请创建一个凭据文件。例如:
过程 9.1. 创建凭证文件
- 创建一个文件,如
~/smb.cred
,并指定该文件的用户名、密码和域名:username=user_name password=password domain=domain_name
- 将权限设置为只允许所有者可以访问该文件:
#
chown user_name ~/smb.cred#
chmod 600 ~/smb.cred
现在,您可以将
credentials=file_name
挂载选项传给 mount
工具,或者在 /etc/fstab
文件中使用它来挂载共享,而无需提示输入用户名和密码。
9.2.5. 执行多用户 SMB 挂载
您为挂载共享提供的凭据默认确定对挂载点的访问权限。例如,如果您在挂载共享时使用
DOMAIN\example
用户,则共享上的所有操作都将以该用户的身份执行,无论哪个本地用户执行该操作。
然而,在某些情况下,管理员希望在系统启动时自动挂载共享,但用户应使用自己的凭据对共享的内容执行操作。
multiuser
挂载选项允许您配置此场景。
重要
要使用
multiuser
,还必须将 sec=security_type
挂载选项设置为支持以非交互方式提供凭据的安全类型,如 krb5
或带有凭据文件的 ntlmssp
选项。请参阅 “以用户身份访问共享”一节。
root
用户使用 multiuser
选项以及对共享内容具有最少访问权限的帐户挂载共享。然后,常规用户可以使用 cifscreds
实用程序将其用户名和密码提供给当前会话的内核密钥环。如果用户访问挂载的共享的内容,则内核将使用内核密钥环中的凭据,而不是最初用来挂载共享的凭据。
使用 multiuser
选项挂载共享
在系统引导时,使用
multiuser
选项自动挂载共享:
过程 9.2. 使用 multiuser
选项创建 /etc/fstab
文件条目
- 在
/etc/fstab
文件中为共享创建条目。例如://server_name/share_name /mnt cifs multiuser,sec=ntlmssp,credentials=/root/smb.cred 0 0
- 挂载共享:
#
mount /mnt/
如果您不想在系统引导时自动挂载共享,请通过将
-o multiuser,sec=security_type
传递给 mount 命令手动挂载它。有关手动挂载 SMB 共享的详情,请参考 第 9.2.2 节 “手动挂载 SMB 共享”。
验证 SMB 共享是否使用 multiuser
选项挂载
使用
multiuser
选项验证共享是否挂载:
#
mount
...
//server_name/share_name on /mnt type cifs (sec=ntlmssp,multiuser,...)
以用户身份访问共享
如果使用
multiuser
选项挂载 SMB 共享,用户可以向内核的密钥环提供其服务器凭证:
#
cifscreds add -u SMB_user_name server_name
Password: ********
现在,当用户在包含挂载的 SMB 共享的目录中执行操作时,服务器会为此用户应用文件系统权限,而不是挂载共享时最初使用的权限。
注意
多个用户可以同时对挂载的共享使用自己的凭据来执行操作。
9.2.6. 常用挂载选项
当您挂载 SMB 共享时,挂载选项将决定:
- 如何与服务器建立连接。例如:连接到服务器时使用 SMB 协议版本。
- 如何将共享挂载到本地文件系统.例如,如果系统覆盖了远程文件和目录的权限,使多个本地用户能够访问服务器上的内容。
要在
/etc/fstab
文件的第四个字段或 挂载 命令的 -o
参数中设置多个选项,请使用逗号分隔它们。例如,请参阅 过程 9.2, “使用 multiuser
选项创建 /etc/fstab
文件条目”。
以下列表提供了常用挂载选项的概述:
选项 | 描述 |
---|---|
credentials=file_name | 设置凭证文件的路径。请参阅 第 9.2.4 节 “使用凭据文件对 SMB 共享进行身份验证”。 |
dir_mode=mode | 如果服务器不支持 CIFS UNIX 扩展,则设置目录模式。 |
file_mode=mode | 如果服务器不支持 CIFS UNIX 扩展,则设置文件模式。 |
password=password | 设置在 SMB 服务器中验证的密码。另外,也可使用 credentials 选项指定凭据文件。 |
seal | 使用 SMB 3.0 或更高的协议版本启用对连接的加密支持。因此,使用 seal 和 vers 挂载选项来设置成 3.0 或更高版本。请参阅 例 9.1 “使用加密的 SMB 3.0 连接挂载共享”。 |
sec=security_mode |
设置安全模式,如 ntlmsspi,来启用 NTLMv2 密码哈希和已启用的数据包签名。有关支持的值列表,请查看 mount.cifs(8) man page 中的选项描述。
如果服务器不支持 ntlmv2 安全模式,则使用
sec=ntlmssp ,这是默认值。出于安全考虑,请不要使用不安全的 ntlm 安全模式。
|
username=user_name | 设置在 SMB 服务器中验证的用户名。另外,也可使用 credentials 选项指定凭据文件。 |
vers=SMB_protocol_version | 设定用于与服务器通信的 SMB 协议版本。 |
有关完整列表,请查看 mount.cifs(8) man page 中的 OPTIONS 部分。