使用 LLDAP 作为 GitLab 的 LDAP 认证后端:`gitlab.rb` 完整配置指南
后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载本文以 LLDAP 仓库中 example_configs/gitlab.md 的官方集成文档为骨架结合仓库源码深入讲解如何在 GitLab 中启用 LLDAP 认证包括/etc/gitlab/gitlab.rb中ldap_servers各字段的语义、user_filter的 memberOf 实现原理以及属性映射与 LLDAP 内部字段的对应关系。读完本文你将能独立完成 LLDAP → GitLab 的 LDAP 登录集成并具备根据源码定位认证问题根因的能力。集成方案总览LLDAP 是一个轻量级 LDAP 实现默认在3890端口提供 LDAP 服务、在17170端口提供 Web 管理界面见 server/src/configuration.rs 中ldap_port 3890、http_port 17170的默认值。GitLab 内置的 LDAP 认证能力可以直接指向 LLDAP实现用户使用同一套账号密码登录 GitLab。官方集成文档给出的访问控制模型非常简单清晰Members of the groupgit_userwill have access to GitLab.即LLDAP 中git_user组的成员自动获得 GitLab 访问权限其余用户一律拒绝。这个效果完全由user_filter一条过滤器实现无需在 GitLab 侧维护用户清单。修改/etc/gitlab/gitlab.rb启用 LDAP官方文档要求在 GitLab 服务器上编辑/etc/gitlab/gitlab.rb加入以下配置块完整继承自原文档并补充了注释说明gitlab_rails[ldap_enabled] true gitlab_rails[ldap_servers] { main { label LDAP, host ldap.example.com, port 3890, uid uid, base oupeople,dcexample,dccom, encryption plain, bind_dn uidbind_user,oupeople,dcexample,dccom, password bind user password, active_directory false, user_filter ((objectclassperson)(memberofcngit_user,ougroups,dcexample,dccom)), attributes { username uid, email mail, name displayName, first_name givenName, last_name sn } } }保存后执行sudo gitlab-ctl reconfigure使配置生效。配置项逐项拆解以下表格逐字段说明含义并结合 LLDAP 源码给出取值范围与注意事项配置项含义与 LLDAP 的对应关系hostLLDAP 服务器地址如 LLDAP 与 GitLab 同机部署可填localhost跨机部署填 LLDAP 所在主机名/IPportLLDAP 服务端口LLDAP 默认 LDAP 端口为3890configuration.rs如需走 LDAPSLLDAP 默认监听6360ldaps_options.port默认值见下文启用 LDAPSuid登录用户名属性LLDAP 中uid映射到用户 IDmap_user_field将uid | user_id | id归一到UserColumn::UserId见 crates/ldap/src/core/utils.rsbase用户搜索基 DNLLDAP 用户条目的 DN 固定为uid{用户名},oupeople,{base_dn}见 crates/ldap/src/core/user.rs 的make_ldap_search_user_result_entry。因此 base 必须指向oupeople子树且oupeople之上即 LLDAP 配置的ldap_base_dn默认dcexample,dccomencryption连接加密方式GitLab 支持plain、simple_tls、start_tls。LLDAP 默认仅明文 3890需要加密时配置ldaps_options并在此填simple_tlsbind_dn绑定 DN即 GitLab 用来查询目录的服务账号。LLDAP 默认管理员用户admin的完整 DN 为uidadmin,oupeople,dcexample,dccom参见 lldap_config.docker_template.toml 对ldap_user_dn的注释建议单独创建专用绑定用户并授予只读权限password绑定账号密码与上面bind_dn对应的 LLDAP 用户密码active_directory是否 AD 模式必须为false——LLDAP 不是 Active Directory其memberof是派生属性而非 AD 的链式memberOfuser_filter允许登录的用户过滤器核心访问控制见下节attributes字段映射见属性映射一节关于bind_dn的补充说明官方示例使用uidbind_user,oupeople,dcexample,dccom其中的bind_user是你在 LLDAP 中创建的任意普通用户。LLDAP 对搜索/绑定请求的 DN 解析实现在 crates/ldap/src/core/utils.rsparse_distinguished_name会把 DN 解析为(键, 值)对只有形如uidxxx,oupeople,{base_dn}的 DN 才会被识别为合法用户ougroups则识别为组。如果你的 base DN 与示例不同例如dcexample,dcorgbind_dn也要同步改为uidbind_user,oupeople,dcexample,dcorg。user_filter基于成员组实现登录授权user_filter是整段配置的灵魂官方文档用它实现只有git_user组成员能登录 GitLab((objectclassperson)(memberofcngit_user,ougroups,dcexample,dccom))这个过滤器包含两个条件用做逻辑与objectclasspersonLLDAP 用户默认携带inetOrgPerson、posixAccount、mailAccount、person四个 objectClass见 crates/ldap/src/core/user.rs 中DEFAULT_USER_OBJECT_CLASSES常量因此所有用户都能通过该条件。memberofcngit_user,ougroups,dcexample,dccom要求用户属于git_user组。从源码看LLDAP 将 LDAP 过滤器翻译为内部查询结构在convert_user_filtercrates/ldap/src/core/user.rs中memberof字段被映射为UserFieldType::MemberOf其 DN 值会通过get_group_id_from_distinguished_name_or_plain_name解析出组名最终生成UserRequestFilter::MemberOf(git_user)由后端按组成员关系过滤用户。对应的返回侧逻辑同样在源码中可见当客户端请求memberOf属性时LLDAP 会为每个用户动态生成cn{组名},ougroups,{base_dn}形式的 DN 列表见get_user_attribute中UserFieldType::MemberOf分支。这一点在 crates/ldap/src/core/user.rs 的test_search_member_of测试用例中得到验证bob属于组rockstars时搜索memberOf返回cnrockstars,ougroups,dcexample,dccom。注意组名的大小写示例中的过滤器memberofcngit_user,...需要与 LLDAP 中实际的组名完全一致组名比较是大小写不敏感的见 crates/domain/src/types.rs 中GroupName的实现但保持统一更利于排错。如果你希望开放给多个组可扩展为((objectclassperson)(|(memberofcngit_user,ougroups,dcexample,dccom)(memberofcngit_admin,ougroups,dcexample,dccom)))属性映射与 LLDAP 内部字段的对应关系attributes块把 LLDAP 返回的属性翻译为 GitLab 账号字段GitLab 字段LDAP 属性LLDAP 内部对应usernameuid用户 IDUserColumn::UserIdemailmail邮箱UserColumn::EmailLLDAP 中邮箱是必填项namedisplayName显示名UserColumn::DisplayNameGitLab 支持cn、displayName两种写法first_namegivenName自定义属性first_namelast_namesn自定义属性last_name这些映射都能在map_user_fieldcrates/ldap/src/core/utils.rs中找到对应实现mail/email归一到邮箱列cn/displayname/display_name归一到显示名列givenname/first_name/firstname指向自定义属性first_namesn/last_name/lastname指向自定义属性last_name。这意味着在 LLDAP 管理界面创建用户时first_name、last_name是标准自带的用户属性分别对应 LDAP 的givenName、sn按需填写即可被 GitLab 同步displayName属性由 LLDAP 的显示名Display Name字段提供留空时 GitLab 可能拿不到name建议创建用户时填写。提示若 GitLab 日志中出现未知属性警告如sAMAccountName可在 LLDAP 配置的ignored_user_attributes中列出这些属性以静默告警见 lldap_config.docker_template.toml。启用 LDAPS 加密可选默认encryption plain在跨网段部署时存在明文传输风险。LLDAP 内置 LDAPS 支持需要两步在 LLDAP 配置中启用 LDAPS环境变量或 TOML 均可[ldaps_options] enabled true port 6360 cert_file /data/cert.pem key_file /data/key.pem对应环境变量为LLDAP_LDAPS_OPTIONS__ENABLED、LLDAP_LDAPS_OPTIONS__PORT、LLDAP_LDAPS_OPTIONS__CERT_FILE、LLDAP_LDAPS_OPTIONS__KEY_FILE默认端口 6360见 server/src/configuration.rs 的LdapsOptions。修改 GitLab 配置port 6360、encryption simple_tls并确保 GitLab 信任该证书自签名证书需将 CA 加入系统信任链。验证与排错确认 LLDAP 端口可达在 GitLab 服务器上执行nc -vz ldap.example.com 3890用 ldapsearch 手动验证过滤逻辑需安装 ldap-utilsldapsearch -x -H ldap://ldap.example.com:3890 \ -D uidbind_user,oupeople,dcexample,dccom -w bind user password \ -b oupeople,dcexample,dccom \ ((objectclassperson)(memberofcngit_user,ougroups,dcexample,dccom)) uid mail该命令返回的正是 GitLab 会看到的用户列表若结果缺失某用户优先检查该用户是否已被加入git_user组。检查 GitLab 日志sudo gitlab-ctl tail gitlab-rails中如出现LDAP search error多为bind_dn/password错误或base写错base 必须以oupeople开头并精确匹配 LLDAP 的ldap_base_dn。确认 reconfigure 已生效sudo gitlab-ctl reconfigure完成后可在 GitLab 登录页看到 LDAP 标签页。关键参考文件官方集成文档example_configs/gitlab.mdLLDAP 默认端口与配置结构server/src/configuration.rsDocker 部署配置模板含ldap_user_dn、ldaps_options注释lldap_config.docker_template.toml用户 DN / memberOf / objectClass 生成逻辑与测试crates/ldap/src/core/user.rs组 DN 与uniqueMember生成逻辑crates/ldap/src/core/group.rs字段映射uid/mail/cn/givenName/sn等别名归一crates/ldap/src/core/utils.rsLLDAP 安装与部署方式docs/install.mdLLDAP 的 Docker 部署参考 docs/install.md 中的docker-compose示例其中LLDAP_LDAP_BASE_DN、LLDAP_LDAP_USER_PASS等环境变量直接决定了上面 GitLab 配置中base、bind_dn、password的取值。确保两侧的 base DN 一致是集成成功的第一步。赞分享后端认证鉴权【免费下载链接】lldapLight LDAP implementation项目地址https://gitcode.com/gh_mirrors/ll/lldap点击查看免费下载相关推荐使用 LLDAP 配置 Prosody XMPP 服务器 LDAP 认证指南使用 LLDAP 配置 Prosody XMPP 服务器 LDAP 认证指南 本文以 LLDAP 官方示例配置 example_configs/prosody.后端认证鉴权用 Kueue 实现 RayJob 优先级调度KubeRay 队列与配额管理实战用 Kueue 实现 RayJob 优先级调度KubeRay 队列与配额管理实战 本指南以 Ray 官方仓库中 rayjob kueue priority s后端认证鉴权LLDAP客户端配置终极指南为Nextcloud、Rancher等常见服务提供LDAP认证的完整示例LLDAP客户端配置终极指南为Nextcloud、Rancher等常见服务提供LDAP认证的完整示例 LLDAP作为轻量级LDAP实现方案为各类应用提供高效后端认证鉴权上一篇ni与yarn berry现代包管理的深度整合下一篇Kubernetes Python Client分页查询终极指南大规模资源列表处理技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

pyprobml 第 20 章降维实战指南:PCA、概率 PCA、自编码器与词嵌入的 Notebook 全景解析

pyprobml 第 20 章降维实战指南:PCA、概率 PCA、自编码器与词嵌入的 Notebook 全景解析

机器学习深度学习 【免费下载链接】pyprobml Python code for "Probabilistic Machine learning" book by Kevin Murphy 项目地址: https://gitcode.com/gh_mirrors/py/pyprobml 点击查看 免费下载 本章文档是《Probabilistic Machine Learning: An Intr…

2026/10/9 4:17:46 阅读更多 →
pytorch-metric-learning 自定义损失函数开发指南:从零编写可复用的度量学习 Loss

pytorch-metric-learning 自定义损失函数开发指南:从零编写可复用的度量学习 Loss

人工智能机器学习深度学习计算机视觉 【免费下载链接】pytorch-metric-learning The easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch. 项目地址: https://gitcode.com/gh_mirrors/py/pytorc…

2026/10/8 1:35:35 阅读更多 →
ARM交叉编译踩坑记:-march=armv8.2-a+dotprod+fp16为何导致SIGILL

ARM交叉编译踩坑记:-march=armv8.2-a+dotprod+fp16为何导致SIGILL

1. 从一次编译报错说起:-march 参数到底在指挥什么如果你在 ARM 平台上做过交叉编译,大概率见过这种场景:代码在 x86 主机上编译得好好的,一放到目标板上跑就崩,或者编译阶段直接甩出一堆selected processor does not …

2026/10/8 1:35:35 阅读更多 →

最新新闻

Agent-Reach:LLM API智能路由与成本可控调度中枢

Agent-Reach:LLM API智能路由与成本可控调度中枢

1. 项目概述:Agent-Reach 是什么?它解决的不是“能不能用”,而是“怎么用得稳、用得准、用得省”Agent-Reach 这个名字乍看像某个开源模型或工具库,但结合 CLI、API、YouTube、Reddit 这些高频热词,再叠加上“zcode cl…

2026/10/9 6:34:27 阅读更多 →
HTML5移动端拍照上传全链路实战:从getUserMedia到EXIF修正与断网续传

HTML5移动端拍照上传全链路实战:从getUserMedia到EXIF修正与断网续传

简介:本资源是一套面向Web前端开发者与全栈初学者的HTML5移动端拍照上传实战方案,聚焦在普通HTTP环境下调用手机摄像头实时拍照并上传至PHP后台的核心功能实现。资源共22个文件,包含1个可直接运行的index.html主页面、1个uploadfile.php服务端…

2026/10/9 6:34:27 阅读更多 →
Jetpack Compose与HarmonyOS ArkUI状态管理对比:从remember到@State的迁移指南

Jetpack Compose与HarmonyOS ArkUI状态管理对比:从remember到@State的迁移指南

我去年接了一个双端项目——既有Jetpack Compose写的Android端,又有HarmonyOS的ArkUI版本。一开始我想着:"都是声明式编程,Compose和ArkUI应该差不多。"结果真正写起来才发现,UI描述方式的相似只是表象,单是…

2026/10/9 6:34:27 阅读更多 →
基于SpringBoot+Vue的二手车交易系统:从业务拆解到部署实践

基于SpringBoot+Vue的二手车交易系统:从业务拆解到部署实践

做一个二手车交易系统,听上去像是个老掉牙的练手项目,但真把它拆开来看,你会发现它几乎把一个商业项目该有的技术问题都覆盖了一遍。基于SpringBootVue的二手车交易管理系统源码,配上MyBatis和MySQL,这套组合不是什么花…

2026/10/9 6:34:27 阅读更多 →
带平衡约束的最短路:从ICPC Ballance题看帕累托状态压缩

带平衡约束的最短路:从ICPC Ballance题看帕累托状态压缩

题目名是Grand Prix of Ballance,从ICPC 2024成都站出来的。我第一眼看到这个标题的时候,第一反应是“Ballance”这个单词拼错了还是故意玩梗,后面在大屏幕上看到题目背景里那个悬浮轨道和滚动的小球,才确认就是那个经典的平衡球游…

2026/10/9 6:34:27 阅读更多 →
Vue 3 网络请求封装与 Element Plus 组件库选型实战指南

Vue 3 网络请求封装与 Element Plus 组件库选型实战指南

1. 项目到了第10节,网络请求这关必须打通学 Vue.js 看到“网络请求”这一节,很多人的第一反应是“不就是调个接口嘛”。但真到了实际项目里你会发现,网络请求层的设计决定了你后面写页面是舒服还是遭罪。这一节的内容说白了就两件事&#xff…

2026/10/9 6:33:26 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →