背景:宿主机已经有一个容器运行着openldap服务
假设路径为192.168.88.188 端口映射为389:389
- 由于隐私,因此将管理员账户假设为
olcSuffix: dc=companay,dc=com
olcRootDN: cn=Manager,dc=companay,dc=com
olcRootPW: 1234 - 用户目录在 ou=people,dc=secmask,dc=com
开始搭建
- 1.搜索nexus镜像
docker search nexus3
拉取镜像
docker pull docker.io/sonatype/nexus3
创建容器运行
docker run -id
--privileged=true
--name=nexus3
--restart=always
-p 7081:8081
-v /nexus3/nexus-data:/var/nexus-data
sonatype/nexus3
-id 创建守护式容器
--privileged=true 授予root权限(挂载多级目录的时候必须为true,否则容器访问宿主机权限不足)
--name=名字 给你的容器起个名字
-p 宿主机端口:容器端口映射
-v 宿主机目录:容器目录 目录挂载
- 2.访问路径 http://192.168.88.188:7081/ (宿主机ip+宿主机映射的端口,有时候初始化需要时间稍微等一下)登录
默认用户为admin
密码在 admin.password 文件里面
在宿主机运行命令 find / -name admin.password 在/路径下的文件里面寻找 名称为admin.password文件
vi 此路径 vi /var/lib/docker/volumes/6452efb976534ec98753826bcff3cc052d0d77de01427ff32fe26351fec2ecec/_data# cat admin.password
里面一长串就是登录密码 将其复制下来 去登录
登录成功后 会提示你修改密码 修改完以后 刚刚的admin.password 文件就没有了。
到这里nexus已经搭建完毕 - 3.配置ldap接入验证
在【Administration】【Realms】配置中,把LDAP Realm设为Active。
- 一个Connection,其实就是一个LDAP连接。 这个页面,配置连接到一个LDAP服务器所需的全部信息。
- Name可以随便填。LDAP server address则需要填写LDAP服务器的IP。 协议可选ldap或ldaps,而端口则取决于配置。 如果没有特殊配置,ldap默认端口是389,而ldap则是636。
- Search base只需要填DC即可,比如DC=example,DC=com。 其它内容,比如CN、OU等,不需要填写。
- Authentication method有以下选项:
- Simple Authentication,
- Anonymous Authentication,
- DIGEST-MD5,
- CRAM-MD5
通常选择Simple Authentication即可。
- Username or DN、Password里填写账户、密码,而 Connection rules无需修改。
填写完毕后,点击【Verify connection】按钮,可以验证信息。 如果成功,即可保存进下下一步。
保存了Connection后,会出现一个【User and group】的标签页。 这个页面,进一步配置LDAP的用户与用户组的相关信息。
- 在最开头的Configuration template中,有四种模板可选:
- Active Directory
- Generic Ldap Server
- Posix with Dynamic Groups
- Posix with Static Groups
这是自动配置以下信息的模板,对真正的配置起预设作用。 通常选择第一个即可。
Base DN里无须填写DC,这在前一页的Search base里已经填过了。 按照实际的LDAP配置,填写对应信息即可,比如OU=people。
User subtree通常需要勾选。 如果把LDAP的Tree比作目录的话,勾选以后相当于递归查找子目录。 多一点信息,往往比少一点信息,更不容易出错。
User filter通过过滤规则,减少搜索信息,用于提升性能。 仅仅只是提升性能,所以,如果不懂它特殊的匹配规则,也可以不填。
在前面选择模板为Active Directory后,User ID attribute默认为sAMAccountName、 Real name attribute默认为cn、Email attribute默认为mail、Password attribute为空。 通常都可以不改,或者也可以按需修改。
Map LDAP groups as roles如果不勾选,就不会同步用户组信息。 如果勾选,则可以选择Group type和Group member of attribute。 若无必要,保持默认即可。
填写完毕后,通过【Verify user mapping】可以验证查询结果。 如果查询失败、或者查询结果为空,都需要重新调整配置。 验证成功后,还可以通过【Verify login】的尝试输入LDAP里的账户、密码。
贴下我的配置
由于隐私,忽略图中马赛克。 图中Search base => 填写的就是上文中的 dc=companay,dc=com
Username or DN => 就是olcRootDN的值 => cn=Manager,dc=companay,dc=com
password就是olcRootPW的 => 1234
点击验证连接成功后就下一步 如果没有成功就是上面配置信息有误,需检查是否填写错误。
上图关于配置组为动态映射。可能会不能 将 用户所属的组 映射为 角色
如下图
上面用户没有memberOf属性。如果设置了memberOf属性,上面动态映射可以 映射出用户的组(映射为角色,但是角色需要自己创建,创建后 用户自动拥有角色的权限)
继续修改配置将 用户的组也映射出来。方便配置权限
对于 openldap 组有两种方式创建
对于两种方式创建的组属性不同,因此配置的属性也不同
有四个组 三个是Group of unique name模式 一个是Group
- Group 模式
- 这是group组
- 这是对应的配置 和上图 属性 相对应。
- 演示效果
- 这是group组
- Group of unique name模式
- 组属性
- 对应的配置
- 演示效果
到此 已经介入openldap验证。并且可以 将 openldap 用户所属的 组 映射为nexus里面的 角色。并且拥有该角色的权限
- 但是 此时需要手动导入 一下组 添加角色
配置正确的情况下 会有提示 如下
- 然后为此角色(对应openldap的组)设置权限。
- 相关用户(属于此组 下的用户)会自动添加此 角色。
- 组属性
下图可以查看ldap用户。
结束
参考资料
https://www.jianshu.com/p/09a6cab3785a
https://note.qidong.name/2017/09/nexus-ldap/
https://help.sonatype.com/repomanager3/security/ldap