一、Ldap的结构
1.组织角色
所有用户都可以登录,但是只有创建时的admin组角色有增删改的权限,相当于是根目录,千万不能删,删了就全没了
注意,admin用户是首个超级登录用户(相当于根),需要用配置文件生成,详见:https://www.cnblogs.com/wangyuanguang/p/18189832
##注意修改wyg部分为自己自定义的账户
~]# vim /etc/openldap/base.ldif
dn: dc=wyg,dc=com
objectClass: dcObject
objectClass: organization
o: wyg.com
dc: wyg
~]# ldapadd -x -W -D "cn=admin,dc=wyg,dc=com" -f /etc/openldap/base.ldif
Enter LDAP Password:
adding new entry "dc=wyg,dc=com"
2.组
做到用户的组隔离(个人认为没有特殊要求的话,一个组也就够用了,不需要jenkins、harbor、h5ai等接入时单独建设一个组,这样维护起来要维护好几套),当然在做特殊的权限颗粒时可以新增组。
可以通过配置文件生成,也可以直接创建生成
2.1 配置文件创建
~]# vim /etc/openldap/groups.ldif
dn: ou=groups,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groupsdn: ou=jenkins,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: jenkinsdn: ou=test,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: test~]# ldapadd -x -W -D "cn=admin,dc=wyg,dc=com" -f /etc/openldap/groups.ldif
Enter LDAP Password:
adding new entry "ou=jenkins,dc=wyg,dc=com"
adding new entry "ou=groups,dc=wyg,dc=com"
adding new entry "ou=test,dc=wyg,dc=com"
2.2 也可以直接在GUI上创建
跳过部分的意思是不添加这些属性,像这种都是灰色无法选取的说明都是必要的属性,不能跳过
提交之后会生成test1的组,和另外新增的几个组(例如jenkins)的属性一样,测试完我就直接删除了
3.用户
用户就是LDAP对外平台主要提供的数据(也可以登录ldap本身)
可以通过配置文件生成、GUI页面新建、GUI页面复制
3.1 配置文件生成
创建用uid登录的用户
~]# vim /etc/openldap/users.ldif
dn: uid=user1,ou=jenkins,dc=wyg,dc=com
ou: jenkins
uid: user1
sn: user1
cn: user1
givenName: user1
mail: readafa@esgyn.local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword:: MTIzNDU2
displayName:: 5rGq5YWD5YWJ~]# ldapadd -x -W -D "cn=admin,dc=wyg,dc=com" -f /etc/openldap/users.ldif
Enter LDAP Password:
adding new entry "ou=jenkins,dc=wyg,dc=com"
3.2 GUI页面新建
找到对应的组,创建新的条目
创建cn登录的用户
Ldap属性配置
1.关于objectClass
LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
objectClass有着严格的等级之分,最顶层是top和alias。例如,organizationalPerson这个objectClass就隶属于person,而person又隶属于top;
objectClass可分为以下3类:
结构型(Structural):如person和organizationUnit;
辅助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。
在OpenLDAP的schema中定义了很多objectClass,下面列出部分常用的objectClass的名称。
account
alias
dcobject
domain
ipHost
organization
organizationalRole
organizationalUnit
person
organizationalPerson
inetOrgPerson
residentialPerson
posixAccount
posixGroup
三、属性中对应jenkins的选项
查看ldap的cn-user用户讲解
[root@node1 jenkins]# ldapsearch -x -D "uid=user1,ou=jenkins,dc=wyg,dc=com" -w 123456
##找到cn-user,'displayName:: 546L5bCP5LqM'表示中文:王小二
# cn-user, jenkins, wyg.com
dn: cn=cn-user,ou=jenkins,dc=wyg,dc=com
sn: test1
userPassword:: MTIzNDU2
uidNumber: 1001
gidNumber: 500
homeDirectory: /home/users/test1
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: cn-user
uid: dl-user
ou: jenkins
displayName:: 546L5bCP5LqM
givenName: given-user
说明:
a:可以用这个登录ldap dn: cn=cn-user,ou=jenkins,dc=wyg,dc=com
b:ldap上显示的用户名 cn: cn-user
C:可选的,在jenkins上显示出来的,sn: test1;displayName:: 546L5bCP5LqM;givenName: given-user
可以在jenkins的配置文件修改(需要重启jenkins),这里用的是displayName,当然可以改成sn或者是givenName,那么ldap的用户里面也要有对应的属性,而且腰设置成“唯一”
[root@node1 jenkins]# cat config.xml|grep displayNameAttributeName<displayNameAttributeName>displayName</displayNameAttributeName>
也可以在jenkins的ldap配置中设置
d:登录jenkins的用户名 uid: dl-user