OpenLdap部署以及集成组件
发布时间:2026/9/17 12:26:51来源:尧图网络
文章目录一、Centos7部署OpenLDAP1.yum方式安装ldap及依赖2.将ldap服务开启并设为自启动3.创建olcRootDN作为管理员账号4.然后创建changeroot.sh5.添加我们的base组织结构6.添加人员二、集成jenkins三、集成yearning sql审核平台四、集成kuboard五、集成gitlab一、Centos7部署OpenLDAP1.yum方式安装ldap及依赖[rootiZbp1ekeiqryx9a71hj5ieZ ~]# yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools[rootiZbp1ekeiqryx9a71hj5ieZ ~]# slapd -VV #查看下ldap的版本(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $mockbuildx86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd2.将ldap服务开启并设为自启动[rootiZbp1ekeiqryx9a71hj5ieZ ~]# systemctl start slapd[rootiZbp1ekeiqryx9a71hj5ieZ ~]# systemctl enable slapdCreated symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.[rootiZbp1ekeiqryx9a71hj5ieZ ~]# systemctl status slapd● slapd.service - OpenLDAP Server Daemon Loaded: loaded(/usr/lib/systemd/system/slapd.service;enabled;vendor preset: disabled)Active: active(running)since Fri2022-07-2215:20:08 CST;12s ago3.创建olcRootDN作为管理员账号提示/etc/openldap/slapd.d/data/ data这个目录是我自己创建的用于存放ldap配置[rootiZbp1ekeiqryx9a71hj5ieZ data]# vim rootdn.ldifdn:olcDatabase{2}hdb,cnconfig changetype: modify replace: olcRootDN olcRootDN:cnadmin,dcwonder-link,dcnet - replace: olcSuffix olcSuffix:dcwonder-link,dcnet - replace: olcRootPW olcRootPW:pass· 修改olcRootDN设置为我们的admin: cnadmin,dcwonder-link,dcnet· 修改olcSuffix设置为我们的域名dcwonder-link,dcnet· 修改olcRootPW设置我们的admin密码这个需要加密所以先放“/pass/”作为占位符等下替换· changetypereplace表示替换add表示增加cnconfig是全局配置必须得有objectClass: olcGlobal4.然后创建changeroot.sh[rootiZbp1ekeiqryx9a71hj5ieZ data]# vim changroot.shadmin_passadmin123echoadmin pass is:${admin_pass}seds!pass!${admin_pass}!grootdn.ldiftmp.ldifecho备份默认配置cp/etc/openldap/slapd.d/cn\config/olcDatabase\\{2\}hdb.ldif /etc/openldap/slapd.d/cn\config/olcDatabase\\{2\}hdb.ldif.bakecho将要修改的内容cattmp.ldif ldapmodify-Q-YEXTERNAL-Hldapi:///-ftmp.ldifecho修改后的变化diff/etc/openldap/slapd.d/cn\config/olcDatabase\\{2\}hdb.ldif /etc/openldap/slapd.d/cn\config/olcDatabase\\{2\}hdb.ldif.bakslappasswd -s admin 获取加密后的密码备份原始文件ldapmodify 更新命令 -H指定host这里ldapi:/// 表示IPC (Unix-domain socket)协议 -f指定变更的内容。安装Phpadmin[rootiZbp12wyclhxlyk4ipaza1Z data]# yum install httpd phpldapadmin -y[rootiZbp12wyclhxlyk4ipaza1Z ~]# cp /etc/httpd/conf.d/phpldapadmin.conf /etc/httpd/conf.d/phpldapadmin.conf.bak[rootiZbp12wyclhxlyk4ipaza1Z ~]# cp /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.bak[rootiZbp12wyclhxlyk4ipaza1Z ~]# cd /etc/phpldapadmin/[rootiZbp12wyclhxlyk4ipaza1Z phpldapadmin]# vim config.php$servers-setValue(login,attr,dn);//$servers-setValue(login,attr,uid);[rootiZbp12wyclhxlyk4ipaza1Z conf.d]# vim phpldapadmin.conf## Web-based tool for managing LDAP servers#Alias /phpldapadmin /usr/share/phpldapadmin/htdocs Alias /ldapadmin /usr/share/phpldapadmin/htdocsDirectory /usr/share/phpldapadmin/htdocsRequireAny#Require ip 127.0.0.1#Require ip ::1Require all granted/RequireAny/Directory[rootiZbp12wyclhxlyk4ipaza1Z conf.d]# systemctl restart httpd[rootiZbp12wyclhxlyk4ipaza1Z conf.d]# systemctl status httpd● httpd.service - The Apache HTTP Server Loaded: loaded(/usr/lib/systemd/system/httpd.service;disabled;vendor preset: disabled)Active: active(running)since Mon2022-08-0114:22:46 CST;2s ago默认80端口访问http://localhost/ldapadmin/[rootiZbp12wyclhxlyk4ipaza1Z data]# ldapsearch -H ldap:/// -D cnadmin,dcwonder-link,dcnet -w admin123# extended LDIF## LDAPv3# base (default) with scope subtree# filter: (objectclass*)# requesting: ALL## search resultsearch:2result:32No such object# numResponses: 1ldapsearch 查询语法 -H指定host -D指定admin的账号即rootdn, -w指定密码, -x启用认证5.添加我们的base组织结构有了管理员还需要配置组织结构base.ldif。在这之前我们需要导入一些模板。schema类似数据库表定义定义了字段名称和类型。schema地址/etc/openldap/schema[rootiZbp12wyclhxlyk4ipaza1Z schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldifSASL/EXTERNAL authentication started SASL username:gidNumber0uidNumber0,cnpeercred,cnexternal,cnauth SASL SSF:0adding new entrycncosine,cnschema,cnconfig[rootiZbp12wyclhxlyk4ipaza1Z schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldifSASL/EXTERNAL authentication started SASL username:gidNumber0uidNumber0,cnpeercred,cnexternal,cnauth SASL SSF:0adding new entrycnnis,cnschema,cnconfig[rootiZbp12wyclhxlyk4ipaza1Z schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldifSASL/EXTERNAL authentication started SASL username:gidNumber0uidNumber0,cnpeercred,cnexternal,cnauth SASL SSF:0adding new entrycninetorgperson,cnschema,cnconfig创建文件base.ldif[rootiZbp12wyclhxlyk4ipaza1Z data]# vim base.ldifdn:dcwonder-link,dcnet objectClass:topobjectClass: dcObject objectClass: organization o: wonderlink-ldap-组织 dc: wonder-link dn:cnManager,dcwonder-link,dcnet objectClass: organizationalRole cn: Manager description: 组织管理人 dn:ouPeople,dcwonder-link,dcnet objectClass: organizationalUnit ou: People dn:ouGroup,dcwonder-link,dcnet objectClass: organizationalUnit ou: Group使用ldapadd添加base:[rootiZbp12wyclhxlyk4ipaza1Z data]# ldapadd -x -D cnadmin,dcwonder-link,dcnet -w x4%0njjauzA -f base.ldifadding new entrydcwonder-link,dcnetadding new entrycnManager,dcwonder-link,dcnetadding new entryouPeople,dcwonder-link,dcnetadding new entryouGroup,dcwonder-link,dcnet使用ldapsearch来检查内容[rootiZbp12wyclhxlyk4ipaza1Z data]# ldapsearch -x -D cnadmin,dcwonder-link,dcnet -w x4%0njjauzA -b dcwonder-link,dcnet# extended LDIF## LDAPv3# base dcwonder-link,dcnet with scope subtree# filter: (objectclass*)# requesting: ALL## wonder-link.netdn:dcwonder-link,dcnet objectClass:topobjectClass: dcObject objectClass: organization o::d29uZGVybGluay1sZGFwLee7hOe7hwdc: wonder-link# Manager, wonder-link.netdn:cnManager,dcwonder-link,dcnet objectClass: organizationalRole cn: Manager description:: 57uE57uH566h55CG5Lq6# People, wonder-link.netdn:ouPeople,dcwonder-link,dcnet objectClass: organizationalUnit ou: People# Group, wonder-link.netdn:ouGroup,dcwonder-link,dcnet objectClass: organizationalUnit ou: Group# search resultsearch:2result:0Success# numResponses: 5# numEntries: 4-x 启用认证-D bind admin的dn-w admin的密码-b basedn, 查询的基础dn可以看到中文被替换成hash, 后面可以通过其他方式看到6.添加人员ou并不能当做分组而仅仅是组织架构的一个单元。ldap的分组都是通过单独的group来实现的。添加人员添加人员对应的是树的叶子节点使用的oebjectClass inetOrgPerson。添加组织部门对应的是目录使用的objectClass: organizationalUnit.我们要把人员添加到ouPeople,dcdemo,dccom下。创建adduser.ldif[rootiZbp12wyclhxlyk4ipaza1Z data]# vim adduser.ldifdn:ou研发部门,ouPeople,dcwonder-link,dcnet changetype:addobjectClass: organizationalUnit ou: 研发部门#####################################运维组############################################dn:ou运维组,ou研发部门,ouPeople,dcwonder-link,dcnet changetype:addobjectClass: organizationalUnit ou: 运维组##成员列表##dn:cnfandaoshuai,ou运维组,ou研发部门,ouPeople,dcwonder-link,dcnet changetype:addobjectClass: inetOrgPerson cn: fandaoshuai userPassword:123.com.cn departmentNumber:1sn: Fan title: 运维工程师 mail: fandaoshuai777sina.com uid: fandaoshuai displayName: 范道帅#####################################开发组############################################dn:ou开发组,ou研发部门,ouPeople,dcwonder-link,dcnet changetype:addobjectClass: organizationalUnit ou: 开发组##成员列表##dn:cnzhangyugang,ou开发组,ou研发部门,ouPeople,dcwonder-link,dcnet changetype:addobjectClass: inetOrgPerson cn: zhangyugang userPassword: TVdzIfh^6b3 departmentNumber:2sn: Zhang title: 后端组长 mail: zhangyugangcngotone.com uid: zhangyugang displayName: 张玉刚根据adduser.ldif添加用户[rootiZbp12wyclhxlyk4ipaza1Z data]# ldapadd -x -D cnadmin,dcwonder-link,dcnet -w x4%0njjauzA -f adduser.ldifadding new entryou研发部门,ouPeople,dcwonder-link,dcnetadding new entryou运维组,ou研发部门,ouPeople,dcwonder-link,dcnetadding new entrycnfandaoshuai,ou运维组,ou研发部门,ouPeople,dcwonder-link,dcnetadding new entryou开发组,ou研发部门,ouPeople,dcwonder-link,dcnetadding new entrycnzhangyugang,ou开发组,ou研发部门,ouPeople,dcwonder-link,dcnet查询是否有我们刚才添加的用户[rootiZbp12wyclhxlyk4ipaza1Z data]# ldapsearch -x -D cnadmin,dcwonder-link,dcnet -w x4%0njjauzA -b dcwonder-link,dcnet cndiaomingkai# extended LDIF## LDAPv3# base dcwonder-link,dcnet with scope subtree# filter: cndiaomingkai# requesting: ALL## diaomingkai, \E5\BC\80\E5\8F\91\E7\BB\84, \E7\A0\94\E5\8F\91\E9\83\A8\E9\97\A8, People, wonder-link.net dn:: Y249ZGlhb21pbmdrYWksb3U95byA5YR57uELG91PeeglOWPkemDqOmXqCxvdT1QZW9wbGUsZ GM9d29uZGVyLWxpbmssZGM9bmV0 objectClass: inetOrgPerson cn: diaomingkai userPassword:: ak1mRURIWiNEZENq departmentNumber:2sn: Diao title:: 5p625p6E5biI mail: diaomingkaicngotone.com uid: diaomingkai displayName:: 5YiB5piO6ZS0# search resultsearch:2result:0Success# numResponses: 2# numEntries: 1需要添加三个组并且名字最好区分开这样有利于后面jenkins区分权限在相应的组里添加相应的用户添加完一个用户之后点击modify group members可以同时添加多个用户我们接下来只需要将相应的人员添加到相应的组里即可二、集成jenkins需要将jenkins登录的安全域设置为LDAP同时将授权策略设置为 “任何用户可做任何事”测试时需要后面ldap测试没问题的话再换成认证的即可root DN 使用一个adminDN账号用于查询用户 User search base 用户从哪个范围查找 User search filter 过滤用户的表达式(通常是以cn或uid筛选)cn{0}uid{0}Group search base 组从哪个范围查找 Group search filter 过滤组的表达式((cn{0})(objectclassgroupOfUniqueNames))Manager DN 管理者的DN Manager Password: 管理者对应的密码我们这里仅根据cngroup来进行筛选因为这样可以更好的控制组内用户的权限然后进行测试大家点击Test LDAP settings或者退出jenkins再使用ldap用户尝试登录我是点击test按钮没有反应最后试了老半天 退出登录竟然可以[大家可以试试]当测试登录没有问题后就可以对ldap用户或者用户组进行权限的配置了配置权限策略第一种直接使用项目矩阵授权策略需要安装jenkins的一个权限配置插件Role-based Authorization Strategy然后保存点击分配角色然后给测试组分配具体的项目权限验证这个是我管理员的权限可以看到所有的项目并有执行所有操作的权限然后使用测试组中的用户登录查看可以看到测试只有我们上面允许测试进行操作的项目才有构建和查看权限其它的项目 例如zero-to-zero这个项目组下的所有项目 就没有权限然后使用开发组中的用户去登录可以看到开发者虽然开发可以看到所有的项目但是只有查看的权限三、集成yearning sql审核平台四、集成kuboard参考地址https://kuboard.cn/install/v3/install-ldap.html#%E5%90%AF%E5%8A%A8-kuboard[rootk8s-node1 kuboard]# vim kuboard.shsudodockerrun-itd\--restartunless-stopped\--namekuboard\-p80:80/tcp\-p10081:10081/tcp\-v/hqtbj/hqtwww/kuboard/data:/data\-eKUBOARD_LOGIN_TYPEldap\-eKUBOARD_ENDPOINThttp://172.32.0.12:80\-eKUBOARD_AGENT_SERVER_TCP_PORT10081\-eKUBOARD_ROOT_USERfandaoshuai\-eLDAP_HOSTldap.wonder-link.net:389\-eLDAP_SKIP_SSL_VERIFYtrue\-eLDAP_BIND_DNcnadmin,dcwonder-link,dcnet\-eLDAP_BIND_PASSWORD密码xxxx\-eLDAP_BASE_DNdcwonder-link,dcnet\-eLDAP_FILTER(objectClassposixAccount)\-eLDAP_ID_ATTRIBUTEcn\-eLDAP_USER_NAME_ATTRIBUTEcn\-eLDAP_EMAIL_ATTRIBUTEmail\-eLDAP_DISPLAY_NAME_ATTRIBUTEcn\-eLDAP_GROUP_SEARCH_BASE_DNdcwonder-link,dcnet\-eLDAP_GROUP_SEARCH_FILTER(objectClassposixGroup)\-eLDAP_USER_MACHER_USER_ATTRIBUTEgidNumber\-eLDAP_USER_MACHER_GROUP_ATTRIBUTEgidNumber\-eLDAP_GROUP_NAME_ATTRIBUTEcn\swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3ldap操作五、集成gitlabgitlab自身支持通过openldap登录配置如下1.修改gitlab配置文件[rootlocalhost ~]# vim /etc/gitlab/gitlab.rb#开启ldap登录gitlab_rails[ldap_enabled]truegitlab_rails[ldap_servers]YAML.load-EOS main: # main is the GitLab provider ID of this LDAP server label: LDAP #ldap服务的标签名(ldap登录页面上显示的标签)可以自定义 host: ldap.wonder-link.net #ldap服务的地址 port: 389 #ldap的端口 uid: cn #gitlab登陆时使用的ldap用户信息中的哪个字段gitlab基本上都是使用用户名、用户id来登录的根据实际的情况进行修改即可我这里使用的是用户名字段cn; bind_dn: cnadmin,dcwonder-link,dcnet #ldap的管理用户 password: x4%0njjauzA #ldap管理用户的密码 encryption: plain #加密方式不加密 verify_certificates: true #是否启用ssl证书验证 smartcard_auth: false active_directory: true #ldap服务器是否为Active Directory ldap服务器 allow_username_or_email_login: true #如果启用GitLab 将忽略用户在登录时提交的 LDAP 用户名中第一个 之后的所有内容如果您在 ActiveDirectory 上使用 uid: userPrincipalName 您需要禁用此设置因为 userPrincipalName 包含一个 lowercase_usernames: false #此配置会使gitlab自动将名称转换为小写 block_auto_created_users: false #是否阻止新用户访问 base: dcwonder-link,dcnet #以此为基础进行用户查询也就是ldap搜索用户的位置哪里的用户可以访问例如可以只设置开发组可以访问我这里设置的是只要是ldap里面的用户都可以访问 user_filter: #根据条件进行组过滤 #user_filter: (memberOfcngitlab-users,ouGroups,dcwonder-link,dcnet) #下面的参数将指定gitlab会使用ldap中的哪些字段作为自己用户的信息例如gitlab中用户的email字段将使用ldap用户中的mail字段gitlab中的name字段(中文名字)对应ldap用户中的displayName字段 attributes: email: [mail] name: displayName first_name: givenName last_name: sn EOS2.重新加载gitlab配置[rootlocalhost ~]# gitlab-ctl reconfigure[rootlocalhost ~]# gitlab-ctl restart重启后即可使用ldap中创建的用户进行登录注修改用户密码注意事项#openldap 修改用户密码 在gitlab会立即生效必须使用ldap修改的密码才可以登录gitlab推送代码也需要使用ldap修改的密码才可以推送#gitlab上修改用户密码后gitlab的web登录依然使用的ldap的密码而不是在gitlab上修改的密码但是推送代码时可以使用gitlab修改的密码ldap的密码也可以使用#总结推荐修改密码时直接在openldap上修改删除用户注意事项#在gitlab上删除用户不会影响openldap上的用户当然删除的用户还可以重新登录但是没有任何仓库权限#在openldap上删除用户会导致所有接入ldap的应用都直接删除用户被ldap删除的用户不可登录任何接入ldap的应用#总结当不想让某个指定的用户登录gitlab时可以在gitlab上选择禁用用户当有员工离职时可以直接删除ldap上的用户信息使其不能登录所有应用
网站建设高端定制企业官网