一、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: groups
dn: ou=jenkins,dc=wyg,dc=com
objectClass: organizationalUnit
objectClass: top
ou: jenkins
dn: 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