配置和使用网络文件服务
在 Red Hat Enterprise Linux 9 中配置和使用网络文件服务的指南。
摘要
对红帽文档提供反馈
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 JIRA 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 点顶部导航栏中的 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 使用 Samba 作为服务器
Samba 在Red Hat Enterprise Linux中实现了服务器消息块(SMB)协议。SMB 协议用于访问服务器上的资源,如文件共享和共享打印机。此外,Samba 实现了Microsoft Windows 使用的分布式计算环境远程过程调用(DCE RPC)协议。
您可以以以下方式运行 Samba:
- Active Directory(AD)或 NT4 域成员
- 独立服务器
NT4 主域控制器(PDC)或备份域控制器(BDC)
注意红帽支持仅在支持 NT4 域的 Windows 版本的现有安装中支持 PDC 和 BDC 模式。红帽建议不要设置新的 Samba NT4 域,因为 Windows 7 和 Windows Server 2008 R2之后的Microsoft操作系不支持 NT4 域。
红帽不支持将 Samba 作为 AD 域控制器(DC)来运行。
有别于安装模式,您可以选择共享目录和打印机。这可让 Samba 充当文件和打印服务器。
1.1. 了解不同的 Samba 服务和模式
samba
软件包提供多个服务。根据您的环境和您要配置的场景,您需要一个或多个这些服务,并在不同的模式下配置 Samba。
1.1.1. Samba 服务
Samba 提供以下服务:
smbd
此服务使用 SMB 协议提供文件共享和打印服务。另外,该服务负责资源锁定和验证连接用户。对于身份验证域成员,
smbd
需要winbindd
。smb
systemd
服务启动并停止smbd
守护进程。要使用
smbd
服务,请安装samba
软件包。nmbd
此服务通过 IPv4 协议使用 NetBIOS 提供主机名和 IP 解析。除了名字解析之外,
nmbd
服务还支持浏览 SMB 网络来查找域、工作组、主机、文件共享和打印机。为此,服务可将此信息直接报告给广播客户端,或者将其转发到本地或主浏览器。nmb
systemd
服务启动并停止nmbd
守护进程。请注意,现代 SMB 网络使用 DNS 来解析客户端和 IP 地址。对于 Kerberos,需要一个正常工作的 DNS 设置。
要使用
nmbd
服务,请安装samba
软件包。winbindd
该服务为名字服务交换机(NSS)提供了一个接口,以便使用本地系统上的 AD 或 NT4 域用户和组。例如,这使域用户能够对在 Samba 服务器上托管的服务或其他本地服务进行身份验证。
winbind
systemd
服务启动并停止winbindd
守护进程。如果将 Samba 设置为域成员,则必须在
smbd
服务运行之前启动winbindd
。否则,本地系统将无法使用域用户和组。要使用
winbindd
服务,请安装samba-winbind
软件包。重要红帽仅支持将 Samba 作为带有
winbindd
服务的服务器运行,以便为本地系统提供域用户和组。由于某些限制,如缺少 Windows 访问控制列表(ACL)支持和 NT LAN Manager(NTLM)回退,目前不支持 SSSD。
1.1.2. Samba 安全服务
/etc/samba/smb.conf
文件中的[global]
部分中的security
参数管理 Samba 如何验证连接到该服务的用户的身份。根据您在其中安装 Samba 的模式,参数必须设为不同的值:
- 对于 AD 域成员,设置
security = ads
在这个模式中,Samba 使用 Kerberos 来验证 AD 用户。
有关将 Samba 设置为域成员的详情,请参考 将 Samba 设置为 AD 域成员服务器。
- 对于单独服务器,设置
security = user
在这个模式中,Samba 使用本地数据库验证连接用户。
有关将 Samba 设置为独立服务器的详情,请参考 将 Samba 设置为独立服务器。
- 对于NT4 PDC 或 BDC ,设置
security = user
- 在此模式中,Samba 将用户身份验证到本地或 LDAP 数据库。
- 对于 NT4 域成员,设置
security = domain
在此模式中,Samba 将连接的用户验证到 NT4 PDC 或 BDC。您不能在 AD 域成员中使用这个模式。
有关将 Samba 设置为域成员的详情,请参考 将 Samba 设置为 AD 域成员服务器。
其它资源
-
smb.conf(5)
手册页中的security
参数
1.1.3. Samba 服务和 Samba 客户端工具加载并重新载入其配置的情况
下面描述了 Samba 服务和工具加载并重新载入其配置:
Samba 服务在以下情况下重新载入其配置:
- 每 3 分钟自动进行
-
在手动请求时,例如运行
smbcontrol all reload-config
命令。
- Samba 客户端实用程序仅在启动时读取其配置。
请注意,某些参数(如security
)需要重启smb
服务才能生效,而重新载入不足以生效。
其它资源
-
smb.conf(5)
手册页中的如何应用配置更改
部分 -
smbd(8)
、nmbd(8)
和winbindd(8)
手册页
1.1.4. 以安全的方式编辑 Samba 配置
Samba 服务每 3 分钟自动重新载入其配置。要防止服务在使用 testparm
工具验证配置前重新载入更改,您可以以安全的方式编辑 Samba 配置。
先决条件
- 已安装 Samba。
流程
创建
/etc/samba/smb.conf
文件的副本:# cp /etc/samba/smb.conf /etc/samba/samba.conf.copy
- 编辑复制的文件并进行必要的更改。
验证
/etc/samba/samba.conf.copy
文件中的配置:# testparm -s /etc/samba/samba.conf.copy
如果
testparm
报告错误,请修复这些错误,然后再次运行该命令。使用新配置覆盖
/etc/samba/smb.conf
文件:# mv /etc/samba/samba.conf.copy /etc/samba/smb.conf
等待 Samba 服务自动重新载入其配置或手动重新载入配置:
# smbcontrol all reload-config
1.2. 使用 testparm 工具验证 smb.conf 文件
testparm
工具验证/etc/samba/smb.conf
文件中的 Samba 配置是否正确。该工具不但检测无效的参数和值,还检测不正确的设置,如 ID 映射。如果testparm
报告没有问题,Samba 服务将成功加载/etc/samba/smb.conf
文件。请注意,testparm
无法验证配置的服务是否可用或按预期工作。
红帽建议在每次修改此文件后,使用testparm
来验证/etc/samba/smb.conf
文件。
先决条件
- 已安装 Samba。
-
退出
/etc/samba/smb.conf
文件。
流程
以
root
用户身份运行testparm
工具:# testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Unknown parameter encountered: "log levell" Processing section "[example_share]" Loaded services file OK. ERROR: The idmap range for the domain * (tdb) overlaps with the range of DOMAIN (ad)! Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions # Global parameters [global] ... [example_share] ...
前面的示例输出会报告不存在的参数以及不正确的 ID 映射配置。
-
如果
testparm
报告了配置中不正确的参数、值或其他错误,请修复问题并再次运行该工具。
1.3. 将 Samba 设置为独立服务器
您可以将 Samba 设置为不是域成员的服务器。在此安装模式中,Samb身份验证到本地数据库,而不是中央DC。另外,您可以启用客户机访问,允许用户在没有身份验证的情况下连接到一个或多个服务。
1.3.1. 为独立服务器设置服务器配置
您可以为 Samba 独立服务器设置服务器配置。
流程
安装
samba
软件包:# dnf install samba
编辑
/etc/samba/smb.conf
文件并设置以下参数:[global] workgroup = Example-WG netbios name = Server security = user log file = /var/log/samba/%m.log log level = 1
此配置在
Example-learning
工作组里定义了一个名为Server
的独立服务器。此外,此配置启用了最小级别(1
)的日志记录,日志文件将存储在/var/log/samba/
目录中。Samba 将把日志文件
参数中的%m
宏扩展到连接客户端的 NetBIOS 名称。这可为每个客户端启用独立的日志文件。(可选)配置文件或打印机共享。请参阅:
验证
/etc/samba/smb.conf
文件:# testparm
如果您设置了需要身份验证的共享,请创建用户帐户。
详情请参阅 创建和启用本地用户帐户。
打开所需的端口并使用
firewall-cmd
工具重新载入防火墙配置:# firewall-cmd --permanent --add-service=samba # firewall-cmd --reload
启用并启动
smb
服务:# systemctl enable --now smb
其它资源
-
smb.conf(5)
手册页
1.3.2. 创建并启用本地用户帐户
要让用户在连接到共享时进行身份验证,您必须在 Samba 主机上的操作系统和 Samba 数据库中创建帐户。Samba 要求操作系统帐户验证文件系统对象上的访问控制列表(ACL)和 Samba 帐户,来验证连接用户的身份。
如果您使用了passdb backend = tdbsam
默认设置,Samba 会将用户帐户存储在/var/lib/samba/private/passdb.tdb
数据库中。
您可以创建一个名为 example
的本地 Samba 用户。
先决条件
- Samba 已安装,并配置为独立服务器。
流程
创建操作系统帐户:
# useradd -M -s /sbin/nologin example
此命令添加了
example
帐户,而不创建主目录如果帐户仅用于对 Samba 进行身份验证,请将/sbin/nologin
命令指定为 shell,以防止帐户在本地登录。为操作系统帐户设置密码以启用它:
# passwd example Enter new UNIX password:
password
Retype new UNIX password:password
passwd: password updated successfullySamba 不会使用操作系统帐户中的密码集进行身份验证。然而,您需要设置密码才能启用帐户。如果一个帐户被禁用,当这个用户连接时,Samba 会拒绝访问。
将用户添加到 Samba 数据库,并为帐户设置密码:
# smbpasswd -a example New SMB password:
password
Retype new SMB password:password
Added user example.当使用此帐户连接到 Samba 共享时,使用此密码进行验证。
启用 Samba 帐户:
# smbpasswd -e example Enabled user example.
1.4. 了解并配置 Samba ID 映射
Windows 域通过唯一安全标识符(SID)来区分用户和组。但是,Linux 需要为每个用户和组群有唯一的 UID 和 GID。如果您以域成员身份运行 Samba,winbindd
服务负责向操作系统提供域用户和组的信息。
要启用winbindd
服务来向 Linux提供唯一的用户和组ID,您必须在/etc/samba/smb.conf
文件中为以下情况配置 ID 映射:
- 本地数据库(默认域)
- Samba 服务器所属的 AD 或 NT4 域
- 每个用户必须能够访问这个 Samba 服务器上的资源的可信域
Samba 为特定配置提供不同的 ID 映射后端。最常用的后端是:
后端 | 使用案例 |
---|---|
|
|
| 仅限 AD 域 |
| AD 和 NT4 域 |
|
AD、NT4 和 |
1.4.1. 规划 Samba ID 范围
无论您在 AD 中是否存储了 Linux UID 和 GID,还是将 Samba 配置为生成它们,每个域配置都需要一个唯一的 ID 范围,其不得与任何其他域重叠。
如果您设置了重叠 ID 范围,Samba 无法正常工作。
例 1.1. 唯一的 ID 范围
以下显示了默认(*
)、AD-DOM
和TRUST-DOM
域的非重叠 ID 映射范围。
[global] ... idmap config * : backend = tdb idmap config * : range = 10000-999999 idmap config AD-DOM:backend = rid idmap config AD-DOM:range = 2000000-2999999 idmap config TRUST-DOM:backend = rid idmap config TRUST-DOM:range = 4000000-4999999
每个域只能分配一个范围。因此,在域范围之间有足够的空间。这可让您在域扩展后扩展范围。
如果您稍后给某个域分配了一个不同的范围,那么之前由这些用户和组创建的文件和目录的所有权将会丢失。
1.4.2. * 默认域
在域环境中,您可以为以下每个情况添加一个 ID 映射配置:
- Samba 服务器所属的域
- 每个可以访问 Samba 服务器的可信域
但是,对于所有其他对象,Samba 会从默认域分配 ID。这包括:
- 本地 Samba 用户和组
-
Samba 内置帐户和组,如
BUILTIN\Administrators
您必须按描述的配置默认域,以使 Samba 正确运行。
默认域后端必须可写,才能永久存储分配的 ID。
对于默认域,您可以使用以下后端之一:
tdb
当您将默认域配置为使用
tdb
后端时,请设置一个足够大的 ID 范围,以包含将来要创建的对象,这些对象不属于已定义的域ID映射配置的一部分。例如,在
/etc/samba/smb.conf
文件中的[global]
部分中设置以下内容:idmap config * : backend = tdb idmap config * : range = 10000-999999
详情请查看 使用 TDB ID 映射后端。
autorid
当您将默认域配置为使用
autorid
后端时,为域添加额外的 ID 映射配置是可选的。例如,在
/etc/samba/smb.conf
文件中的[global]
部分中设置以下内容:idmap config * : backend = autorid idmap config * : range = 10000-999999
详情请查看 使用 autorid ID 映射后端。
1.4.3. 使用 tdb ID 映射后端
winbindd
服务默认使用可写的tdb
ID 映射后端来存储安全标识符(SID)、UID 以及 GID 映射表。这包括本地用户、组和内置主体。
仅将此后端用于*
默认域。例如:
idmap config * : backend = tdb idmap config * : range = 10000-999999
其它资源
1.4.4. 使用 ad ID 映射后端
您可以将 Samba AD 成员配置为使用 ad
ID 映射后端。
ad
ID 映射后端实现了一个只读 API,以便从 AD 读取帐户和组信息。它具有以下优点:
- 所有用户和组群设置都集中存储在 AD 中。
- 使用这个后端的所有 Samba 服务器中的用户和组群 ID 是一致的。
- ID 不会存储在本地数据库中(本地数据库可能会被损坏),因此文件所有者不会丢失。
ad
ID 映射后端不支持具有单向信任的Active Directory域。如果您使用单向信任在 Active Directory 中配置域成员,请使用以下一种 ID 映射后端: tdb
、delete
或 autorid
。
后端从 AD 读取以下属性:
AD 属性名称 | 对象类型 | 映射到 |
---|---|---|
| 用户和组群 | 用户和组名称,取决于对象 |
| User | 用户 ID(UID) |
| 组 | 组 ID(GID) |
| User | 用户 shell 的路径 |
| User | 用户主目录的路径 |
| User | 主组群 ID |
[a]
如果您设置了 idmap config DOMAIN:unix_nss_info = yes ,则 Samba 只读取这个属性。
[b]
如果您设置了 idmap config DOMAIN:unix_primary_group = yes ,则 Samba 只读取这个属性。
|
先决条件
-
用户和组必须在 AD 中设置唯一的 ID,并且 ID 必须在
/etc/samba/smb.conf
文件中配置的范围之内。其ID 不在范围之内的对象在 Samba 服务器上不可用。 - 用户和组必须在 AD 中设置所有必需的属性。如果缺少所需的属性,该用户或组将无法在 Samba 服务器中可用。所需的属性取决于您的配置。
- 已安装 Samba。
-
Samba 配置(除了ID 映射)位于
/etc/samba/smb.conf
文件中。
流程
编辑
/etc/samba/smb.conf
文件中的[global]
部分:如果默认域(
*
)不存在,请为其添加 ID 映射配置。例如:idmap config * : backend = tdb idmap config * : range = 10000-999999
为 AD 域启用
ad
ID 映射后端:idmap config DOMAIN : backend = ad
设置分配给 AD 域中用户和组的 ID 范围。例如:
idmap config DOMAIN : range = 2000000-2999999
重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
当从AD读取属性时,使用RFC 2307模式来设置 Samba:
idmap config DOMAIN : schema_mode = rfc2307
要让 Samba 从对应的 AD 属性读取登录 shell 和用户主目录的路径,请设置:
idmap config DOMAIN : unix_nss_info = yes
或者,您可以设置适用于所有用户的统一的域范围的主目录路径和登录 shell。例如:
template shell = /bin/bash template homedir = /home/%U
默认情况下,Samba 使用用户对象的
primaryGroupID
属性作为 Linux 上用户的主组。或者,您可以将 Samba 配置为使用gidNumber
属性中设置的值:idmap config DOMAIN : unix_primary_group = yes
验证
/etc/samba/smb.conf
文件:# testparm
重新载入 Samba 配置:
# smbcontrol all reload-config
其它资源
- * 默认域
-
smb.conf(5)
andidmap_ad(8)
man pages -
smb.conf(5)
手册页中的VARIABLE SUBSTITUTIONS
部分
1.4.5. 使用网格 ID 映射后端
您可以将 Samba 域成员配置为使用 rid
ID 映射后端。
Samba 可以使用 Windows SID 的相对标识符(RID),以便在 Red Hat Enterprise Linux 上生成 ID。
RID 是 SID 的最后部分。例如,如果用户的 SID 是S-1-5-21-5421822485-1151247151-421485315-30014
,那么30014
是对应的 RID。
rid
ID映射后端实施了一个只读 API,以便根据 AD 和 NT4 域的算法映射方案计算帐户和组信息。当配置后端时,您必须在 idmap config DOMAIN : range
参数中设置最低和最高的 RID。Samba 不会映射比这个参数中设置低或更高 RID 的用户或组。
作为只读后端,rid
无法分配新的ID,例如为BUILTIN
组。因此,请勿将此后端用于 *
默认域。
使用网格后端的好处
- 所有在配置范围内具有 RID 的域用户和组都会自动在域成员中可用。
- 您不需要手动分配 ID、主目录和登录 shell。
使用网格后端的缺陷
- 所有域用户可以获得相同的登录 shell 和主目录。但是,您可以使用变量。
-
如果它们都使用具有相同ID范围设置的
rid
后端,那么用户和组ID只在 Samba 域成员之间是相同的。 - 您不能阻止单独的用户或组在域成员中可用。只有超出配置范围以外的用户和组才会包括。
-
根据
winbindd
服务用于计算 ID 的公式,如果不同域中的对象有相同的 RID,那么在多域环境中可能会有重复ID的事情发生 。
先决条件
- 已安装 Samba。
-
Samba 配置(除了ID 映射)位于
/etc/samba/smb.conf
文件中。
流程
编辑
/etc/samba/smb.conf
文件中的[global]
部分:如果默认域(
*
)不存在,请为其添加 ID 映射配置。例如:idmap config * : backend = tdb idmap config * : range = 10000-999999
为域启用
rid
ID映射后端:idmap config DOMAIN : backend = rid
设置一个足够大的范围,以包括将来将要分配的所有RID。例如:
idmap config DOMAIN : range = 2000000-2999999
Samba 会忽略此域中其RID不在范围内的用户和组。
重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
设置分配给所有映射用户的 shell 和主目录路径。例如:
template shell = /bin/bash template homedir = /home/%U
验证
/etc/samba/smb.conf
文件:# testparm
重新载入 Samba 配置:
# smbcontrol all reload-config
其它资源
- * 默认域
-
smb.conf(5)
手册页中的VARIABLE SUBSTITUTIONS
部分 -
RID 中本地 ID 的计算,请查看
idmap_rid(8)
手册页
1.4.6. 使用自动 ID 映射后端
您可以将 Samba 域成员配置为使用 autorid
ID 映射后端。
autorid
后端的工作方式与rid
ID 映射后端类似,但可以为不同的域自动分配 ID。这可让您在以下情况下使用autorid
后端:
-
仅用于
*
默认域 -
对于
*
默认域和附加域,不需要为每个附加域创建 ID 映射配置 - 只适用于特定域
如果您对默认域使用autorid
,为域添加额外的 ID 映射配置是可选的。
本节的部分内容来自在 Samba Wiki 中发布的 idmap config autorid 文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki页面上的历史选项卡。
使用自动扩展后端的好处
- 所有在配置范围内计算 UID 和 GID 的域用户和组都会在域成员中自动可用。
- 您不需要手动分配 ID、主目录和登录 shell。
- 没有重复的 ID,即使多域环境中的多个对象有相同的 RID。
缺陷
- 在 Samba 域成员中用户和组群 ID 不相同。
- 所有域用户可以获得相同的登录 shell 和主目录。但是,您可以使用变量。
- 您不能阻止单独的用户或组在域成员中可用。只有计算 UID 或 GID 不在配置范围内的用户和组才会包括。
先决条件
- 已安装 Samba。
-
Samba 配置(除了ID 映射)位于
/etc/samba/smb.conf
文件中。
流程
编辑
/etc/samba/smb.conf
文件中的[global]
部分:为
*
默认域启用autorid
ID映射后端:idmap config * : backend = autorid
设置一个足够大的范围来为所有现有和将来的对象分配 ID。例如:
idmap config * : range = 10000-999999
Samba 忽略在此域中计算 ID 不在范围范围内的用户和组。
警告设置范围并开始使用 Samba 后,您只能增加范围的上限。对范围的任何其他变化都可能会导致分配新的 ID,从而会丢失文件的所有者信息。
另外,还可设置范围大小。例如:
idmap config * : rangesize = 200000
Samba 会为每个域的对象分配这个连续的ID号,直到
idmap config * : range
参数中设置的范围内的所有ID分配完。注意如果设置 rangesize,则需要相应地调整范围。范围必须是 rangesize 的倍数。
设置分配给所有映射用户的 shell 和主目录路径。例如:
template shell = /bin/bash template homedir = /home/%U
另外,还可为域添加额外的 ID 映射配置。如果没有针对单个域的配置,Samba 则使用之前配置的
*
默认域中的autorid
后端设置来计算 ID。重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
验证
/etc/samba/smb.conf
文件:# testparm
重新载入 Samba 配置:
# smbcontrol all reload-config
其它资源
-
idmap_autorid(8)
手册页中的THE MAPPING FORMULAS
部分 -
idmap_autorid(8)
手册页中的rangesize
参数描述 -
smb.conf(5)
手册页中的VARIABLE SUBSTITUTIONS
部分
1.5. 将 Samba 设置为 AD 域成员服务器
如果您正在运行 AD 或 NT4 域,请使用 Samba 将 Red Hat Enterprise Linux 服务器添加为域的成员,以便可以:
- 访问其他域成员上的域资源
-
对本地服务(如
sshd
)验证域用户 - 托管在服务器上的共享目录和打印机,以充当文件和打印服务器
1.5.1. 将 RHEL 系统添加到 AD 域中
Samba Winbind 是系统安全服务守护进程(SSSD)的一个替代方案,用于将活动目录(AD)与 Red Hat Enterprise Linux(RHEL)系统连接。您可以使用 realmd
将 RHEL 系统加入到 AD 域,来配置 Samba Winbind 。
流程
如果您的 AD 需要弃用的 RC4 加密类型进行 Kerberos 验证,请在 RHEL 中启用对这些密码的支持:
# update-crypto-policies --set DEFAULT:AD-SUPPORT
安装以下软件包:
# dnf install realmd oddjob-mkhomedir oddjob samba-winbind-clients \ samba-winbind samba-common-tools samba-winbind-krb5-locator krb5-workstation
要在域成员中共享目录或打印机,请安装
samba
软件包:# dnf install samba
备份现有的
/etc/samba/smb.conf
Samba 配置文件:# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
加入域。例如,要加入名为
ad.example.com
的域:# realm join --membership-software=samba --client-software=winbind ad.example.com
使用上面的命令,
realm
工具会自动:-
为
ad.example.com
域中的成员创建/etc/samba/smb.conf
文件 -
将用于用户和组查找的
winbind
模块添加到/etc/nsswitch.conf
文件中 -
更新
/etc/pam.d/
目录中的可插拔验证模块(PAM)配置文件 -
启动
winbind
服务,并使服务在系统引导时启动
-
为
-
另外,在
/etc/samba/smb.conf
文件中设置备用的 ID 映射后端或自定义 ID 映射设置。
详情请参阅 了解和配置 Samba ID 映射。
验证
winbind
服务是否运行:# systemctl status winbind ... Active: active (running) since Tue 2018-11-06 19:10:40 CET; 15s ago
重要要启用 Samba 来查询域用户和组信息,必须在启动
smb
之前运行winbind
服务。如果您安装了
samba
软件包来共享目录和打印机,请启用并启动smb
服务:# systemctl enable --now smb
-
另外,如果您要验证Active Directory的本地登录,请启用
winbind_krb5_localauth
插件。请参阅 使用 MIT Kerberos 的本地授权插件。
验证
显示 AD 用户的详情,如 AD 域中的 AD 管理员帐户:
# getent passwd "AD\administrator" AD\administrator:*:10000:10000::/home/administrator@AD:/bin/bash
查询 AD 域中的域用户组成员:
# getent group "AD\Domain Users" AD\domain users:x:10000:user1,user2
另外,还可在设置文件和目录权限时验证您可以使用域用户和组。例如,将
/srv/samba/example.txt
文件的所有者设置为AD\administrator
,组设置为AD\Domain Users
:# chown "AD\administrator":"AD\Domain Users" /srv/samba/example.txt
验证 Kerberos 验证是否如预期正常工作:
对于 AD 域成员,为
administrator@AD.EXAMPLE.COM
主体获取一个ticket:# kinit administrator@AD.EXAMPLE.COM
显示缓存的 Kerberos ticket:
# klist Ticket cache: KCM:0 Default principal: administrator@AD.EXAMPLE.COM Valid starting Expires Service principal 01.11.2018 10:00:00 01.11.2018 20:00:00 krbtgt/AD.EXAMPLE.COM@AD.EXAMPLE.COM renew until 08.11.2018 05:00:00
显示可用域:
# wbinfo --all-domains BUILTIN SAMBA-SERVER AD
其它资源
- 如果您不想使用弃用的 RC4 密码,可以在 AD 中启用 AES 加密类型。查看
- 使用 GPO 在 Active Directory 中启用 AES 加密类型
-
realm(8)
手册页
1.5.2. 使用 MIT Kerberos 的本地授权插件
winbind
服务向域成员提供Active Directory用户。在某些情况下,管理员希望域用户能够对域成员上运行的本地服务(如SSH服务器)启用身份验证。当使用 Kerberos 来验证域用户时,启用winbind_krb5_localauth
插件,通过winbind
服务将 Kerberos 主体正确映射到Active Directory帐户。
例如,如果Active Directory用户的sAMAccountName
属性设置为EXAMPLE
,并且用户尝试使用小写的用户名进行日志记录,Kerberos将返回大写的用户名。因此,条目不匹配,身份验证失败。
使用winbind_krb5_localauth
插件时,帐户名称会被正确映射。请注意,这只适用于 GSSAPI 身份验证,不适用于获取初始票据授权票据(TGT)。
先决条件
- Samba 配置为 Active Directory 的成员。
- Red Hat Enterprise Linux 对 Active Directory 进行身份验证。
-
winbind
服务在运行。
流程
编辑/etc/krb5.conf
文件,并添加以下部分:
[plugins] localauth = { module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so enable_only = winbind }
其它资源
-
winbind_krb5_localauth(8)
手册页。
1.6. 在 IdM 域成员中设置 Samba
您可以在加入到 Red Hat Identity Management (IdM)域的主机上设置 Samba。来自IdM的用户,以及来自受信任的 Active Directory(AD)域的用户(如果有的话)可以访问 Samba 提供的共享和打印机服务。
对 IdM 域成员使用 Samba 是一种不受支持的技术预览特性,且包含了某些限制。例如,IdM 信任控制器不支持活动目录全局目录服务,并且不支持使用分布式计算环境/远程过程调用(DCE/RPC)协议解析 IdM 组。因此,AD 用户在登录到其他 IdM 客户端时只能访问托管在 IdM 客户端上的 Samba 共享和打印机;登录到 Windows 机器的 AD 用户无法访问托管在 IdM 域成员上的 Samba 共享。
我们鼓励在 IdM 域成员中部署 Samba 的用户向红帽提供反馈意见。
如果 AD 域中的用户需要访问 Samba 提供的共享和打印机服务,请确保在 AD 中启用了 AES 加密类型。如需更多信息,请参阅 使用 GPO 在活动目录中启用 AES 加密类型。
先决条件
- 主机作为 IdM 域的客户端加入。
- IdM 服务器和客户端都必须运行在 RHEL 9.0 或更高版本上。
1.6.1. 准备 IdM 域以便在域成员中安装 Samba
在IdM客户端上设置Samba之前,必须在IdM服务器上使用ipa-adtrust-install
工具来准备IdM域。
运行ipa-adtrust-install
命令的任何系统都会自动成为 AD 信任控制器。但是,您必须在 IdM 服务器上只运行一次 ipa-adtrust-install
。
先决条件
- IdM 服务器已安装。
- 您需要 root 权限才能安装软件包并重新启动 IdM 服务。
步骤
安装所需的软件包:
[root@ipaserver ~]# dnf install ipa-server-trust-ad samba-client
以 IdM 管理用户身份进行身份验证:
[root@ipaserver ~]# kinit admin
运行
ipa-adtrust-install
工具:[root@ipaserver ~]# ipa-adtrust-install
如果 IdM 安装了集成的 DNS 服务器,则会自动创建 DNS 服务记录。
如果您在没有集成 DNS 服务器的情况下安装了 IdM,
ipa-adtrust-install
会打印一个服务记录列表,您必须手动将它们添加到 DNS ,然后才能继续操作。该脚本提示您
/etc/samba/smb.conf
已存在,并将被重写:WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing Samba configuration. Do you wish to continue? [no]:
yes
该脚本提示您配置
slapi-nis
插件,这是一个兼容插件,允许旧的 Linux 客户端与受信任的用户一起工作:Do you want to enable support for trusted domains in Schema Compatibility plugin? This will allow clients older than SSSD 1.9 and non-Linux clients to work with trusted users. Enable trusted domains support in slapi-nis? [no]:
yes
系统会提示您运行 SID 生成任务,以便为任何现有用户创建 SID:
Do you want to run the ipa-sidgen task? [no]:
yes
这是一个资源密集型任务,因此如果您有大量的用户,您可以在其他时间运行此操作。
(可选) 默认情况下,对于 Windows Server 2008 及更高版本,动态 RPC 端口范围定义为
49152-65535
。如果需要为您的环境定义一个不同的动态 RPC 端口范围,请将 Samba 配置为使用不同的端口,并在防火墙设置中开放这些端口。以下示例将端口范围设置为55000-65000
。[root@ipaserver ~]# net conf setparm global 'rpc server dynamic port range' 55000-65000 [root@ipaserver ~]# firewall-cmd --add-port=55000-65000/tcp [root@ipaserver ~]# firewall-cmd --runtime-to-permanent
重启
ipa
服务:[root@ipaserver ~]# ipactl restart
使用
smbclient
工具来验证 Samba 是否响应 IdM 端的 Kerberos 身份验证:[root@ipaserver ~]#
smbclient -L ipaserver.idm.example.com -U user_name --use-kerberos=required
lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Samba 4.15.2) ...
1.6.2. 在 IdM 客户端中安装和配置 Samba 服务器
您可以在已在 IdM 域注册的客户端上安装和配置 Samba。
先决条件
- IdM 服务器和客户端都必须运行在 RHEL 9.0 或更高版本上。
- 已准备好 IdM 域,如 为在域成员上安装 Samba 准备 IdM 域 中所述。
- 如果 IdM 具有配置了 AD 的信任,请为 Kerberos 启用 AES 加密类型。例如,使用组策略对象(GPO)来启用 AES 加密类型。详情请参阅 使用 GPO 在活动目录中启用 AES 加密。
流程
安装
ipa-client-samba
软件包:[root@idm_client]# dnf install ipa-client-samba
使用
ipa-client-samba
工具准备客户端并创建初始 Samba 配置:[root@idm_client]# ipa-client-samba Searching for IPA server... IPA server: DNS discovery Chosen IPA master: idm_server.idm.example.com SMB principal to be created: cifs/idm_client.idm.example.com@IDM.EXAMPLE.COM NetBIOS name to be used: IDM_CLIENT Discovered domains to use: Domain name: idm.example.com NetBIOS name: IDM SID: S-1-5-21-525930803-952335037-206501584 ID range: 212000000 - 212199999 Domain name: ad.example.com NetBIOS name: AD SID: None ID range: 1918400000 - 1918599999 Continue to configure the system with these values? [no]: yes Samba domain member is configured. Please check configuration at /etc/samba/smb.conf and start smb and winbind services
默认情况下,
ipa-client-samba
会自动将[homes]
部分添加到/etc/samba/smb.conf
文件中,该文件在用户连接时动态共享用户的主目录。如果用户在这个服务器上没有主目录,或者您不想共享主目录,请从/etc/samba/smb.conf
中删除以下行:[homes] read only = no
共享目录和打印机。详情请查看:
在本地防火墙中打开 Samba 客户端所需的端口:
[root@idm_client]# firewall-cmd --permanent --add-service=samba-client [root@idm_client]# firewall-cmd --reload
启用并启动
smb
和winbind
服务:[root@idm_client]# systemctl enable --now smb winbind
验证
在安装了 samba-client
软件包的不同 IdM 域成员上运行以下验证步骤:
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
$
smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required
lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- example Disk IPC$ IPC IPC Service (Samba 4.15.2) ...
其它资源
-
ipa-client-samba(1)
man page
1.6.3. 如果 IdM 信任新域,请手动添加 ID 映射配置
Samba 需要一个 ID 映射配置,用户可从该域访问资源。在 IdM 客户端上运行的现有 Samba 服务器上,在管理员向 Active Directory(AD)域添加了新的信任后,您必须手动添加 ID 映射配置。
先决条件
- 您在 IdM 客户端中配置了 Samba。之后,IdM 增加了一个新的信任。
- 在可信 AD 域中必须禁用 Kerberos 的 DES 和 RC4 加密类型。为了安全起见,RHEL 9 不支持这些弱加密类型。
步骤
使用主机的 keytab 进行身份验证:
[root@idm_client]# kinit -k
使用
ipa idrange-find
命令来显示新域的基本 ID 和 ID 范围大小。例如,以下命令显示了ad.example.com
域的值:[root@idm_client]# ipa idrange-find --name="AD.EXAMPLE.COM_id_range" --raw --------------- 1 range matched --------------- cn: AD.EXAMPLE.COM_id_range ipabaseid: 1918400000 ipaidrangesize: 200000 ipabaserid: 0 ipanttrusteddomainsid: S-1-5-21-968346183-862388825-1738313271 iparangetype: ipa-ad-trust ---------------------------- Number of entries returned 1 ----------------------------
在后续步骤中,您需要
ipabaseid
和ipaidrangesize
属性的值。要计算可用最高的 ID,请使用以下公式:
maximum_range = ipabaseid + ipaidrangesize - 1
使用上一步中的值,
ad.example.com
域的最大可用 ID 是1918599999
(1918400000 + 200000 - 1)。编辑
/etc/samba/smb.conf
文件,并将域的 ID 映射配置添加到[global]
部分:idmap config AD : range = 1918400000 - 1918599999 idmap config AD : backend = sss
将
ipabaseid
属性的值指定为最小值,将上一步中的计算值指定为该范围的最大值。重启
smb
和winbind
服务:[root@idm_client]# systemctl restart smb winbind
验证
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
$
smbclient -L idm_client.idm.example.com -U user_name --use-kerberos=required
lp_load_ex: changing to config backend registry Sharename Type Comment --------- ---- ------- example Disk IPC$ IPC IPC Service (Samba 4.15.2) ...
1.6.4. 其它资源
1.13. 为 macOS 客户端配置 Samba
fruit
虚拟文件系统(VFS)Samba 模块提供了与 Apple 服务器消息块(SMB)客户端增强了的兼容性。
1.15. 将 Samba 设置为打印服务器
如果您将 Samba 设置为打印服务器,那么网络中的客户端可以使用 Samba 进行打印。此外,如果进行了配置, Windows 客户端可以从 Samba 服务器下载驱动程序。
本节的部分内容摘自在 Samba Wiki 中发布的将Samba设置为打印服务器文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki 页面上的历史选项卡。
先决条件
Samba 采用以下模式之一设置:
1.15.1. 在 Samba 中启用打印服务器支持
默认情况下,在 Samba 中不启用打印服务器支持。要将 Samba 用作打印服务器,您必须相应地配置 Samba。
打印作业和打印机操作需要远程过程调用(RPC)。默认情况下,Samba 根据需要启动 rpcd_spools
服务来管理 RPC。在第一个 RPC 调用过程中,或者当您更新了 CUPS 中的打印机列表时,Samba 会从 CUPS 检索打印机信息。每台打印机可能需要大约 1 秒。因此,如果您有超过 50 台打印机,请调优 rpcd_spools
设置。
先决条件
打印机在 CUPS 服务器中配置。
有关在 CUPS 中配置打印机的详情,请查看打印服务器上 CUPS Web 控制台(https://printserver:631/help)中提供的文档。
流程
编辑
/etc/samba/smb.conf
文件:添加
[printers]
部分,以启用 Samba 中的打印后端:[printers] comment = All Printers path = /var/tmp/ printable = yes create mask = 0600
重要[printers]
共享名称是写死的,不能更改。如果 CUPS 服务器运行在不同的主机或端口上,请在
[printers]
部分中指定设置:cups server = printserver.example.com:631
如果您有许多打印机,请将空闲秒数设置为比连接到 CUPS 的打印机数高的值。例如,如果您有 100 台打印机,请在
[global]
部分中设置:rpcd_spoolss:idle_seconds = 200
如果这个设置在您的环境中没有缩放,请在
[global]
部分中增加rpcd_spools
worker 的数量:rpcd_spoolss:num_workers = 10
默认情况下,
rpcd_spools
启动 5 个 worker。
验证
/etc/samba/smb.conf
文件:# testparm
打开所需的端口,并使用
firewall-cmd
工具重新加载防火墙配置:# firewall-cmd --permanent --add-service=samba # firewall-cmd --reload
重启
smb
服务:# systemctl restart smb
重启服务后,Samba 会自动共享在 CUPS 后端中配置的所有打印机。如果想要仅手动共享特定打印机,请参阅 手动共享特定的打印机。
验证
提交打印作业。例如,要打印 PDF 文件,请输入:
# smbclient -Uuser //sambaserver.example.com/printer_name -c "print example.pdf"
1.15.2. 手动共享特定的打印机
如果您将 Samba 配置为打印服务器,默认情况下,Samba 会共享在 CUPS 后端中配置的所有打印机。以下流程解释了如何只共享特定的打印机。
先决条件
- Samba 被设置为打印服务器
流程
编辑
/etc/samba/smb.conf
文件:在
[global]
部分中,通过以下设置禁用自动打印机共享:load printers = no
为您要共享的每个打印机添加一段。例如,要在 Samba 中将 CUPS 后端中名为
example
的打印机共享为Example-Printer
,请添加以下部分:[Example-Printer] path = /var/tmp/ printable = yes printer name = example
您不需要为每个打印机单独设置 spool 目录。您可以在打印机的
path
参数中设置与您在[printers]
部分中设置的完全相同的 spool 目录。
验证
/etc/samba/smb.conf
文件:# testparm
重新载入 Samba 配置:
# smbcontrol all reload-config
1.16. 在 Samba 打印服务器中为 Windows 客户端设置自动打印机驱动程序下载
如果您在为 Windows 客户端运行 Samba 打印服务器,你可以上传驱动程序并预配置打印机。如果用户连接到打印机,Windows 会自动在客户端本地下载并安装驱动程序。用户不需要本地管理员权限进行安装。另外,Windows 应用预配置的驱动程序设置,如纸匣的数量。
本节的部分内容摘自 Samba Wiki 上发布的为 Windows 客户端设置自动打印机驱动程序下载文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki 页面上的历史选项卡。
先决条件
- Samba 被设置为打印服务器
1.16.1. 有关打印机驱动程序的基本信息
本节提供有关打印机驱动程序的一般信息。
支持的驱动程序模型版本
Samba 只支持 Windows 2000 及更高版本支持的,以及 Windows Server 2000 及更高版本支持的打印机驱动程序模型版本 3。Samba 不支持 Windows 8 和 Windows Server 2012 中引入的驱动程序模型版本 4。但是,这些及之后的 Windows 版本也支持版本 3 驱动程序。
包感知驱动程序
Samba 不支持包感知驱动程序。
准备上传的打印机驱动程序
在您将驱动程序上传到 Samba 打印服务器之前:
- 如果驱动程序采用压缩格式提供,请解包它。
有些驱动程序需要启动一个设置应用程序,以便在 Windows 主机上本地安装驱动程序。在某些情况下,安装程序会在设置运行期间将单个文件提取到操作系统的临时文件夹中。使用驱动程序文件上传:
- 启动安装程序。
- 将临时文件夹中的文件复制到新位置。
- 取消安装。
请您的打印机厂商提供支持上传到打印服务器的驱动程序。
为客户端提供 32 位和 64 位驱动
要为 32 位和 64 位 Windows 客户端提供打印机的驱动程序,您必须上传两个架构具有完全相同名称的驱动程序。例如,如果您上传名为Example PostScript
的 32 位驱动程序和名为Example PostScript (v1.0)
的 64 位驱动程序,则名称不匹配。因此,您只能为打印机分配其中一个驱动程序,且该驱动程序无法对这两个架构都适用。
1.16.2. 启用用户上传和预配置驱动程序
要上传和预配置打印机驱动程序,用户或组需要被赋予 SePrintOperatorPrivilege
特权。用户必须被添加到 printadmin
组中。在安装 samba
软件包时,Red Hat Enterprise Linux 会自动创建这个组。printadmin
组被分配了低于 1000 的最小可用动态系统 GID。
流程
例如,要对
printadmin
组赋予SePrintOperatorPrivilege
特权:# net rpc rights grant "printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator" Enter DOMAIN\administrator's password: Successfully granted rights.
注意在域环境中,将
SePrintOperatorPrivilege
赋予域组。这可让您通过更新用户的组成员资格来集中管理特权。列出所有被赋予了
SePrintOperatorPrivilege
的用户和组:# net rpc rights list privileges SePrintOperatorPrivilege -U "DOMAIN\administrator" Enter administrator's password: SePrintOperatorPrivilege: BUILTIN\Administrators DOMAIN\printadmin
1.16.4. 创建 GPO 以启用客户端信任 Samba 打印服务器
出于安全考虑,最近的 Windows 操作系统会阻止客户端从不受信任的服务器下载非包感知的打印机驱动程序。如果您的打印服务器是 AD 中的成员,您可以在域中创建一个组策略对象(GPO)来信任 Samba 服务器。
先决条件
- Samba 打印服务器是 AD 域的成员。
- 您用来创建 GPO 的 Windows 计算机必须安装有 Windows 远程服务器管理工具(RSAT)。详情请查看 Windows 文档。
流程
-
使用允许编辑组策略的帐户(如 AD 域
Administrator
用户)登录到 Windows 计算机。 -
打开
组策略管理控制台
。 右键单击 AD 域并选择
创建此域中的 GPO,并链接到此处
。-
为 GPO 输入一个名称,如
Legacy Printer Driver Policy
,并点击OK
。新的 GPO 将在域条目下显示。 -
右键单击新创建的 GPO,然后选择
编辑
以打开组策略管理编辑器
。 进入
→ → → 。在窗口的右侧,双击
指向和打印限制
来编辑策略:启用策略并设置以下选项:
-
选择
用户只能指向并打印到这些服务器
,再将 Samba 打印服务器的完全限定域名(FQDN)输入到此选项旁边的字段。 在
安全提示
下的两个复选框中,选择不显示警告 或 高程提示
。
-
选择
- 点击确定。
双击
包指向和打印 - 已批准的服务器
来编辑策略:-
启用策略并单击
显示
按钮。 输入 Samba 打印服务器的 FQDN。
-
单击
OK
,关闭显示内容
和策略的属性窗口。
-
启用策略并单击
-
关闭
组策略管理编辑器
。 -
关闭
组策略管理控制台
。
在 Windows 域成员应用了组策略后,用户连接到打印机时会自动从 Samba 服务器下载打印机驱动程序。
其它资源
- 有关使用组策略,请参阅 Windows 文档。
1.16.5. 上传驱动程序和预配置打印机
在 Windows 客户端使用 打印管理
应用程序上传托管在 Samba 打印服务器上的驱动程序和预配置打印机。详情请查看 Windows 文档。
1.17. 在启用了 FIPS 模式的服务器上运行 Samba
本节概述了在启用了 FIPS 模式的情况下运行 Samba 的限制。还提供了在运行 Samba 的 Red Hat Enterprise Linux 主机上启用 FIPS 模式的流程。
1.17.1. 在 FIPS 模式中使用 Samba 的限制
在指定条件下,以下 Samba 模式和功能在 FIPS 模式下工作:
- Samba 仅在 Active Directory(AD)或使用AES密码进行Kerberos身份验证的红帽身份管理(IdM)环境中作为域成员。
- Samba 作为 Active Directory 域成员上的文件服务器。但是,这需要客户端使用 Kerberos 向服务器进行身份验证。
由于 FIPS 的安全性增强,如果启用了 FIPS 模式,以下 Samba 特性和模式将无法正常工作:
- NT LAN Manager(NTLM)验证,因为 RC4 密码已被阻止
- 服务器消息块版本 1(SMB1)协议
- 独立文件服务器模式,因为它使用了 NTLM 身份验证
- NT4 风格的域控制器
- NT4 风格的域成员.请注意,红帽继续支持后台使用的主域控制器(PDC)功能 IdM。
- 针对Samba 服务器的密码修改.您只能对 Active Directory 域控制器使用 Kerberos 进行密码修改。
以下特性没有在 FIPS 模式下测试,因此红帽不支持:
- 将 Samba 作为打印服务器来运行
1.17.2. 在 FIPS 模式下使用 Samba
您可以在运行 Samba 的 RHEL 主机上启用 FIPS 模式。
先决条件
- 在 Red Hat Enterprise Linux 主机上配置了Samba 。
- Samba 以 FIPS 模式支持的模式运行。
流程
在 RHEL 中启用 FIPS 模式:
# fips-mode-setup --enable
重启服务器:
# reboot
使用
testparm
工具来验证配置:# testparm -s
如果命令显示任何错误或不兼容,请修复它们以确保 Samba 正常工作。
1.18. 调整 Samba 服务器的性能
了解在某些情况下,哪些设置可以提高 Samba 的性能,以及哪些设置可能会对性能有负面影响。
本节的部分内容来自在 Samba Wiki 中发布的 Performance Tuning 文档。许可证: CC BY 4.0。作者和贡献者:请参阅 Wiki 页面上的历史选项卡。
先决条件
- Samba 被设置为文件或打印服务器
1.18.1. 设置 SMB 协议版本
每个新的 SMB 版本都添加了特性并提高了协议的性能。最新的 Windows 和 Windows 服务器操作系统始终支持最新的协议版本。如果 Samba 也使用最新的协议版本,那么连接到 Samba 的 Windows 客户端将从性能改进中受益。在 Samba 中,server max protocol的默认值被设置为最新支持的稳定的 SMB 协议版本。
要始终拥有最新的稳定的 SMB 协议版本,请不要设置 server max protocol
参数。如果手动设置参数,则需要修改 SMB 协议的每个新版本的设置,以便启用最新的协议版本。
以下流程解释了如何对 server max protocol
参数使用默认值。
步骤
-
从
/etc/samba/smb.conf
文件的[global]
部分中删除server max protocol
参数。 重新载入 Samba 配置
# smbcontrol all reload-config
1.18.3. 可能会对性能造成负面影响的设置
默认情况下,Red Hat Enterprise Linux 中的内核会根据高网络性能进行了微调。例如,内核对缓冲区大小使用自动轮询机制。在 /etc/samba/smb.conf
文件中设置 socket options
参数会覆盖这些内核设置。因此,设置此参数会在大多数情况下降低 Samba 网络性能。
要使用内核的优化的设置,请从 /etc/samba/smb.conf
中的 [global]
部分删除 socket options
参数。
1.19. 将 Samba 配置为与需要 SMB 版本低于默认版本的客户端兼容
Samba 对它支持的最小服务器消息块(SMB)版本使用合理的安全默认值。但是,如果您的客户端需要较旧的 SMB 版本,您可以配置 Samba 来支持它。
1.19.1. 设置 Samba 服务器支持的最小 SMB 协议版本
在 Samba 中,/etc/samba/smb.conf
文件中的 server min protocol
参数定义了 Samba 服务器支持的最小服务器消息块(SMB)协议版本。您可以更改最小 SMB 协议版本。
默认情况下,RHEL 8.2 及之后版本上的 Samba 只支持 SMB2 和更新的协议版本。红帽建议不要使用已弃用的 SMB1 协议。但是,如果您的环境需要 SMB1,您可以手动将 server min protocol
参数设置为 NT1
来重新启用 SMB1。
先决条件
- 已安装并配置 Samba。
流程
编辑
/etc/samba/smb.conf
文件,添加server min protocol
参数,并将参数设置为服务器应支持的最小 SMB 协议版本。例如,要将 SMB 协议的最小版本设置为SMB3
,请添加:server min protocol = SMB3
重启
smb
服务:# systemctl restart smb
其它资源
-
smb.conf(5)
手册页
1.20. 经常使用 Samba 命令行工具
本章论述了使用 Samba 服务器时经常使用的命令。
1.20.1. 使用 net ads join 和 net rpc join 命令
使用 net
工具的 join
子命令,您可以将 Samba 加入到 AD 或 NT4 域。要加入域,您必须手动创建 /etc/samba/smb.conf
文件,并有选择地更新其他配置,如 PAM。
红帽建议使用 realm
工具来加入域。realm
工具自动更新所有涉及的配置文件。
流程
使用以下设置手动创建
/etc/samba/smb.conf
文件:对于 AD 域成员:
[global] workgroup = domain_name security = ads passdb backend = tdbsam realm = AD_REALM
对于 NT4 域成员:
[global] workgroup = domain_name security = user passdb backend = tdbsam
-
为
*
默认域和要加入到/etc/samba/smb.conf
文件中[global
] 部分的域添加 ID 映射配置。 验证
/etc/samba/smb.conf
文件:# testparm
以域管理员身份加入域:
加入 AD 域:
# net ads join -U "DOMAIN\administrator"
要加入 NT4 域:
# net rpc join -U "DOMAIN\administrator"
将
winbind
源追加到/etc/nsswitch.conf
文件中的passwd
和group
数据库条目中:passwd: files
winbind
group: fileswinbind
启用并启动
winbind
服务:# systemctl enable --now winbind
(可选)使用
authselect
工具来配置 PAM。详情请查看
authselect(8)
手册页。另外,对于 AD 环境,配置 Kerberos 客户端。
详情请查看您的 Kerberos 客户端文档。
其它资源
1.20.2. 使用 net rpc right 命令
在 Windows 中,您可以为帐户和组分配特权来执行特殊操作,如对共享设置 ACL 或上传打印机驱动程序。在 Samba 服务器上,您可以使用 net rpc permissions
命令来管理特权。
列出您可以设置的权限
若要列出所有可用的特权及其所有者,可使用 net rpc permissions list
命令。例如:
# net rpc rights list -U "DOMAIN\administrator" Enter DOMAIN\administrator's password: SeMachineAccountPrivilege Add machines to domain SeTakeOwnershipPrivilege Take ownership of files or other objects SeBackupPrivilege Back up files and directories SeRestorePrivilege Restore files and directories SeRemoteShutdownPrivilege Force shutdown from a remote system SePrintOperatorPrivilege Manage printers SeAddUsersPrivilege Add users and groups to the domain SeDiskOperatorPrivilege Manage disk shares SeSecurityPrivilege System security
授予权限
若要为帐户或组赋予特权,可使用 net rpc rights grant
命令。
例如,将SePrintOperatorPrivilege
特权赋予 DOMAIN\printadmin
组 :
# net rpc rights grant "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator" Enter DOMAIN\administrator's password: Successfully granted rights.
撤销权限
若要从帐户或组撤销特权,可使用 net rpc rights revoke
命令。
例如,要对DOMAIN\printadmin
组撤销 SePrintOperatorPrivilege
特权:
# net rpc rights remoke "DOMAIN\printadmin" SePrintOperatorPrivilege -U "DOMAIN\administrator" Enter DOMAIN\administrator's password: Successfully revoked rights.
1.20.4. 使用 net user 命令
net user
命令允许您在 AD DC 或 NT4 PDC 中执行以下操作:
- 列出所有用户帐户
- 添加用户
- 删除用户
只有在列出域用户帐户时,才需要指定连接方法,如 AD 域的ads
或 NT4 域的rpc
。其他用户相关的子命令可以自动探测连接方法。
将 -U user_name
参数传给命令,以指定允许执行所请求的操作的用户。
列出域用户帐户
列出 AD 域中的所有用户:
# net ads user -U "DOMAIN\administrator"
列出 NT4 域中的所有用户:
# net rpc user -U "DOMAIN\administrator"
在域中添加用户帐户
在 Samba 域成员中,您可以使用 net user add
命令将用户帐户添加到域。
例如,将 user
账户添加到域:
添加帐户:
# net user add user password -U "DOMAIN\administrator" User user added
(可选)使用远程过程调用(RPC)shell 来启用 AD DC 或 NT4 PDC 中的帐户。例如:
# net rpc shell -U DOMAIN\administrator -S DC_or_PDC_name Talking to domain DOMAIN (S-1-5-21-1424831554-512457234-5642315751) net rpc>
user edit disabled user: no
Set user's disabled flag from [yes] to [no] net rpc>exit
从域中删除用户帐户
对于 Samba 域成员,您可以使用 net user delete
命令从域中删除用户帐户。
例如,从域中删除 user
账户:
# net user delete user -U "DOMAIN\administrator" User user deleted
1.20.5. 使用 rpcclient 工具
The rpcclient
工具可让您在本地或远程 SMB 服务器上手动执行客户端 Microsoft 远程过程调用(MS-RPC)功能。但是,大部分特性都已集成到 Samba 提供的单独工具中。使用 rpcclient
只用于测试 MS-PRC 功能。
先决条件
-
samba-client
软件包已安装。
例子
例如,您可以使用 rpcclient
工具来:
管理打印机假脱机子系统(SPOOLSS)。
例 1.7. 将驱动程序分配给打印机
# rpcclient server_name -U "DOMAIN\administrator" -c 'setdriver "printer_name" "driver_name"' Enter DOMAIN\administrators password: Successfully set printer_name to driver driver_name.
检索有关 SMB 服务器的信息。
例 1.8. 列出所有文件共享和共享的打印机
# rpcclient server_name -U "DOMAIN\administrator" -c 'netshareenum' Enter DOMAIN\administrators password: netname: Example_Share remark: path: C:\srv\samba\example_share\ password: netname: Example_Printer remark: path: C:\var\spool\samba\ password:
使用安全帐户管理器远程(SAMR)协议来执行操作。
例 1.9. 在 SMB 服务器中列出用户
# rpcclient server_name -U "DOMAIN\administrator" -c 'enumdomusers' Enter DOMAIN\administrators password: user:[user1] rid:[0x3e8] user:[user2] rid:[0x3e9]
如果您针对独立服务器或域成员运行命令,它将列出本地数据库中的用户。针对 AD DC 或 NT4 PDC 运行命令列出域用户。
其它资源
-
rpcclient(1)
手册页
1.20.6. 使用 samba-regedit 应用程序
某些设置(如打印机配置)存储在 Samba 服务器上的注册表中。您可以使用基于 ncurses 的 samba-regedit
应用程序来编辑 Samba 服务器的注册表。
先决条件
-
samba-client
软件包已安装。
流程
要启动应用程序,请输入:
# samba-regedit
使用以下键:
- 上键和下键:在注册表树和值中进行导航。
- Enter:打开关键字或编辑值。
-
选项卡 :在
Key
和Value
窗格间切换。 - Ctrl+C:关闭应用程序。
1.20.7. 使用 smbcontrol 工具
smbcontrol
工具允许您向 smbd
、nmbd
、winbindd 或
所有这些服务发送命令消息。这些控制消息指示服务重新载入其配置。
先决条件
-
samba-common-tools
软件包已安装。
流程
-
通过将
reload-config
消息类型发送给所有
目的地,来重新载入smbd
、nmbd
、winbindd
服务的配置:
# smbcontrol all reload-config
其它资源
-
smbcontrol(1)
手册页
1.20.8. 使用 smbpasswd 工具
smbpasswd
工具管理本地 Samba 数据库中的用户帐户和密码。
先决条件
-
samba-common-tools
软件包已安装。
流程
如果您以用户身份运行命令,
smbpasswd
将修改运行命令的用户的 Samba 密码。例如:[user@server ~]$ smbpasswd New SMB password: password Retype new SMB password: password
如果以
root
用户身份运行smbpasswd
,例如,您可以使用该工具来:创建一个新用户:
[root@server ~]# smbpasswd -a user_name New SMB password:
password
Retype new SMB password:password
Added user user_name.注意在将用户添加到 Samba 数据库之前,您必须先在本地操作系统中创建帐户。请参阅配置基本系统设置指南中的 从命令行添加新用户 部分。
启用 Samba 用户:
[root@server ~]# smbpasswd -e user_name Enabled user user_name.
禁用 Samba 用户:
[root@server ~]# smbpasswd -x user_name Disabled user user_name
删除用户:
[root@server ~]# smbpasswd -x user_name Deleted user user_name.
其它资源
-
smbpasswd(8)
手册页
1.20.9. 使用 smbstatus 工具
smbstatus
工具报告,关于:
-
每个
smbd
守护进程的每个 PID 到 Samba 服务器的连接。此报告包括用户名、主组群、SMB 协议版本、加密和签名信息。 -
每个 Samba 共享的连接。此报告包括
smbd
守护进程的 PID、连接机器的 IP、连接建立的时间戳、加密和签名信息。 - 锁定文件列表。报告条目包括更多详情,如 Opportunistic lock(oplock)类型
先决条件
-
samba
软件包已安装。 -
smbd
服务在运行。
流程
# smbstatus Samba version 4.15.2 PID Username Group Machine Protocol Version Encryption Signing ....------------------------------------------------------------------------------------------------------------------------- 963 DOMAIN\administrator DOMAIN\domain users client-pc (ipv4:192.0.2.1:57786) SMB3_02 - AES-128-CMAC Service pid Machine Connected at Encryption Signing: ....--------------------------------------------------------------------------- example 969 192.0.2.1 Thu Nov 1 10:00:00 2018 CEST - AES-128-CMAC Locked files: Pid Uid DenyMode Access R/W Oplock SharePath Name Time ....-------------------------------------------------------------------------------------------------------- 969 10000 DENY_WRITE 0x120089 RDONLY LEASE(RWH) /srv/samba/example file.txt Thu Nov 1 10:00:00 2018
其它资源
-
smbstatus(1)
手册页
1.20.10. 使用 smbtar 工具
smbtar
工具备份 SMB 共享的内容或其子目录,并将内容存储在 tar
存档中。或者,您可以将内容写入磁带设备。
先决条件
-
samba-client
软件包已安装。
流程
使用以下命令备份
//server/example/
共享中demo
目录的内容,并将内容存储在/root/example.tar
归档中:# smbtar -s server -x example -u user_name -p password -t /root/example.tar
其它资源
-
smbtar(1)
手册页
1.20.11. 使用 wbinfo 工具
wbinfo
工具查询并返回 winbindd
服务创建和使用的信息。
先决条件
-
samba-winbind-clients
软件包已安装。
流程
例如,您可以使用 wbinfo
来:
列出域用户:
# wbinfo -u AD\administrator AD\guest ...
列出域组:
# wbinfo -g AD\domain computers AD\domain admins AD\domain users ...
显示用户的 SID:
# wbinfo --name-to-sid="AD\administrator" S-1-5-21-1762709870-351891212-3141221786-500 SID_USER (1)
显示域和信任的信息:
# wbinfo --trusted-domains --verbose Domain Name DNS Domain Trust Type Transitive In Out BUILTIN None Yes Yes Yes server None Yes Yes Yes DOMAIN1 domain1.example.com None Yes Yes Yes DOMAIN2 domain2.example.com External No Yes Yes
其它资源
-
wbinfo(1)
手册页
1.21. 其它资源
-
smb.conf(5)
手册页 -
/usr/share/docs/samba-version/
目录包含 Samba 项目提供的通用文档,脚本示例和 LDAP 架构文件 - 设置 Samba 和 Clustered Trivial Database (CDTB)以共享存储在 GlusterFS 卷上的目录
- 在 Red Hat Enterprise Linux 中挂载 SMB 共享
第 2 章 部署 NFS 服务器
通过使用网络文件系统(NFS)协议,远程用户可以通过网络挂载共享目录,并像它们是本地挂载的那样使用它们。这可让您将资源整合到网络的集中服务器中。
2.1. 次 NFSv4 版本的主要功能
每个次 NFSv4 版本均带来了旨在提高性能和安全的增强。使用这些改进来充分利用 NFSv4 的潜力,确保网络之间高效且可靠的文件共享。
NFSv4.2 的主要功能
- 服务器端复制
- 服务器端复制是 NFS 服务器在服务器上复制文件,而无需通过网络来回传输数据的一种能力。
- 稀疏文件
- 使文件有一个或多个空白或间隙,它们是仅由零组成的未分配或未初始化的数据块。这使应用程序可以在稀疏文件中映射出孔的位置。
- 保留空间
- 在写数据前,客户端可以在存储服务器上保留或分配空间。这防止服务器耗尽空间。
- 标记的 NFS
- 强制实施数据访问权限,并为 NFS 文件系统上的各个文件在客户端和服务器之间启用 SELinux 标签。
- 布局增强
- 提供了使并行 NFS (pNFS)服务器收集更好的性能统计信息的功能。
NFSv4.1 的主要功能
- 对 pNFS 的客户端支持
- 对集群服务器高速 I/O 的支持,可让您在多台机器上存储数据,来提供对数据的直接访问,以及对元数据的同步更新。
- 会话
- 会话维护相对于属于客户端连接的服务器的状态。这些会话通过减少与为每个远程过程调用(RPC)操作建立和终止连接关联的开销,提供了改进的性能和效率。
NFSv4.0 的主要功能
- RPC 和安全性
-
RPCSEC_GSS
框架增强了 RPC 安全性。NFSv4 协议为带内安全协商引入了一个新操作。这可让客户端查询服务器策略,来安全地访问文件系统资源。 - 流程和操作结构
-
NFS 4.0 引入了
COMPOUND
流程,它允许客户端将多个操作合并为一个请求,来减少 RPC。 - 文件系统模型
NFS 4.0 保留分层的文件系统模型,将文件视为字节流,并使用 UTF-8 对名称进行编码以实现国际化。
文件处理类型
使用易失性文件句柄,服务器可以根据需要对文件系统更改进行调整,并使客户端能够适应,而无需永久的文件句柄。
属性类型
文件属性结构包括 required, recommended, 和 named 属性,各自有不同的目的。从 NFSv3 派生的 required 属性对于区分文件类型至关重要,而 recommended 属性(如 ACL)提供增强的访问控制。
多服务器命名空间
命名空间跨多个服务器,根据属性、支持引用、冗余和无缝服务器迁移简化文件系统传输。
- OPEN 和 CLOSE 操作
- 这些操作可在一个点上组合文件查找、创建和语义共享,并使文件访问管理更高效。
- 文件锁定
- 文件锁定是协议的一部分,消除了对 RPC 回调的需求。文件锁定状态由服务器在基于租期的模式下管理的,其中无法续订租期可能导致服务器释放状态。
- 客户端缓存和委托
- 缓存与之前的版本类似,具有客户端决定属性和目录缓存的超时。NFS 4.0 中的委派允许服务器将某些职责分配给客户端,保证特定的文件共享语义,并在没有立即服务器交互的情况下启用本地文件操作。
2.2. AUTH_SYS 身份验证方法
AUTH_SYS
方法(也称为 AUTH_UNIX
)是一种客户端身份验证机制。使用 AUTH_SYS
,客户端向服务器发送用户的用户 ID (UID)和组 ID (GID),来在访问文件时验证其身份和权限。它被视为不太安全,因为它依赖于客户端提供的信息,使得在错误配置时容易受到未经授权的访问。
映射机制可确保 NFS 客户端在服务器上可以访问具有合适权限的文件,即使系统间的 UID 和 GID 分配有所不同。UID 和 GID 是使用以下机制在 NFS 客户端和服务器间进行映射的:
- 直接映射
UID 和 GID 直接由 NFS 服务器和本地及远程系统之间的客户端进行映射。这需要在所有参与 NFS 文件共享的系统上进行一致的 UID 和 GID 分配。例如,客户端上 UID 为 1000 的用户只能访问服务器上 UID 为 1000 的用户有权限访问的共享上的文件。
对于 NFS 环境中简化的 ID 管理,管理员通常依赖集中服务,如 LDAP 或网络信息服务(NIS)来管理跨多个系统的 UID 和 GID 映射。
- 用户和组 ID 映射
-
NFS 服务器和客户端可以使用
idmapd
服务在不同的系统间转换 UID 和 GID,以进行一致的识别和权限分配。
2.3. AUTH_GSS 身份验证方法
Kerberos 是一种网络身份验证协议,它允许通过非安全网络对客户端和服务器进行安全身份验证。它使用对称密钥加密,并需要一个可信密钥分发中心(KDC)来验证用户和服务。
与 AUTH_SYS
不同,使用 RPCSEC_GSS
Kerberos 机制,服务器不依赖于客户端就可正确表示哪个用户正在访问文件。相反,加密用于向服务器验证用户的身份,这可防止恶意的客户端在没有用户的 Kerberos 凭据的情况下模拟该用户。
在 /etc/exports
文件中,sec
选项定义一个或多个共享应提供的 Kerberos 安全性的方法,并且客户端可以通过以下方法之一挂载共享。sec
选项支持以下值:
-
sys
: 无加密保护(默认) -
krb5
:仅用于验证 -
krb5i
: 身份验证和完整性保护 -
krb5p
:身份验证、完整性检查和流量加密
请注意,方法提供的加密功能越多,性能越低。
2.4. 导出的文件系统上的文件权限
导出的文件系统上的文件权限决定了对客户端通过 NFS 访问它们的文件和目录的访问权限。
远程主机挂载了 NFS 文件系统后,每个共享文件所拥有的唯一保护是其文件系统权限。如果共享同一用户 ID (UID)值的两个用户在不同的客户端系统上挂载相同的 NFS 文件系统,则他们可以修改彼此的文件。
NFS 将客户端上的 root
用户视为与服务器上的 root
用户相同。但是,默认情况下,在访问 NFS 共享时,NFS 服务器将 root
映射为 nobody
帐户。root_squash
选项控制此行为。
其它资源
-
exports(5)
手册页
2.5. NFS 服务器上需要的服务
Red Hat Enterprise Linux (RHEL)使用内核模块和用户空间进程的组合来提供 NFS 文件共享:
服务名称 | NFS 版本 | 描述 |
---|---|---|
| 3, 4 | 为请求共享 NFS 文件系统提供服务的 NFS 内核模块。 |
| 3 |
这个进程接受来自本地远程过程调用(RPC)服务的端口保留,使其可用或被宣传出去,允许相应的远程 RPC 服务访问它们。 |
| 3, 4 |
此服务处理来自 NFSv3 客户端的 它检查请求的 NFS 共享是否当前由 NFS 服务器导出,是否允许客户端访问它。 |
| 3, 4 | 这个进程通告显式的 NFS 版本和服务器定义的协议。它与内核合作来满足 NFS 客户端的动态需求,例如在每次 NFS 客户端连接时提供服务器线程。
|
| 3 | 这个内核模块实现 Network Lock Manager (NLM)协议,它允许客户端锁定服务器上的文件。当 NFS 服务器运行时,RHEL 自动加载模块。 |
| 3, 4 | 此服务为远程用户提供用户配额信息。 |
| 4 | 这个进程提供 NFSv4 客户端和服务器的向上调用,其在 NFSv4 名称('user@domain' 形式的字符串)和本地用户和组 ID 之间进行映射。 |
| 3, 4 |
此服务代表 |
| 4 | 此服务提供 NFSv4 客户端跟踪守护进程,当其它客户端在网络分区与服务器重启结合期间获取冲突锁时,该守护进程防止服务器授予锁回收。 |
| 3 | 此服务在本地主机重启时向其他 NFSv3 客户端提供通知,当在远程 NFSv3 主机重启时,向内核提供通知。 |
其它资源
-
rpcbind (8)
,rpc.mountd (8)
,rpc.nfsd (8)
,rpc.statd (8)
,rpc.rquotad (8)
,rpc.idmapd (8)
,gssproxy (8)
,nfsdcld (8)
,rpc.statd (8)
手册页
2.6. /etc/exports 配置文件
/etc/exports
文件控制服务器导出哪些目录。每行包含一个导出点、允许挂载目录的空格分开的客户端的列表,以及每个客户端的选项:
<directory> <host_or_network_1>(<options_1>) <host_or_network_n>(<options_n>)...
以下是 /etc/exports
条目的各个部分:
- <export>
- 要导出的目录。
- <host_or_network>
- 共享要导出到的主机或网络。例如,您可以指定主机名、IP 地址或 IP 网络。
- <options>
- 主机或网络的选项。
在客户端和服务器选项之间添加一个空格,更改行为。例如,以下行没有同样的含义:
/projects client.example.com(rw) /projects client.example.com (rw)
在第一行中,服务器只允许 client.example.com
以读写模式挂载 /projects
目录,而其他主机不能挂载共享。但是,由于第二行中 client.example.com
和 (rw)
之间的空格,服务器以只读模式(默认设置)将目录导出到 client.example.com
,但所有其他主机可以以读写模式挂载共享。
NFS 服务器对每个导出的目录使用以下默认设置:
默认设置 | 描述 |
---|---|
| 以只读模式导出目录。 |
| 在将之前请求所做的更改写入磁盘之前,NFS 服务器不会回复请求。 |
| 如果服务器怀疑有另一个写请求待处理,则它会延迟写入到磁盘。 |
|
防止客户端上的 |
2.7. 配置只使用 NFSv4 的服务器
如果您的网络中没有任何 NFSv3 客户端,则您可以配置 NFS 服务器,以只支持 NFSv4 或其特定的次协议版本。在服务器上仅使用 NFSv4 可减少向网络开放的端口数量。
流程
安装
nfs-utils
软件包:# dnf install nfs-utils
编辑
/etc/nfs.conf
文件,并进行以下更改:在
[nfsd]
部分中禁用vers3
参数来禁用 NFSv3:[nfsd] vers3=n
可选:如果您只需要特定的 NFSv4 次版本,请取消所有
vers4.<minor_version>
参数的注释,并相应地设置它们,例如:[nfsd] vers3=n # vers4=y vers4.0=n vers4.1=n vers4.2=y
使用这个配置,服务器仅提供 NFS 版本 4.2。
重要如果您只需要特定的 NFSv4 次版本,则只为次版本设置参数。不要取消
vers4
参数的注释,以避免不可预测地激活或停用次版本。默认情况下,vers4
参数启用或禁用所有 NFSv4 次版本。但是,如果您将vers4
与其他vers
参数一起设置了,则此行为会改变。
禁用所有与 NFSv3 相关的服务:
# systemctl mask --now rpc-statd.service rpcbind.service rpcbind.socket
将
rpc.mountd
守护进程配置为不侦听 NFSv3 挂载请求。使用以下内容创建/etc/systemd/system/nfs-mountd.service.d/v4only.conf
文件:[Service] ExecStart= ExecStart=/usr/sbin/rpc.mountd --no-tcp --no-udp
重新加载
systemd
管理器配置,并重启nfs-mountd
服务:# systemctl daemon-reload # systemctl restart nfs-mountd
可选:创建一个您要共享的目录,例如:
# mkdir -p /nfs/projects/
如果要共享一个现有的目录,请跳过这一步。
对
/nfs/projects/
目录设置您需要的权限:# chmod 2770 /nfs/projects/ # chgrp users /nfs/projects/
这些命令在
/nfs/projects/
目录上为users
组设置写权限,并确保对此目录中创建的新条目自动设置同样的组。对您要共享的每个目录添加一个到
/etc/exports
文件的导出点:/nfs/projects/ 192.0.2.0/24(rw) 2001:db8::/32(rw)
此条目共享
/nfs/projects/
目录,以使192.0.2.0/24
和2001:db8::/32
子网中的客户端具有读和写访问权限。在
firewalld
中打开相关端口:# firewall-cmd --permanent --add-service nfs # firewall-cmd --reload
启用并启动 NFS 服务器:
# systemctl enable --now nfs-server
验证
在服务器上,验证服务器是否只提供您配置的 NFS 版本:
# cat /proc/fs/nfsd/versions -3 +4 -4.0 -4.1 +4.2
在客户端上,执行以下步骤:
安装
nfs-utils
软件包:# dnf install nfs-utils
挂载一个导出的 NFS 共享:
# mount server.example.com:/nfs/projects/ /mnt/
以是
users
组成员的用户身份,在/mnt/
中创建一个文件:# touch /mnt/file
列出目录,以验证该文件是否被创建:
# ls -l /mnt/ total 0 -rw-r--r--. 1 demo users 0 Jan 16 14:18 file
2.8. 配置一个具有可选的 NFSv4 支持的 NFSv3 服务器
在仍然使用 NFSv3 客户端的网络中,将服务器配置为使用 NFSv3 协议提供共享。如果您的网络中还有较新的客户端,您还可以启用 NFSv4。默认情况下,Red Hat Enterprise Linux NFS 客户端使用服务器提供的最新 NFS 版本。
流程
安装
nfs-utils
软件包:# dnf install nfs-utils
可选:默认启用 NFSv3 和 NFSv4。如果您不需要 NFSv4 或只需要特定的次版本,取消所有
vers4.<minor_version>
参数的注释,并相应地设置它们:[nfsd] # vers3=y # vers4=y vers4.0=n vers4.1=n vers4.2=y
使用这个配置,服务器仅提供 NFS 版本 3 和 4.2。
重要如果您只需要特定的 NFSv4 次版本,则只为次版本设置参数。不要取消
vers4
参数的注释,以避免不可预测地激活或停用次版本。默认情况下,vers4
参数启用或禁用所有 NFSv4 次版本。但是,如果您将vers4
与其他vers
参数一起设置了,则此行为会改变。默认情况下,NFSv3 RPC 服务使用随机端口。要启用防火墙配置,请在
/etc/nfs.conf
文件中配置固定的端口号:在
[lockd]
部分中,为nlockmgr
RPC 服务设置固定的端口号,例如:[lockd] port=5555
使用这个设置,服务自动对 UDP 和 TCP 协议使用此端口号。
在
[statd]
部分中,为rpc.statd
服务设置固定的端口号,例如:[statd] port=6666
使用这个设置,服务自动对 UDP 和 TCP 协议使用此端口号。
可选:创建一个您要共享的目录,例如:
# mkdir -p /nfs/projects/
如果要共享一个现有的目录,请跳过这一步。
对
/nfs/projects/
目录设置您需要的权限:# chmod 2770 /nfs/projects/ # chgrp users /nfs/projects/
这些命令在
/nfs/projects/
目录上为users
组设置写权限,并确保对此目录中创建的新条目自动设置同样的组。对您要共享的每个目录添加一个到
/etc/exports
文件的导出点:/nfs/projects/ 192.0.2.0/24(rw) 2001:db8::/32(rw)
此条目共享
/nfs/projects/
目录,以使192.0.2.0/24
和2001:db8::/32
子网中的客户端具有读和写访问权限。在
firewalld
中打开相关端口:# firewall-cmd --permanent --add-service={nfs,rpc-bind,mountd} # firewall-cmd --permanent --add-port={5555/tcp,5555/udp,6666/tcp,6666/udp} # firewall-cmd --reload
启用并启动 NFS 服务器:
# systemctl enable --now rpc-statd nfs-server
验证
在服务器上,验证服务器是否只提供您配置的 NFS 版本:
# cat /proc/fs/nfsd/versions +3 +4 -4.0 -4.1 +4.2
在客户端上,执行以下步骤:
安装
nfs-utils
软件包:# dnf install nfs-utils
挂载一个导出的 NFS 共享:
# mount -o vers=<version> server.example.com:/nfs/projects/ /mnt/
验证是否使用指定的 NFS 版本挂载了共享:
# mount | grep "/mnt" server.example.com:/nfs/projects/ on /mnt type nfs (rw,relatime,vers=3,...
以是
users
组成员的用户身份,在/mnt/
中创建一个文件:# touch /mnt/file
列出目录,以验证该文件是否被创建:
# ls -l /mnt/ total 0 -rw-r--r--. 1 demo users 0 Jan 16 14:18 file
2.9. 在 NFS 服务器上启用配额支持
如果要限制用户或组群可以存储的数据量,您可以在文件系统上配置配额。在 NFS 服务器上,rpc-rquotad
服务确保配额也应用于 NFS 客户端上的用户。
流程
验证是否已在您导出的目录上启用了配额:
对于 ext 文件系统,请输入:
# quotaon -p /nfs/projects/ group quota on /nfs/projects (/dev/sdb1) is on user quota on /nfs/projects (/dev/sdb1) is on project quota on /nfs/projects (/dev/sdb1) is off
对于 XFS 文件系统,请输入:
# findmnt /nfs/projects TARGET SOURCE FSTYPE OPTIONS /nfs/projects /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota,grpquota
安装
quota-rpc
软件包:# dnf install quota-rpc
可选。默认情况下,配额 RPC 服务在端口 875 上运行。如果要在不同的端口上运行服务,请将
-p <port_number>
附加到/etc/sysconfig/rpc-rquotad
文件中的RPCRQUOTADOPTS
变量中:RPCRQUOTADOPTS="-p __<port_number>__"
可选:默认情况下,远程主机只能读取配额。要允许客户端设置配额,请将
-S
选项附加到/etc/sysconfig/rpc-rquotad
文件中的RPCRQUOTADOPTS
变量中:RPCRQUOTADOPTS="-S"
在
firewalld
中打开端口:# firewall-cmd --permanent --add-port=875/udp # firewall-cmd --reload
启用并启动
rpc-rquotad
服务:# systemctl enable --now rpc-rquotad
验证
在客户端中:
挂载导出的共享:
# mount server.example.com:/nfs/projects/ /mnt/
显示配额。命令取决于导出的目录的文件系统。例如:
要显示所有挂载的 ext 文件系统上特定用户的配额,请输入:
# quota -u <user_name> Disk quotas for user demo (uid 1000): Filesystem space quota limit grace files quota limit grace server.example.com:/nfs/projects 0K 100M 200M 0 0 0
要显示 XFS 文件系统上用户和组配额,请输入:
# xfs_quota -x -c "report -h" /mnt/ User quota on /nfs/projects (/dev/vdb1) Blocks User ID Used Soft Hard Warn/Grace ---------- --------------------------------- root 0 0 0 00 [------] demo 0 100M 200M 00 [------]
其它资源
-
quota (1)
手册页 -
xfs_quota(8)
手册页
2.10. 在 NFS 服务器上启用通过 RDMA 的 NFS
远程直接内存访问(RDMA)是一种协议,它允许客户端系统将数据直接从存储服务器的内存传输到其自己的内存中。这提高了存储吞吐量,减少了服务器和客户端之间数据传输的延迟,并降低了两端的 CPU 负载。如果 NFS 服务器和客户端是通过 RDMA 连接的,则客户端可以使用 NFSoRDMA 挂载导出的目录。
先决条件
- NFS 服务正在运行且已配置
- InfiniBand 或 RDMA over Converged Ethernet (RoCE)设备已安装在服务器上。
- IP over InfiniBand (IPoIB)已在服务器上配置,InfiniBand 设备分配了一个 IP 地址。
流程
安装
rdma-core
软件包:# dnf install rdma-core
如果软件包已安装,请验证
/etc/rdma/modules/rdma.conf
文件中的xprtrdma
和svcrdma
模块是否已取消注释:# NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma
可选。默认情况下,RDMA 上的 NFS 使用端口 20049。如果要使用不同的端口,请在
/etc/nfs.conf
文件的[nfsd]
部分中设置rdma-port
设置:rdma-port=<port>
在
firewalld
中打开 NFSoRDMA 端口:# firewall-cmd --permanent --add-port={20049/tcp,20049/udp} # firewall-cmd --reload
如果您设置了与 20049 不同的端口,请调整端口号。
重启
nfs-server
服务:# systemctl restart nfs-server
验证
在带有 InfiniBand 硬件的客户端上执行以下步骤:
安装以下软件包:
# dnf install nfs-utils rdma-core
通过 RDMA 挂载导出的 NFS 共享:
# mount -o rdma server.example.com:/nfs/projects/ /mnt/
如果您设置了与默认端口号(20049)不同的端口,请将
port=<port_number>
传给命令:# mount -o rdma,port=<port_number> server.example.com:/nfs/projects/ /mnt/
验证共享是否已使用
rdma
选项挂载了:# mount | grep "/mnt" server.example.com:/nfs/projects/ on /mnt type nfs (...,proto=rdma,...)
2.11. 在 Red Hat Identity Management 域中使用 Kerberos 建立一个 NFS 服务器
如果您使用 Red Hat Identity Management (IdM),您可以将 NFS 服务器加入到 IdM 域中。这可让您集中管理用户和组,并使用 Kerberos 进行身份验证、完整性保护和流量加密。
先决条件
- NFS 服务器在 Red Hat Identity Management (IdM)域中 已注册。
- NFS 服务器正在运行并已配置。
流程
以 IdM 管理员身份获取 kerberos 票据:
# kinit admin
创建一个
nfs/<FQDN>
服务主体:# ipa service-add nfs/nfs_server.idm.example.com
从 IdM 检索
nfs
服务主体,并将其存储在/etc/krb5.keytab
文件中:# ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab
可选:显示
/etc/krb5.keytab
文件中的主体:# klist -k /etc/krb5.keytab Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 1 nfs/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM 7 host/nfs_server.idm.example.com@IDM.EXAMPLE.COM
默认情况下,当您将主机加入到 IdM 域时,IdM 客户端会将主机主体添加到
/etc/krb5.keytab
文件中。如果缺少主机主体,请使用ipa-getkeytab -s idm_server.idm.example.com -p host/nfs_server.idm.example.com -k /etc/krb5.keytab
命令添加它。使用
ipa-client-automount
工具配置 IdM ID 的映射:# ipa-client-automount Searching for IPA server... IPA server: DNS discovery Location: default Continue to configure the system with these values? [no]: yes Configured /etc/idmapd.conf Restarting sssd, waiting for it to become available. Started autofs
更新
/etc/exports
文件,并将 Kerberos 安全方法添加到客户端选项中。例如:/nfs/projects/ 192.0.2.0/24(rw,sec=krb5i)
如果您希望客户端可以从多个安全方法中选择,请使用冒号分割它们:
/nfs/projects/ 192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)
重新载入导出的文件系统:
# exportfs -r