跳过导航链接 | |
退出打印视图 | |
![]() |
手册页第 1M 部分:系统管理命令 Oracle Solaris 11 Information Library (简体中文) |
- 配置和管理本机身份映射服务
idmap
idmap -f command-file
idmap add [-d] name1 name2
idmap dump [-n] [-v]
idmap export [-f file] format
idmap flush [-a]
idmap get-namemap name
idmap help
idmap import [-F] [-f file] format
idmap list
idmap remove [-t|-f] name
idmap remove -a
idmap remove [-d] name1 name2
idmap set-namemap [-a authenticationMethod] [-D bindDN] [-j passwdfile] name1 name2
idmap show [-c] [-v] [-V] identity [target-type]
idmap unset-namemap [-a authenticationMethod] [-D bindDN] [-j passwdfile] name [target-type]
idmap 实用程序用于配置和管理本机身份映射服务。
本机身份映射服务支持 Windows 安全标识符 (security identitier, SID) 与 POSIX 用户 ID 和组 ID(UID 和 GID)之间的以下映射类型:
基于名称的映射。管理员按名称映射 Windows 和 UNIX 的用户和组。
临时 ID 映射。为每个尚未按名称映射的 SID 动态分配 UID 或 GID。
本地 SID 映射。非临时 UID 或 GID 映射到按算法生成的本地 SID。
idmap 实用程序可以用于创建和管理基于名称的映射,以及监视生效的映射。
如果调用 idmap 实用程序时不带子命令或选项,则会从标准输入读取子命令。标准输入是 TTY 时,idmap 命令会输出用法消息,然后退出。
idmapd(1M) 守护进程可将 Windows 用户和组 SID 映射到 UNIX UID 和 GID,如下所示:
SID 按名称映射。
此映射使用系统管理员手动设置的基于名称的映射。
如果找不到基于名称的映射,SID 会映射到动态分配的临时 ID。
此分配使用 231 到 232 - 2 之间的下一个可用 UID 或 GID。
本地 SID 映射用于从 UNIX 到 Windows 的映射。
为了防止别名问题,所有文件系统、归档和备份格式以及协议都必须存储 SID,或将 231 到 232 - 2 范围内的所有 UID 和 GID 映射到 nobody 用户和组。
也可以创建对角映射。对角映射是指 Windows 组和 Solaris 用户之间以及 Solaris 组和 Windows 用户之间的映射。在 Windows 使用组身份作为文件所有者(或反之)的时候,需要这种映射。
基于名称的映射可以在 Windows 用户和组与 UNIX 名称服务中的用户和组之间建立等效名称映射关系。这些映射在重新引导后依然存在。例如,以下命令将 Windows 用户映射到具有相同名称的 UNIX 用户:
# idmap add "winuser:*@mywindomain.com" "unixuser:*"
如果配置为使用目录服务,idmapd(1M) 将首先尝试使用存储在 Active Directory (AD) 和/或本机 LDAP 目录服务的用户或组对象中的映射信息。例如,可以对给定 Windows 用户或组的 AD 对象进行扩充,使之包括相应的 Solaris 用户或组名称或者数值型 ID。同样,也可以对给定 Solaris 用户或组的本机 LDAP 对象进行扩充,使之包括相应的 Windows 用户或组名称。
通过设置 idmap 服务的相应服务管理工具 (service management facility, SMF) 属性,可以将 idmapd(1M) 配置为使用 AD 和/或本机 LDAP 目录型名称映射。请参见下面的“服务属性”部分了解更多详细信息。
如果没有配置目录型名称映射或是配置了却找不到,则 idmapd(1M) 将处理本地存储的基于名称的映射规则。
idmap 支持对 Windows 已知名称的映射。下面列出其中几个:
Administrator Guest KRBTGT Domain Admins Domain Users Domain Guest Domain Computers Domain Controllers
添加 idmap 规则时,这些已知名称会扩展成规范格式。也就是说,将会添加缺省域名(对于非已知名称),或者添加适当的内置域名。此域名可以为空或 BUILTIN,也可以是本地主机名,具体取决于特定的已知名称。
以下 idmap 命令序列说明了非已知名称 fred、已知名称 administrator 和 guest 的处理方法。
# idmap add winname:fred unixuser:fredf add winname:fred unixuser:fredf # idmap add winname:administrator unixuser:root add winname:administrator unixuser:root # idmap add winname:guest unixuser:nobody add winname:guest unixuser:nobody # idmap add wingroup:administrators sysadmin add wingroup:administrators unixgroup:sysadmin # idmap list add winname:Administrator@examplehost unixuser:root add winname:Guest@examplehost unixuser:nobody add wingroup:Administrators@BUILTIN unixgroup:sysadmin add winname:fred@example.com unixuser:fredf
idmapd 守护进程会尝试在守护进程重新启动后保留临时 ID 映射。但是如果无法保留 ID,守护进程会将之前映射的每个 SID 映射到新的临时 UID 或 GID 值。守护进程决不会重复使用临时 UID 或 GID。如果 idmapd 守护进程用光了临时 UID 和 GID,它会返回错误,同时为无法按名称映射的 SID 返回缺省 UID 或 GID。
重新引导后不会保留动态 ID 映射。所以,重新引导系统后,任何动态映射到 UNIX UID 或 GID 的 SID 都很可能会映射到不同的 ID。
如果找不到基于名称的映射,非临时 UID 或 GID 将映射到按算法生成的本地 SID。映射生成方式如下:
local SID for UID = <machine SID> - <1000 + UID> local SID for GID = <machine SID> - <2^31 + GID>
<machine SID> 是由 idmap 服务为运行时所在的主机生成的唯一 SID。
将 Windows 名称映射到 UNIX 名称时,按以下顺序查找基于名称的映射规则:
windows-name@domain 到 ""
windows-name@domain 到 unix-name
windows-name@* 到 ""
windows-name@* 到 unix-name
*@domain 到 *
*@domain 到 ""
*@domain 到 unix-name
*@* 到 *
*@* 到 ""
*@* 到 unix-name
将 UNIX 名称映射到 Windows 名称时,按以下顺序查找基于名称的映射规则:
unix-name 到 ""
unix-name 到 windows-name@domain
* 到 *@domain
* 到 ""
* 到 windows-name@domain
服务属性决定 idmapd(1M) 守护进程的行为。这些属性存储在属性组 config 下的 SMF 系统信息库中(请参见 smf(5))。您可以使用 svccfg(1M) 访问和修改它们,但这需要 solaris.smf.value.idmap 授权。idmap 服务的服务属性如下:
指定包含 UNIX 用户名的 AD 属性名。无缺省值。
指定包含 UNIX 组名称的 AD 属性名。无缺省值。
指定包含 Windows 用户/组名称的本机 LDAP 属性名。无缺省值。
控制对使用存储在目录服务中的数据进行身份映射的支持。
none 禁用基于目录的映射。
name 允许使用上述属性进行基于名称的映射。
idmu 启用使用 Microsoft Identity Management for UNIX (IDMU) 的映射。此 Windows 组件允许管理员为每个 Windows 用户指定一个 UNIX 用户 ID,以便将 Windows 身份映射到相应的 UNIX 身份。仅使用包含 Solaris 系统的域中的 IDMU 数据。
更改服务属性不会影响正在运行的 idmap 服务。更改在服务刷新(使用 svcadm(1M))后才会生效。
idmap 命令使用以下操作数:
指定用户名称映射在 export 和 import 子命令中的描述格式。支持 Netapp usermap.cfg 和 Samba smbusers 外部格式。这些外部格式仅适用于用户而非组。
usermap.cfg 规则-映射格式如下:
windows-username [direction] unix-username
windows-username 是 Windows 用户名,格式为 domain\username 或 username@domain。
unix-username 是 UNIX 用户名。
direction 为以下值之一:
== 表示这是一个双向映射(此为缺省值)。
=> 或 <= 表示这是一个单向映射。
不支持 IP 限定符。
smbusers 规则-映射格式如下:
unixname = winname1 winname2 ...
如果 winname 包括空格,则通过用双引号将值括起来对空格进行转义。例如,以下文件显示如何以 idmap 命令的有效格式指定空格:
$ cat myusermap terry="Terry Maddox" pat="Pat Flynn" cal=cbrown
映射作为从 Windows 名称到 UNIX 名称的单向映射导入。
格式依照 smb.conf 手册页的“用户名映射”条目的说明,可以在 samba.org Web 站点上找到这部分内容。支持在 windows-name 中使用星号 (*),但是不支持 @group 指令和映射链接。
缺省情况下,如果 smbusers 文件中没有映射项,Samba 会将 windows-name 映射到等效 unix-name(如果有)。如果要像 Samba 一样设置相同的映射,请使用以下 idmap 命令:
idmap add -d "winuser:*@*" "unixuser:*"
指定用户名、用户 ID、组名称或组 ID。identity 以 type:value 格式指定。type 为以下值之一:
Windows 用户 SID(文本格式)
Windows 组 SID(文本格式)
既可以属于用户也可以属于组的 Windows 组 SID(文本格式)
数值型 POSIX UID
数值型 POSIX GID
UNIX 用户名
UNIX 组名称
Windows 用户名
Windows 组名称
Windows 用户名或组名称
value 是一个对应于指定 type 的数字或字符串。例如,unixgroup:staff 指定 UNIX 组名称 staff。标识 gid:10 代表 GID 10,它与 UNIX 组 staff 相对应。
指定一个可以用于基于名称的映射规则的 UNIX 名称(unixuser、unixgroup)或 Windows 名称(winuser、wingroup)。
Windows 安全身份名称可以通过下列方式之一指定:
domain\name
name@domain
name,使用缺省映射域
如果 name 是空字符串 (""),则会禁止映射。请注意,"" 名称不能用于阻止未映射 Windows 用户的登录。
如果 name 使用了通配符 (*),它将匹配未被其他映射匹配的所有名称。同样,如果 name 是通配符 Windows 名称 (*@*),它将匹配未被其他映射匹配的所有域中的所有名称。
如果 name 在映射规则两端都使用通配符,那么 Windows 和 Solaris 用户的名称是相同的。例如,如果规则是 "*@domain" == "*",那么 jp@domain Windows 用户名与该规则匹配,并会映射到 jp Solaris 用户名。
如果类型可以从命令行上指定的其他参数或类型中推断,您也可以选择是否指定 name 的类型。
与 show 和 unset-namemap 子命令结合使用。对于 show,指定应该显示的映射类型。例如,如果 target-type 是 sid,idmap show 会返回 SID,该 SID 映射到在命令行上指定的身份。对于 unset-namemap,确定由 name 操作数指定的对象中的属性。
idmap 命令支持一个选项和一组子命令。子命令也有选项。
从 command-file 读取并执行 idmap 子命令。idmap -f - 命令从标准输入读取。此选项不能由任何子命令使用。
支持以下子命令:
添加基于名称的映射规则。缺省情况下,名称映射是双向的。如果使用 -d 选项,会创建从 name1 到 name2 的单向映射。
name1 或 name2 的其中一个必须是 Windows 名称,而另外一个必须是 UNIX 名称。对于 Windows 名称,不能使用 winname 身份类型,而是要从 winuser 或 wingroup 类型中指定一个。有关 name 操作数的信息,请参见“操作数”部分。
请注意,相同的两个名称之间的两个方向相反的单向映射相当于一个双向映射。
该子命令需要 solaris.admin.idmap.rules 授权。
转储自上次系统引导后缓存的所有映射。-n 选项也会显示名称。缺省情况下,只会显示 sid、uid 和 gid。-v 选项显示映射是如何生成的。
将基于名称的映射规则以指定的 format 导出至标准输出。-f file 选项将规则写入指定的输出文件。
刷新身份映射高速缓存,以便将来的映射请求会完全按照当前的规则和目录信息进行处理。这是一个非中断操作。更改规则时会自动刷新高速缓存;该手动操作可用于强制使新更改的目录信息生效。
使用 -a 选项可将高速缓存清除干净。该操作可能会中断进行中的操作,因此应仅在静默系统上使用。可能需要使用 -a 选项来设置 "clean slate" 测试用例,虽然一般情况下并不需要。
从指定名称的 AD 或本机 LDAP 用户或组对象获取目录型名称映射信息。
显示用法消息。
使用指定的 format 从标准输入导入基于名称的映射规则。-f file 选项从指定文件读取规则。-F 选项在添加新规则前刷新现有的基于名称的映射规则。
不管使用的外部格式为何,导入的规则将使用前面“规则查找顺序”部分描述的语义和顺序进行处理。
该子命令需要 solaris.admin.idmap.rules 授权。
列出所有基于名称的映射规则。所有规则都以 idmap add 格式显示。
删除涉及指定名称的任何基于名称的映射规则。name 可以是 UNIX 或 Windows 用户名或组名称。
-f 选项删除使用 name 作为源的规则。-t 选项删除使用 name 作为目标的规则。这些选项是互斥的。
该子命令需要 solaris.admin.idmap.rules 授权。
删除所有基于名称的映射规则。
该子命令需要 solaris.admin.idmap.rules 授权。
删除 name1 和 name2 之间基于名称的映射规则。如果指定 -d 选项,则会删除 name1 到 name2 的规则。
name1 或 name2 的其中一个必须是 Windows 名称,而另外一个必须是 UNIX 名称。
该子命令需要 solaris.admin.idmap.rules 授权。
设置 AD 或本机 LDAP 用户或组对象中的名称映射信息。name1 或 name2 的其中一个必须是 Windows 名称,而另外一个必须是 UNIX 名称。
如果 name1 是一个 Windows 名称,那么 UNIX 名称 name2 会添加到 name1 所代表的 AD 对象。同样,如果 name1 是一个 UNIX 名称,那么 Windows 名称 name2 会添加到 name1 所代表的本机 LDAP 项。
所支持的选项如下:
指定修改本机 LDAP 项时的验证方法。有关详细信息,请参见 ldapaddent(1M)。缺省值是 sasl/GSSAPI。
使用标识名 bindDN 绑定到目录。
指定一个文件,该文件包含对目录进行身份验证所需的口令。
显示类型为 target-type 的身份,它是指定 name 映射的对象。如果省略可选的 target-type,则会显示非对角映射。
缺省情况下,该子命令只显示已经建立的映射。-c 选项强制评估基于名称的映射配置或 ID 的动态分配。
-v 选项显示映射是如何生成的,以及映射是刚刚生成的还是从高速缓存获取的。-V 选项详细说明了要确定映射所需采取的具体步骤,包括被拒绝的临时步骤和方法。
从指定名称和可选目标类型代表的 AD 或本机 LDAP 用户或组对象中取消设置目录型名称映射信息。
请参见 set-namemap 子命令以了解各个选项。
示例 1 在基于名称的映射规则两端使用通配符
如果有一项存在且没有其他映射,以下命令可将 xyz.com 域中的所有 Windows 用户名映射到具有相同名称的 UNIX 用户。如果匹配此类规则,但是 UNIX 用户名不存在,则会使用临时 ID 映射。
# idmap add "winuser:*@xyz.com" "unixuser:*"
示例 2 在基于名称的映射规则一端使用通配符
以下命令将 xyz.com 域中的所有未映射 Windows 用户映射到 guest UNIX 用户。-d 选项指定一个从 *@xyz.com 用户到 guest 用户的单向映射。
# idmap add -d "winuser:*@xyz.com" unixuser:guest
示例 3 添加双向的基于名称的映射规则
以下命令将 Windows 用户 foobar@example.com 映射到 UNIX 用户 foo(反之亦可):
# idmap add winuser:foobar@example.com unixuser:foo
此命令显示如何删除由先前命令添加的映射:
# idmap remove winuser:foobar@example.com unixuser:foo
示例 4 显示 UID 到 SID 的映射
以下命令显示指定 UID uid:50000 映射到的 SID:
# idmap show uid:50000 sid uid:50000 -> usid:S-1-5-21-3223191800-2000
以下命令显示指定 Windows 用户名 joe@example.com 映射到的 UNIX 用户名:
# idmap show joe@example.com unixuser winuser:joe@example.com -> unixuser:joes
示例 5 列出缓存的 SID 到 UID 的映射
以下命令显示高速缓存中所有的 SID 到 UID 的映射:
# idmap dump | grep "uid:" usid:S-1-5-21-3223191800-2000 == uid:50000 usid:S-1-5-21-3223191800-2001 == uid:50001 usid:S-1-5-21-3223191800-2006 == uid:50010 usid:S-1-5-21-3223191900-3000 == uid:2147491840 usid:S-1-5-21-3223191700-4000 => uid:60001
示例 6 批处理 idmap 请求
以下命令显示如何批处理 idmap 请求。此特定命令序列执行如下操作:
删除 foobar@example.com 此前的所有规则。
将 Windows 用户 foobar@example.com 映射到 UNIX 用户 bar,反之亦可。
将 Windows 组 members 映射到 UNIX 组 staff,反之亦可。
# idmap <<EOF remove winuser:foobar@example.com add winuser:foobar@example.com unixuser:bar add wingroup:members unixgroup:staff EOF
示例 7 列出基于名称的映射规则
以下命令显示如何列出基于名称的映射规则:
# idmap list add winuser:foobar@example.com unixuser:bar add wingroup:members unixgroup:staff
示例 8 从 usermap.cfg 文件导入基于名称的映射规则
usermap.cfg 文件可以用于配置基于名称的映射规则。以下 usermap.cfg 文件显示了从 Windows 用户 foo@example.com 到 UNIX 用户 foo,以及从 foobar@example.com 到 UNIX 用户 foo 的映射规则。
# cat usermap.cfg foo@example.com == foo foobar@example.com => foo
以下 idmap 命令将 usermap.cfg 信息导入到 idmapd 数据库:
# cat usermap.cfg | idmap import usermap.cfg
此命令与先前的命令功能相同:
# idmap import -f usermap.cfg usermap.cfg
以下命令相当于先前的 idmap import 命令:
# idmap <<EOF add winuser:foo@example.com unixuser:foo add -d winuser:foobar@example.com unixuser:foo EOF
示例 9 结合使用基于名称的和临时的 ID 映射与身份功能映射及例外情况
以下命令将 example.com Windows 域中的所有用户映射到具有相同名称的 UNIX 用户帐户。命令还会指定以下 Windows 用户的映射:joe@example.com、jane.doe@example.com 和 administrator@example.com 。所有域中的 administrator 都映射到 nobody。没有对应 UNIX 帐户的 Windows 用户会动态映射到可用的临时 UID。
# idmap import usermap.cfg <<EOF joe@example.com == joes jane.doe@example.com == janed administrator@* => nobody *@example.com == * *@example.com => nobody EOF
示例 10 将目录型名称映射添加到 AD 用户对象
以下命令可将 UNIX 名称添加到 joe@example.com 的 AD 对象,从而将 Windows 用户 joe@example.com 映射到 UNIX 用户 joe。
# idmap set-namemap winuser:joe@example.com joes
示例 11 将目录型名称映射添加到本机 LDAP 用户对象
以下命令可将 Windows 名称添加到 foo 的本机 LDAP 对象,从而将 UNIX 用户 foo 映射到 Windows 用户 foobar@example.com。
# idmap set-namemap unixuser:foo foobar@example.com
示例 12 从 AD 用户对象中删除目录型名称映射
以下命令从代表 joe@example.com 的 AD 对象中删除 UNIX 用户名 unixuser。
# idmap unset-namemap winuser:joe@example.com unixuser
成功完成。
出现错误。向标准错误写入一条诊断消息。
有关以下属性的说明,请参见 attributes(5):
|
svcs(1)、idmapd(1M)、ldapaddent(1M)、svcadm(1M)、svccfg(1M)、ad(5)、attributes(5)、smf(5)
idmapd 服务由服务管理工具 smf(5) 管理。idmapd 服务的服务标识符是 svc:/system/idmap。
使用 svcadm 命令执行此服务的管理操作,如启用、禁用或重新启动服务。这些操作需要 solaris.smf.manage.idmap 授权。使用 svcs 命令查询服务状态。
Windows 用户名不区分大小写,而 UNIX 用户名则区分大小写。idmap 名称-规则和 idmap show 命令行中显示的 Windows 名称的大小写是不相关的。
由于在 UNIX 环境下的通常做法是使用全部小写的用户名,因此通配符名称-规则会按照如下方式将 Windows 名称映射到 UNIX 用户/组名称:首先,使用规范的 Windows 名称(即大小写情况与其在目录中的显示相同)作为 UNIX 用户名或组名称。如果没有这样的 UNIX 身份,则 Windows 名称转换为小写,这样就可以用作 UNIX 用户名或组名称。
这样区分对待大小写的结果是,看起来相同的用户名可能不会被识别为相互匹配。您必须创建规则来处理这种只有大小写不同的字符串的配对情况。例如,要将 Windows 用户 sam@example 映射到 Solaris 用户 Sam,必须创建以下规则:
# idmap add "winuser:*@example" "unixuser:*" # idmap add winuser:sam@example unixuser:Sam
有关修改 Active Directory 模式的指导信息,请参考 Microsoft 文档《Step-by-Step Guide to Using Active Directory Schema and Display Specifiers》,该文档可以在 Microsoft technet Web 站点 http://technet.microsoft.com/ 上找到。