openldap集中權限管理

簡介

最近梳理了下自己的自動化運維體系,發現目前運維管理中的各子系統都是獨立運行。在管理過程中在各子系統中需要創建不同的賬號,給管理及其他使用人員帶來了極大的不便,需要記錄各種登錄密碼。因此在消化總結其他人的知識圖譜後,可以使用ldap來打通各子系統的賬戶體系,如zabbix、jenkins、jumpserver等。

基本概念

1.條目
條目entry 就是目錄管理的對象,他是ldap中最基本的顆粒,就像字典中的詞條,或是數據庫中的記錄。通常對ldap的添加、刪除、更改、檢索就是以條目爲基本對象的。

每一個條目都有一個唯一的標識名(distinguished name,dn),如:

dc=test,dc=cn 有3個條目,而且它本身也是一個條目:
在這裏插入圖片描述

2.屬性
每個條目可以有多個屬性,常見的屬性名稱:

屬性 別名 描述
Common name cn 普通名字 yanggd
surname sn 第一個名字 yanggd
orgnization o 組織 test
Orgnization unit ou 組織單元 people

在這裏插入圖片描述

安裝

yum install -y openldap openldap-clients openldap-servers

# 複製一個默認配置到指定目錄下,並授權,這一步一定要做,然後再啓動服務,不然生產密碼時會報錯
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

chown -R ldap.ldap /var/lib/ldap/DB_CONFIG

systemctl enable slapd
systemctl start slapd

配置openldap

一、密碼設置

1.生成管理員密碼
[root@phab cn=config]# slappasswd -s test
{SSHA}0Pgrrxa0cczUisQSCNRjiDAdW8iSwHgW

2.新增修改密碼文件
vim changepwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}0Pgrrxa0cczUisQSCNRjiDAdW8iSwHgW

3.執行命令如下:
[root@phab ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

執行完命令後,會在 /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif 文件中新增
olcRootPW:: e1NTSEF9eGNGRUZwRTBzb0cnRGNWVENHRRQmk0ZWIwVGErYVc=

注意:上面是一個完整的修改配置的過程,不能直接修改/etc/openldap/slapd.d/目錄下的配置。

二、基礎配置

1.導入基本的schema
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
2.修改域名
vim changedomain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=test,dc=cn" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=test,dc=cn
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=test,dc=cn
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}xcFEFpE0smv4rtF5eD4tQBi4eb0Ta+aW
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=test,dc=cn" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=test,dc=cn" write by * read

執行命令
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif
[root@phab ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

三、新建組織
完成前面基礎配置後,我們來新建test組織,並在其下創建一個 admin 的組織角色(該組織角色內的用戶具有管理整個 LDAP 的權限)和 People 和 Group 兩個組織單元:

1.配置文件
[root@phab ~]# vim basedomain.ldif
dn: dc=test,dc=cn
objectClass: top
objectClass: dcObject
objectClass: organization
o: test Company
dc: test

dn: cn=admin,dc=test,dc=cn
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=test,dc=cn
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=test,dc=cn
objectClass: organizationalRole
cn: Group

檢查是否存在此組織並創建
[root@phab ~]# ldapsearch -x -b "dc=test,dc=cn" -H ldap://127.0.0.1
[root@phab ~]# ldapadd -x -D cn=admin,dc=test,dc=cn -W -f basedomain.ldif
Enter LDAP Password: 
adding new entry "dc=test,dc=cn"

adding new entry "cn=admin,dc=test,dc=cn"

adding new entry "ou=People,dc=test,dc=cn"

adding new entry "ou=Group,dc=test,dc=cn"

通過以上的所有步驟,我們就設置好了一個 LDAP 目錄樹:其中基準 dc=test,dc=cn 是該樹的根節點,其下有一個管理域 cn=admin,dc=test,dc=cn 和兩個組織單元 ou=People,dc=test,dc=cn 及 ou=Group,dc=test,dc=cn。

配置完成後,後面的步驟可以通過phpldapadmin在界面操作。

集成子系統

1.jumpserver
在這裏插入圖片描述注意:ldap屬性映射中由於映射了mail屬性,因此在ldap中的用戶中必須添加郵件屬性,否則jumpserver在啓用ldap認證中會報錯。

2.zabbix
在這裏插入圖片描述注意: zabbix的用戶必須提前創建且和ldap中賬戶一致,也可通過腳本方式自動同步。

3.jenkins

在這裏插入圖片描述jenkins設置完畢後,我們只需對賬戶進行分配相關項目即可。

發佈了179 篇原創文章 · 獲贊 299 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章