3.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 和 |
3.4.1. 规划 Samba ID 范围 复制链接链接已复制到粘贴板!
无论您在 AD 中是否存储了 Linux UID 和 GID,还是将 Samba 配置为生成它们,每个域配置都需要一个唯一的 ID 范围,其不得与任何其他域重叠。
如果您设置了重叠 ID 范围,Samba 无法正常工作。
例 3.1. 唯一的 ID 范围
以下显示了默认(*
)、AD-DOM
和TRUST-DOM
域的非重叠 ID 映射范围。
每个域只能分配一个范围。因此,在域范围之间有足够的空间。这可让您在域扩展后扩展范围。
如果您稍后给某个域分配了一个不同的范围,那么之前由这些用户和组创建的文件和目录的所有权将会丢失。
3.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
idmap config * : backend = tdb idmap config * : range = 10000-999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 详情请查看 使用 TDB ID 映射后端。
autorid
当您将默认域配置为使用
autorid
后端时,为域添加额外的 ID 映射配置是可选的。例如,在
/etc/samba/smb.conf
文件中的[global]
部分中设置以下内容:idmap config * : backend = autorid idmap config * : range = 10000-999999
idmap config * : backend = autorid idmap config * : range = 10000-999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 详情请查看 使用 autorid ID 映射后端。
3.4.3. 使用 tdb ID 映射后端 复制链接链接已复制到粘贴板!
winbindd
服务默认使用可写的tdb
ID 映射后端来存储安全标识符(SID)、UID 以及 GID 映射表。这包括本地用户、组和内置主体。
仅将此后端用于*
默认域。例如:
idmap config * : backend = tdb idmap config * : range = 10000-999999
idmap config * : backend = tdb
idmap config * : range = 10000-999999
3.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 属性名称 | 对象类型 | 映射到 |
---|---|---|
| 用户和组群 | 用户和组名称,取决于对象 |
| 用户 | 用户 ID(UID) |
| 组 | 组 ID(GID) |
| 用户 | 用户 shell 的路径 |
| 用户 | 用户主目录的路径 |
| 用户 | 主组群 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
idmap config * : backend = tdb idmap config * : range = 10000-999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AD 域启用
ad
ID 映射后端:idmap config DOMAIN : backend = ad
idmap config DOMAIN : backend = ad
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置分配给 AD 域中用户和组的 ID 范围。例如:
idmap config DOMAIN : range = 2000000-2999999
idmap config DOMAIN : range = 2000000-2999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
当从AD读取属性时,使用RFC 2307模式来设置 Samba:
idmap config DOMAIN : schema_mode = rfc2307
idmap config DOMAIN : schema_mode = rfc2307
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要让 Samba 从对应的 AD 属性读取登录 shell 和用户主目录的路径,请设置:
idmap config DOMAIN : unix_nss_info = yes
idmap config DOMAIN : unix_nss_info = yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以设置适用于所有用户的统一的域范围的主目录路径和登录 shell。例如:
template shell = /bin/bash template homedir = /home/%U
template shell = /bin/bash template homedir = /home/%U
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,Samba 使用用户对象的
primaryGroupID
属性作为 Linux 上用户的主组。或者,您可以将 Samba 配置为使用gidNumber
属性中设置的值:idmap config DOMAIN : unix_primary_group = yes
idmap config DOMAIN : unix_primary_group = yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
/etc/samba/smb.conf
文件:testparm
# testparm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入 Samba 配置:
smbcontrol all reload-config
# smbcontrol all reload-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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
idmap config * : backend = tdb idmap config * : range = 10000-999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为域启用
rid
ID映射后端:idmap config DOMAIN : backend = rid
idmap config DOMAIN : backend = rid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置一个足够大的范围,以包括将来将要分配的所有RID。例如:
idmap config DOMAIN : range = 2000000-2999999
idmap config DOMAIN : range = 2000000-2999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Samba 会忽略此域中其RID不在范围内的用户和组。
重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
设置分配给所有映射用户的 shell 和主目录路径。例如:
template shell = /bin/bash template homedir = /home/%U
template shell = /bin/bash template homedir = /home/%U
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
/etc/samba/smb.conf
文件:testparm
# testparm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入 Samba 配置:
smbcontrol all reload-config
# smbcontrol all reload-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.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
idmap config * : backend = autorid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置一个足够大的范围来为所有现有和将来的对象分配 ID。例如:
idmap config * : range = 10000-999999
idmap config * : range = 10000-999999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Samba 忽略在此域中计算 ID 不在范围范围内的用户和组。
警告设置范围并开始使用 Samba 后,您只能增加范围的上限。对范围的任何其他变化都可能会导致分配新的 ID,从而会丢失文件的所有者信息。
可选:设置范围大小。例如:
idmap config * : rangesize = 200000
idmap config * : rangesize = 200000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Samba 会为每个域的对象分配这个连续的ID号,直到
idmap config * : range
参数中设置的范围内的所有ID分配完。注意如果设置了 rangesize,则需要相应地调整 range。range 必须是 rangesize 的倍数。
设置分配给所有映射用户的 shell 和主目录路径。例如:
template shell = /bin/bash template homedir = /home/%U
template shell = /bin/bash template homedir = /home/%U
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为域添加额外的 ID 映射配置。如果没有针对单个域的配置,Samba 则使用之前配置的
*
默认域中的autorid
后端设置来计算 ID。重要范围不得与这个服务器上的任何其他域配置重叠。此外,范围必须足够大,以便包含将来分配的所有 ID。详情请查看 规划 Samba ID 范围。
验证
/etc/samba/smb.conf
文件:testparm
# testparm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入 Samba 配置:
smbcontrol all reload-config
# smbcontrol all reload-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow