LDAP认证
LDAP认证
PALO 支持 LDAP 验证登录和组授权。
LDAP 验证登录 指的是使用 LDAP 服务检查用户密码登录 PALO 账户。如果 LDAP 服务中不存在对应用户则仍使用 PALO 登录流程,如果 LDAP 检查密码正确但是 PALO 中没有对应账户则创建临时用户登录 PALO。
LDAP 组授权 是将LDAP中的 group 映射到 PALO 中的 Role,如果用户在LDAP中属于多个用户组,登录 PALO 后用户将获得所有组对应 Role 的权限,要求组名与Role 名字相同。
关于 Role 相关介绍,请参阅 权限管理。
启用LDAP认证
目前公有云用户暂不支持 LDAP 认证方式。如有需求,请 联系我们。
FE端配置
需要在 fe/conf/ldap.conf 文件中配置 LDAP 基本信息,另有 LDAP 管理员密码需要使用sql语句进行设置。
-
ldap_authentication_enabled = false设置值为
true启用LDAP验证;当值为false时,不启用LDAP验证,该配置文件的其他配置项都无效。 -
ldap_host = 127.0.0.1LDAP服务端 IP。
-
ldap_port = 389LDAP 服务端口,默认明文传输端口为389,目前 PALO 仅支持明文密码传输。
-
ldap_admin_name = cn=admin,dc=domain,dc=comLDAP管理员账户的
Distinguished Name(DN)。当用户使用 LDAP 验证登录PALO 时,PALO 会绑定该管理员账户在 LDAP 中搜索用户信息。 -
ldap_user_basedn = ou=people,dc=domain,dc=comPALO 在 LDAP 中搜索用户信息时的 base ND。
-
ldap_user_filter = (&(uid={login}))PALO 在 LDAP 中搜索用户信息时的过滤条件,占位符
{login}会被替换为登录用户名。必须保证通过该过滤条件搜索的用户唯一,否则 PALO 无法通过 LDAP 验证密码,登录时会出现ERROR 5081 (42000): user is not unique in LDAP server.的错误信息。例如使用 LDAP 用户节点 uid 属性作为登录 PALO 的用户名可以配置该项为:
Plain Text1 `ldap_user_filter = (&(uid={login}))`。 2 3 使用LDAP用户邮箱前缀作为用户名可配置该项: 4 5 `ldap_user_filter = (&(mail={login}@baidu.com))` -
ldap_group_basedn = ou=group,dc=domain,dc=comPALO 在 LDAP 中搜索组信息时的 base DN。如果不配置该项,将不启用LDAP组授权。
设置 LDAP 管理员密码
配置好 ldap.conf 文件后启动 FE,使用 root 或 admin 账号登录 PALO,执行SQL:
set ldap_admin_password = 'ldap_admin_password';
MySQL 客户端配置
客户端使用 LDAP 验证需要启用 MySQL 客户端明文验证插件,使用命令行登录 PALO 可以使用下面两种方式之一启用 MySQL 明文验证插件:
-
设置环境变量
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN值1,Y或y例如在linux或者max环境中可以使用:
Plain Text1echo "export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1" >> ~/.bash_profile -
每次登录PALO时添加参数
--enable-cleartext-pluginPlain Text1mysql -hPALO_HOST -PPALO_PORT -u user -p ldap_password --enable-cleartext-plugin
附录1:LDAP 认证详解
开启 LDAP 后,用户登录时 PALO 会先通过 LDAP 服务验证用户密码,如果 LDAP 存在用户且密码正确,PALO 则运行该用户登录;此时 PALO 若存在对应账户则直接登录该账户,如果不存在对应账户则为用户创建临时账户并登录该账户。
如果 LDAP 服务中不存在登录用户,则使用PALO进行密码认证。
以下示例中,假设已开启 LDAP 认证,配置 ldap_user_filter = (&(uid={login})),且其他配置项都正确,客户端设置环境变量 LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
-
Dois 和 LDAP 中存在账户
存在PALO账户:
jack@'172.10.1.10',密码:123456LDAP 用户节点存在属性:
uid: jack用户密码:abcdef使用以下命令登录 PALO 可以登录 jack@'172.10.1.10'账户:
Plain Text1mysql -hPALO_HOST -PPALO_PORT -ujack -p abcdef使用以下命令将登录失败:
Plain Text1mysql -hPALO_HOST -PPALO_PORT -ujack -p 123456 -
LDAP中存在用户,PALO中不存在对应账户:
LDAP用户节点存在属性:
uid: jack用户密码:abcdef使用以下命令登录 PALO 后,PALO 将创建临时用户
jack@'%'。临时用户具有基本权限
DatabasePrivs:Select_priv, 用户退出登录后PALO将删除该临时用户:Plain Text1mysql -hPALO_HOST -PPALO_PORT -ujack -p abcdef -
LDAP不存在用户:
存在PALO账户:
jack@'172.10.1.10',密码:123456使用PALO密码登录账户,成功:
Plain Text1mysql -hPALO_HOST -PPALO_PORT -ujack -p 123456
附录2:LDAP 组授权详解
LDAP 组授权是将 LDAP 中的 group 映射到 PALO 中的 Role,并将所有对应的 Role 权限授予登录用户,用户退出登录后 PALO 会撤销对应的 Role 权限。
用户 DN 是 LDAP 组节点的 member 属性则认为用户属于该组,PALO会截取组 DN 的第一个 Rdn 作为组名。
例如用户 DN 为 uid=jack,ou=aidp,dc=baidu,dc=com,组信息如下:
1dn: cn=PALO_rd,ou=group,dc=baidu,dc=com
2
3objectClass: groupOfNames
4
5member: uid=jack,ou=aidp,dc=baidu,dc=com
则组名为 PALO_rd。
假如 jack 还属于 LDAP 组 PALO_qa、PALO_pm。
PALO 存在 Role:PALO_rd、PALO_qa、PALO_pm。
在使用 LDAP 验证登录后,用户不但具有该账户原有的权限,还将获得 Role PALO_rd、PALO_qa 和 PALO_pm 的权限。
