openLDAP服务搭建与使用
LDAP介绍
LDAP
LDAP是一种基于轻量目录访问协议,全称是Lightweight Directory Access Protocol,是由一个为查询、浏览和搜索而优化的数据库构成,它成树状结构组织数据,类似文件目录一样。
LDAP单点登录认证主要是改变原有的认证策略,使得需要的软件都通过LDAP服务器进行认证,在统一身份认证后,用户的所有信息都存储在AD Server中,终端用户在需要使用公司内部服务的时候,都需要通过AD服务器进行认证。
整个LDAP登录流程由以下4个步骤组成:
- 连接到LDAP服务器。
- 绑定到LDAP服务器。
- 在LDAP服务器上执行所需要的操作。
- 释放LDAP服务器的连接。
LDAP场景说明:
企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患。比如我们公司,有jira、confulence、gitlab、北森等系统,
使用场景是提高用户在同一个企业的多个站点(域名)之间的无缝浏览体验,例如企业内部可能有多个处理不同业务的系统(OA,邮箱,财务等),用户只要在一个系统上保持登录状态,即可无需再次登录访问其他内部系统。
openLDAP 是 LDAP 开源的一种实现
openLDAP 部署
在k8s中部署
部署文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
| kind: Deployment apiVersion: apps/v1 metadata: name: ldap-server namespace: tool labels: app: ldap-server annotations: kubesphere.io/alias-name: LDAP kubesphere.io/description: 认证中心 spec: replicas: 1 selector: matchLabels: app: ldap-server template: metadata: labels: app: ldap-server spec: volumes: - name: volume-8aprj6 persistentVolumeClaim: claimName: ldap-config-pvc - name: volume-hj6df3 persistentVolumeClaim: claimName: ldap-data-pvc containers: - name: container-ad1z7z image: 'osixia-openldap:1.5.0' ports: - name: tcp-389 containerPort: 389 protocol: TCP - name: tcp-636 containerPort: 636 protocol: TCP env: - name: LDAP_ORGANISATION value: kwl - name: LDAP_DOMAIN value: kwl.com - name: LDAP_ADMIN_PASSWORD value: kwl123456 - name: LDAP_CONFIG_PASSWORD value: kwl123456 - name: LDAP_BACKEND value: mdb resources: limits: cpu: 500m memory: 500Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: volume-8aprj6 mountPath: /etc/ldap/slapd.d - name: volume-hj6df3 mountPath: /var/lib/ldap terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: IfNotPresent restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: default serviceAccount: default securityContext: {} imagePullSecrets: - name: local-harbor affinity: {} schedulerName: default-scheduler strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% revisionHistoryLimit: 10 progressDeadlineSeconds: 600
kind: Deployment apiVersion: apps/v1 metadata: name: ldap-phpldapadmin namespace: tool labels: app: ldap-phpldapadmin annotations: kubesphere.io/alias-name: LDAP kubesphere.io/description: LDAP在线工具 spec: replicas: 1 selector: matchLabels: app: ldap-phpldapadmin template: metadata: labels: app: ldap-phpldapadmin spec: containers: - name: container-jojizv image: 'osixia-phpldapadmin:stable' ports: - name: tcp-443 containerPort: 443 protocol: TCP - name: tcp-80 containerPort: 80 protocol: TCP env: - name: PHPLDAPADMIN_HTTPS value: 'false' - name: PHPLDAPADMIN_LDAP_HOSTS value: 10.233.11.157 resources: limits: cpu: 500m memory: 500Mi requests: cpu: 10m memory: 10Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: IfNotPresent securityContext: privileged: true restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst serviceAccountName: default serviceAccount: default securityContext: {} imagePullSecrets: - name: local-harbor affinity: {} schedulerName: default-scheduler strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% revisionHistoryLimit: 10 progressDeadlineSeconds: 600
kind: Service apiVersion: v1 metadata: name: ldap-server-svc namespace: tool labels: app: ldap-server-svc spec: ports: - name: tcp-389 protocol: TCP port: 389 targetPort: 389 nodePort: 30944 - name: tcp-636 protocol: TCP port: 636 targetPort: 636 nodePort: 31282 selector: app: ldap-server clusterIP: 10.233.11.157 type: NodePort sessionAffinity: ClientIP externalTrafficPolicy: Cluster
kind: Service apiVersion: v1 metadata: name: ldap-phpldapadmin-svc namespace: tool labels: app: ldap-phpldapadmin-svc spec: ports: - name: tcp-80 protocol: TCP port: 80 targetPort: 80 nodePort: 30581 selector: app: ldap-phpldapadmin clusterIP: 10.233.51.71 type: NodePort sessionAffinity: ClientIP externalTrafficPolicy: Cluster
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ldap-data-pvc namespace: tool labels: app: ldap-data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi volumeName: pvc-fb0aeff5-b4d5-4266-9801-4135ce1f4b0e storageClassName: local volumeMode: Filesystem
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ldap-config-pvc namespace: tool labels: app: ldap-config-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi volumeName: pvc-040ff76c-7bdf-436b-984f-9897efa0bd16 storageClassName: local volumeMode: Filesystem
|
openLDAP 使用
由于我们部署了phpldapadmin服务,我们直接通过phpldapadmin的网页来操作LDAP
访问集群节点IP+30581访问phpldapadmin
由于我们配置了LDAP服务环境变量,所以登录admim的账户密码为cn=admin,dc=kwl,dc=com/kwl123456
创建OpenLDAP基础域
创建OpenLDAP组
创建OpenLDAP用户(注意如果要用LDAP用于的邮箱进行登录,需要为用户新建Email额外字段和内容)
创建参考
使用wikijs验证LDAP登录
上面我们新建了LDAP用户zhan san, Email地址为zhansan@kwl.com, 密码为123456
进入wikijs的系统配置页面,选择身份验证配置,新建LDAP配置
这里我配置的是通过邮箱来作为账户登录,详细配置如下
配置参数 |
配置值 |
备注 |
LDAP URL |
ldap://10.233.11.157:389 |
LDAP 服务地址 |
Admin Bind DN |
cn=admin,dc=kwl,dc=com |
LDAP 管理员登录DN |
Admin password |
kwl123456 |
|
Search Base |
ou=user,dc=kwl,dc=com |
LDAP 登录用户查询起始域 |
Search Filter |
(mail=) |
这里我们判断的是填入的信息是否和邮箱匹配 |
配置好之后,在wikijs使用LDAP登录项成功登录zhan san(zhansan@kwl.com/123456)用户则配置成功
参考
https://cloud.tencent.com/developer/article/1349446?from=information.detail.phpLDAPadmin
https://docs.requarks.io/auth/ldap
https://github.com/osixia/docker-openldap/tree/master/example/kubernetes