ldap 用户组和用户(4)

本文详细介绍了OpenLDAP中两种用户组属性:Posixgroup和groupOfUniqueNames的区别及配置方法。Posixgroup默认用于用户组定义,但不支持直接用户关联;而groupOfUniqueNames允许直接关联用户,适用于需要根据用户组过滤用户的场景。

 

 

 

Posixgroup用户组属性

  默认情况下openldap的用户组属性是Posixgroup,Posixgroup用户组属性和用户没有实际的对应关系。如果我们一定要把Posixgroup和user对应起来的话,就需要单独把用户设置到Posixgroup中。

添加用户组

[root@zabbix1 ~]# cat group.ldif 
dn: cn=yunweizu,ou=Group,dc=test,dc=com
objectClass: posixGroup
objectClass: top
cn: yunweizu
gidNumber: 10002
description: 运维组
[root@zabbix1 ~]# ldapadd -x -w "1234qwer" -D "cn=root,dc=test,dc=com" -f /root/group.ldif 
adding new entry "cn=yunweizu,ou=Group,dc=test,dc=com"

现在虽然添加了组但是还没有关联起来需要在组里加一个值

  以上设置基本可以满足大部分业务场景的需要,但是如果我们需要根据用户组来过滤用户的话,Posixgroup用户组属性,是无法满足需要的。比如:nginx与openldap集成过滤用户组时、proftpd与openldap集成过滤用户组时、openvpn与openldap集成过滤用户组时、gitlab与openldap集成过滤用户组时,Posixgroup用户组属性是无法满足的。

  此时我们就需要使用groupOfUniqueNames用户组属性。

GroupOfUniqueNames用户组属性

   groupOfUniqueNames用户组属性,是可以根据用户组过滤用户,这个过滤是唯一的。

   要配置groupOfUniqueNames用户组属性,我们需要在openldap中添加相关的配置

[root@zabbix1 ~]# cat memberof_config.ldif 
dn: cn=module,cn=config
  : module
▽bjectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

[root@zabbix1 ~]# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
adding new entry "cn=module,cn=config"

adding new entry "olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config"

[root@zabbix1 ~]# vim refint1.ldif
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint                                                                                                                                                                      
"refint1.ldif" [New] 3L, 68C written                                                                                                                  
[root@zabbix1 ~]# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
modifying entry "cn=module{0},cn=config"

[root@zabbix1 ~]# vim refint2.ldif
dn: olcOverlay={1}refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner                                                                                                                                                            
"refint2.ldif" [New] 7L, 225C written                                                                                                                 
[root@zabbix1 ~]# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
ldapmodify: modify operation type is missing at line 2, entry "olcOverlay={1}refint,olcDatabase={2}hdb,cn=config"
[root@zabbix1 ~]# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
adding new entry "olcOverlay={1}refint,olcDatabase={2}hdb,cn=config"

导入用户组

[root@zabbix1 ~]# vim group1.ldif 
dn: cn=yunweizu,ou=Group,dc=test,dc=com
objectClass: groupOfUniqueNames
objectClass: top
cn: yunweizu
description: 运维组
uniqueMember: uid=test,ou=People,dc=test,dc=com                                                                                                                                                              
~                                                                                                                                                                       
"group1.ldif" 6L, 173C written                                                                                                                        
[root@zabbix1 ~]# ldapadd -x -w "1234qwer" -D "cn=root,dc=test,dc=com" -f /root/group1.ldif 
adding new entry "cn=yunweizu,ou=Group,dc=test,dc=com"

通过上图,我们可以很明显的看出groupOfUniqueNames用户组属性的成员属性为uniqueMember

如果此时把用户加入到该用户组后,我们是可以在用户组中直接看到该用户的。

也就说使用groupOfUniqueNames用户组属性的组,用户组与用户可以直接进行关联。

[root@zabbix1 ~]# ldapsearch -x -LLL -H ldap://127.0.0.1 -x -D cn=root,dc=test,dc=com -w "1234qwer"  -b uid=test,ou=People,dc=test,dc=com dn uniqueMember
dn: uid=test,ou=People,dc=test,dc=com

通过上图,我们可以很明显的看出groupOfUniqueNames用户组属性已经配置完毕。

这样第三方在调用openldap进行组过滤,就可以直接使用了。

 

 

参考网站

  https://www.ilanni.com/?p=14127

  https://www.ilanni.com/?p=13775

  https://www.cnblogs.com/lemon-le/p/6266921.html

  https://www.openldap.org/doc/admin24/

转载于:https://www.cnblogs.com/lfdblog/p/9805245.html

<think>首先,用户的问题是关于在Hive中为LDAP用户组设置权限的配置方法。用户提供了一些引用,我需要参考这些引用。分析引用:-引用[1]:提到Hive支持LDAP身份认证,配置了hive.server2.authentication为LDAP,并指定了LDAPURLBaseDN。-引用[2]:详细描述了整合LDAP权限管理的步骤,包括创建数据库、角色、权限等操作,使用SQL语句如grant、createrole等。-引用[3]:提到了hive.server2.authentication.ldap.userDNPattern的配置,用于指定用户DN模式。用户的问题焦点是:“为LDAP用户组设置权限”,结合引用[2],重点是使用角色授权来管理LDAP用户组的权限。我的回答必须遵循系统级指令:1.所有行内数学表达式使用$...$格式:这个问题不涉及数学表达式,所以可能不需要。2.独立公式使用$$...$$:同样,不涉及数学。3.LaTeX语法正确:确保所有LaTeX语法正确,但这里主要是配置代码SQL。4.使用中文回答:整个回答需要用中文。5.生成相关问题:回答后需要添加相关问题。6.引用的段落末尾自然地添加引用标识:例如[^1]、[^2]。回答结构应该清晰:逐步解决问题,保证真实可靠。参考用户提供的引用。关键点:-为LDAP用户组设置权限,涉及到Hive的授权机制。从引用看,应该使用角色(Role)授权语句。-步骤包括:-创建角色。-授予角色权限到数据库或表。-然后将角色授权给LDAP用户组。-配置Hive使用LDAP认证:需要在配置文件中设置相关属性。用户说:“我想了解如何在Hive中为LDAP用户组设置权限”,所以重点是配置方法。从引用[2]:1.创建数据库或确认存在。2.创建角色(如果不存在)。3.授予权限到角色:grantselect/allondatabasetorole。4.将角色授予LDAP组:grantroletogroupgroupName。5.可能需要配置外部表权限。配置文件中设置LDAP认证属性:-hive.server2.authentication=LDAP-hive.server2.authentication.ldap.url-hive.server2.authentication.ldap.baseDN-hive.server2.authentication.ldap.userDNPattern(从引用[3])回答结构:1.**引言**:解释Hive的LDAP支持授权机制。2.**配置LDAP认证**:设置Hive以使用LDAP认证。3.**设置权限的步骤**:详细步骤,如何使用角色授权给用户组4.**验证步骤**:如何测试权限是否有效。5.**代码块**:包括配置文件SQL命令。6.**结束**:添加引用标识相关问题。生成相关问题:关于权限管理的优化、常见问题等。确保回答真实可靠:基于提供的引用Hive官方文档知识(我会模拟基于引用)。最终输出:-内容为中文。-加粗重要标题:如**配置LDAP认证**、**设置权限步骤**。-代码块:如SQL配置文件属性。相关问题:1.如何测试LDAP用户在Hive中的权限?2.LDAP用户组权限设置的常见问题是什么?3.Hive授权机制的其他方式?</think> ### Hive 为 LDAP 用户组设置权限的配置方法 在 Hive 中为 LDAP 用户组设置权限主要涉及两步:(1)配置 Hive 使用 LDAP 认证,确保用户可以通过 LDAP 登录;(2)通过 Hive 的角色(Role)授权(Grant)机制,将权限分配给 LDAP 用户组。核心原理是将 LDAP 用户组映射为 Hive 中的角色(Group),然后使用 SQL 语句授予该角色权限(如数据库访问、表操作等)。本方法适用于 CDH 或类似环境中的 HiveServer2 实现[^1]。 #### **配置 Hive 使用 LDAP 认证** 首先,确保 Hive 启用了 LDAP 认证,以便 HiveServer2 能验证 LDAP 用户的身份。以下配置需在 Hive 的配置文件(如 `hive-site.xml`)中添加或修改。这些属性指定了 LDAP 服务器的详细信息。 ```xml <property> <name>hive.server2.authentication</name> <value>LDAP</value> </property> <property> <name>hive.server2.authentication.ldap.url</name> <value>ldap://your-ldap-server:389</value> <!-- 替换为实际 LDAP URL --> </property> <property> <name>hive.server2.authentication.ldap.baseDN</name> <value>DC=yourdomain,DC=com</value> <!-- 替换为实际 Base DN --> </property> <property> <name>hive.server2.authentication.ldap.userDNPattern</name> <value>CN=%s,DC=jr,DC=ly,DC=com</value> <!-- 替换为实际用户 DN 模式 --> </property> ``` **解释**: - `hive.server2.authentication = LDAP`:启用 LDAP 认证。 - `ldap.url`:指定 LDAP 服务器的地址(如 OpenLDAP)[^1]。 - `baseDN`:LDAP 目录的基准 DN,用于查找用户[^1]。 - `userDNPattern`:定义用户 DN 的模板,%s 会被用户名替换,用于快速认证[^3]。 配置完成后,重启 HiveServer2 服务。用户可以使用 LDAP 凭据登录 Hive(例如通过 Hue 或 Beeline)。 #### **设置 LDAP 用户组权限的步骤** 为 LDAP 用户组设置权限的核心是创建一个角色(Role),将权限授予该角色,然后绑定该角色到 LDAP 用户组。Hive 使用类似 SQL 的授权命令实现。以下步骤使用 Hive SQL(在 Beeline 或 Hue 中执行),假设你的 LDAP 组名为 `hiveProjectGroupName`。 1. **创建或确认 Hive 数据库(如果不存在)**: - 检查数据库是否存在。如果不存在,则创建。 ```sql -- 如果数据库不存在,则创建 CREATE DATABASE IF NOT EXISTS your_database; -- 替换为你的数据库名 ``` 2. **创建角色(如果不存在)并授予权限**: - 先检查角色是否存在,如果不存在则创建。 ```sql -- 检查角色是否存在,如果不存在则创建 SHOW GRANT ROLE roleName ON DATABASE your_database; -- 替换为角色名数据库名,验证角色[^2] -- 如果角色不存在,创建角色 CREATE ROLE IF NOT EXISTS roleName; -- 替换为角色名 ``` - 授予角色权限(例如只读或全部权限): ```sql -- 授予角色对数据库的权限(例如 SELECT 或 ALL) GRANT SELECT ON DATABASE your_database TO ROLE roleName; -- SELECT 表示只读 -- 或者授予所有权限 GRANT ALL ON DATABASE your_database TO ROLE roleName; -- ALL 包括创建表、删除等 ``` - **重要**:如果权限涉及外部表或 HDFS 路径,还需添加 URI 授权: ```sql -- 授予 HDFS 路径权限 GRANT ALL ON URI 'hdfs://nameservice1/extwarehouse/xxx' TO ROLE roleName; -- 替换为实际路径[^2] ``` 3. **将角色授权给 LDAP 用户组**: - 在 LDAP 服务中,确保已创建用户组(如 `hiveProjectGroupName`)。然后,将角色映射到该组: ```sql -- 将角色授权给 LDAP 用户组 GRANT ROLE roleName TO GROUP hiveProjectGroupName; -- 替换为你的LDAP组名 ``` 4. **添加用户LDAP 组**: - 这一步在 LDAP 服务器(如 OpenLDAP)中完成,而不是 Hive。将用户加入组 `hiveProjectGroupName`,用户将自动继承角色权限[^2]。 5. **验证权限配置**: - 测试 LDAP 用户登录(如通过 Hue),检查是否能访问数据库或表: ```sql -- 用 LDAP 用户登录后,查询权限 SHOW GRANT; -- 显示当前用户的权限 -- 尝试访问数据库 USE your_database; SELECT * FROM your_table LIMIT 1; -- 验证 SELECT 权限 ``` 如果配置正确,用户应只获得授权角色定义的操作权限。 #### **注意事项** - **真实环境要求**:替换上述示例中的占位符(如 `your_database`、`ldap://your-ldap-server:389`)为实际值。LDAP 组名需与 LDAP 目录一致[^2]。 - **依赖项**:确保 Hive 的授权模式启用(例如通过 `hive.security.authorization.enabled=true`)。如果使用 Sentry 或 Ranger,步骤类似,但需额外集成 LDAP 组映射[^1]。 - **最佳实践**:使用数据库级别的授权(而不是表级)简化管理,避免频繁授权语句。如果权限不生效,检查 LDAP 认证日志或 HiveServer2 错误日志。 通过以上方法,LDAP 用户组可以无缝访问 Hive 资源,同时确保权限隔离安全性[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值