Samba中常见的 idmap后端

9 篇文章 0 订阅

在 SMB 协议中,用户、组和机器由它们的安全标识符 (SID) 表示。 在 POSIX 系统上,Samba 进程需要在相应的 POSIX 用户身份下运行,并带有补充 POSIX 组,以允许访问这些用户和组拥有的文件。 将 SID 映射到 POSIX 用户和组的过程称为 IDENTITY MAPPING 或简称 ID MAPPING。

Samba 支持多种方式将 SID 映射到 POSIX 用户和组。 该配置由idmap config DOMAIN : OPTION选项驱动,该选项允许单独为每个域指定身份映射 (idmap) 选项。

身份映射模块实现了将 SID 映射到 POSIX 用户和组身份的不同策略。 它们适用于不同的用例和场景。 建议在选择要使用的特定场景之前阅读各个身份映射模块的文档。 每个身份管理模块都记录在单独的手册页中。 标准的 idmap 后端是 tdb (idmap_tdb(8)), tdb2 (idmap_tdb2(8)), ldap (idmap_ldap(8)), rid (idmap_rid(8)), hash (idmap_hash(8)), autorid (idmap_autorid(8) ))、ad (idmap_ad(8))、nss (idmap_nss(8))rfc2307 (idmap_rfc2307(8))

总体而言,应谨慎决定 ID 映射配置。 对已部署的 ID 映射配置进行更改可能会造成无法访问数据或将数据泄露给错误方的风险。

idmap_rid - Samba中用于 Winbind 的 idmap_rid 后端

idmap_rid 后端提供了一种使用算法映射方案来映射 UIDs/GIDs 和 SIDs 的方法。 在这种情况下不需要数据库,因为映射是确定性的。

目前,每个应该使用idmap_rid后端的域都应该有一个明确的idmap配置,使用不相交的范围。

注意:idmap_rid 后端不能用作默认后端。 通常需要定义一个可写的默认 idmap 范围,使用可以创建 unix id 的 tdb 或 ldap 之类的后端,以便能够映射 BUILTIN sid 和其它域,并且还能够创建组映射。 请参见下面的示例。

IDMAP 选项

range = low - high

定义后端具有权威性的可用匹配 uid 和 gid 范围。 请注意,该范围充当过滤器。 如果算法确定的 UID 或 GID 超出范围,则忽略它们并丢弃相应的映射。 它旨在避免本地和远程之间意外的 UID/GID 重叠
定义的 ID。

base_rid = INTEGER

定义用于从 UID 或 GID 构建 SID 以及重新设置要从 SID 获取的 UID 或 GID 的基整数。 这意味着 RID 小于 base_rid 的 SID 将被过滤。 默认情况下根本不限制允许的rid,即 base_rid 值为 0。

不推荐使用此参数。

映射公式

RID的Unix ID是这样计算的:ID = RID - BASE_RID + LOW_RANGE_ID

相应地,计算给定Unix ID的RID的公式如下:RID = ID + BASE_RID - LOW_RANGE_ID

示例

此示例显示如何使用 idmap_rid 配置两个域,即主体域和受信任域,将默认 id 映射方案保留在 tdb。 该示例还演示了对受信任域使用 base_rid 参数。

        [global]
                security = domain
                workgroup = MAIN

                idmap config * : backend        = tdb
                idmap config * : range          = 1000000-1999999

                idmap config MAIN : backend     = rid
                idmap config MAIN : range       = 10000 - 49999

                idmap config TRUSTED : backend  = rid
                idmap config TRUSTED : range    = 50000 - 99999

idmap_ad - Samba中用于 Winbind 的idmap_ad后端

idmap_ad 插件为 Winbind 提供了一种从使用 RFC2307/SFU 模式扩展的 AD 服务器读取 id 映射的方法。 此模块仅实现“idmap”API,并且是只读的。 映射必须由管理员提前提供,方法是在 AD 中添加用户的 uidNumber 属性和组的 gidNumber 属性。 Winbind 将仅映射具有 uidNumber 且其主要组具有 gidNumber 属性集的用户。 但是,建议所有正在使用的组都分配了 gidNumber 属性,否则它们将不起作用。

目前,ad后端不能作为默认的 idmap 后端工作,但必须使用不相交的范围为每个想要使用它的域单独配置它。 通常需要配置一个可写的默认 idmap 范围,例如使用 tdb 或 ldap 后端,以便能够映射 BUILTIN sids 和可能的其它受信任域。 为了能够创建组映射,还需要可写的默认配置。 这个包罗万象的默认 idmap 配置应该有一个范围,该范围与任何带有 idmap 后端ad的明确配置的域都不相交。 请参见下面的示例。

IDMAP 选项

range = low - high

定义后端具有权威性的可用匹配 UID 和 GID 范围。 请注意,该范围充当过滤器。 如果指定了存储在 AD 中超出范围的任何 UID 或 GID,则将被忽略并丢弃相应的映射。 它旨在避免本地和远程定义的 ID 之间的意外 UID/GID 重叠。

schema_mode = <rfc2307 | sfu | sfu20>

定义 idmap_ad 在查询有关用户和组信息的 Active Directory 时应使用的schema(范式)。 这可以是 Windows 2003 R2 中包含的 RFC2307 schema(范式)支持,也可以是 Unix 服务 (SFU) schema(范式)。 对于 SFU 3.0 或 3.5 请选择“sfu”,对于 SFU 2.0 请选择“sfu20”。 请注意,主要组成员的行为由 unix_primary_group 选项控制。

unix_primary_group = yes/no

定义用户的主要组是从 SFU 属性还是从 AD 主要组中获取。 如果设置为 yes,则从 LDAP 属性 (gidNumber) 中获取主要组成员身份。 如果设置为 no,则通过primaryGroupIDLDAP 属性计算主要组成员身份。

默认值:no

unix_nss_info = yes/no

如果设置为 yes,winbind 将从 LDAP 属性中检索登录 shell 和主目录。 如果设置为 no 或 AD LDAP 条目缺少 SFU 属性,则使用选项template shell template homedir

默认值:no

示例

以下示例显示了如何从我们的主体和受信任的 AD 域中检索 idmapping。 如果存在受信任的域,则必须事先解决 id 冲突,此时不能保证顺序冲突的映射将得到解决。 此示例还展示了如何为本地 id 分配保留一个小的非冲突范围,该范围可用于 BUILTIN 等内部后端。

[global]
                workgroup = CORP

                idmap config * : backend = tdb
                idmap config * : range = 1000000-1999999

                idmap config CORP : backend  = ad
                idmap config CORP : range = 1000-999999

idmap_autorid - Samba中用于 Winbind 的idmap_autorid后端

idmap_autorid 后端提供了一种使用算法映射方案来映射 UID/GID 和 SID 的方法,该方法比 idmap_tdb 更具确定性,并且比 idmap_rid 更易于配置。

该模块的工作原理与idmap_rid类似,但它会自动配置每个域要使用的范围,因此不需要为林中的每个域指定特定范围,只需要配置用于用户/组映射的uid/GID范围和要使用的范围的可选大小。

哪个域映射到哪个范围的映射存储在 autorid.tdb 中,因此应该定期备份此数据库。

由于使用的算法,它是最容易使用的模块,因为它只需要最少的配置。

IDMAP 选项

range = low - high

定义后端具有权威性的可用匹配 uid 和 gid 范围。 请注意,该范围充当过滤器。 如果算法确定的 UID 或 GID 超出范围,则忽略它们并丢弃相应的映射。 它旨在避免本地和远程定义的 ID 之间意外的 UID/GID 重叠。

rangesize = numberofidsperdomain

定义每个域范围可用的 uids/gids 的数量。 所需的最小值为 2000。具有大于此值的 RID 的 SID 将根据可用范围的数量映射到扩展范围。 如果 autorid 后端用完可用范围,则忽略对新域(或已知域的新扩展范围)的映射请求,并丢弃相应的映射。

示例:rangesize 设置为 10000,RID 高达 10000 的用户/组将被放入域的第一个范围。 当尝试映射 RID 为 25000 的对象时,将分配一个扩展范围,然后将用于映射从 20000 到 29999 的所有 RID。

一个范围将用于本地用户和组以及非域知名 SID,例如Everyone (S-1-1-0) 或Creator Owner (S-1-3-0)。 选定的知名 SID 列表将在首次启动时预先分配,以便为这些 SID 创建确定性映射。

因此,可以创建的本地用户和组的数量也受此选项的限制。 如果您计划创建大量本地用户或组,则需要相应地设置此参数。

默认值: 100000。

read only = [ yes | no ]

将模块转为只读模式。 不会分配新的范围,也不会在 idmap 池中创建新的映射。

默认值:no。

ignore builtin = [ yes | no ]

忽略 BUILTIN 域的任何映射请求。

默认值:no。

映射公式

RID 的 Unix ID 是这样计算的:

ID = REDUCED RID + IDMAP RANGE LOW VALUE + RANGE NUMBER * RANGE SIZE

其中 REDUCED RID = RID % RANGE_SIZE 和 DOMAIN RANGE INDEX = RID / RANGE_SIZE 与域 sid 一起用于确定 RANGE NUMBER(存储在数据库中)。

相应地,计算给定 Unix ID 的 RID 的公式如下:

RID = (ID - LOW ID) % RANGE SIZE + DOMAIN RANGE INDEX * RANGE SIZE

其中,通过 RANGE NUMBER = (ID - LOW ID) / RANGE SIZE 从数据库中检索 DOMAIN RANGE INDEX 以及域 sid。

示例

此示例向您展示了适用于主体域和 19 个受信任域/范围扩展的最小配置。

   [global]
                security = ads
                workgroup = CUSTOMER
                realm = CUSTOMER.COM

                idmap config * : backend = autorid
                idmap config * : range = 1000000-1999999

此示例显示如何将 idmap_autorid 配置为具有潜在大量用户的所有域的默认配置,以及使用 SFU 映射方案的受信任域的特定配置。 请注意,idmap 范围和 sfu 范围不允许重叠。

  [global]
                security = ads
                workgroup = CUSTOMER
                realm = CUSTOMER.COM

                idmap config * : backend = autorid
                idmap config * : range = 1000000-19999999
                idmap config * : rangesize = 1000000

                idmap config TRUSTED : backend  = ad
                idmap config TRUSTED : range    = 50000 - 99999
                idmap config TRUSTED : schema_mode = sfu

idmap_hash- Samba中用于 Winbind 的idmap_hash后端

注意: 不要使用这个后端

不要使用这个插件

idmap_hash 插件实现了一种散列算法,用于将域用户和组的 SID 分别映射到 31 位 uid 和 gid。该插件还实现了 nss_info API,如果通过 smb.conf 中的winbind normalize nameswinbind nss info参数启用,则可用于支持本地名称映射文件。该模块将range划分为由 idmap config处理的每个域的子范围。该模块需要完整的 UID 和 GID 范围才能映射所有 SID。range的最小值应该是系统中可用的最小 ID。 这通常是 1000。最高 ID 应设置为 2147483647。任何小于 0 - 2147483647 的范围都会过滤一些 SID。由于我们通常只能从 1000 个开始,因此我们无法映射 1000 个 SID。这已经可能导致问题。 范围越小,可以映射的 SID 就越少。 我们不建议使用此插件。 它将在 Samba 的未来版本中删除。

IDMAP 选项

name_map

指定 nss_info API 使用的名称映射文件的绝对路径。 文件中的条目采用unix name = qualified domain name的形式。 支持用户名和组名的映射。

示例

以下示例使用 idmap_hash 插件获取 idmap 和 nss_info 信息。

         [global]
                idmap config * : backend = hash
                idmap config * : range = 1000-2147483647

                winbind nss info = hash
                winbind normalize names = yes
                idmap_hash:name_map = /etc/samba/name_map.cfg
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值