Gitlab社区版支持多LDAP登录

Python013

Gitlab社区版支持多LDAP登录,第1张

安装配置Gitlab社区版的时候发现Gitlab支持多LDAP配置,配置完成后发现登录页面还是只有一个登录选项。翻阅官方文档才发现社区版原来不支持多LDAP登录。业务方还是想要多LDAP登录支持,抛来一篇文章:https://segmentfault.com/a/1190000016340093。

看看文章中的修改方案,改动的文件是: /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/gitlab_omniauth-ldap-1.2.1/lib/omniauth/strategies/ldap.rb

这个是LDAP登录页的登录callback,作者在这里通过硬编码方案加上了第二个LDAP登录配置,同时还修改了另外一个地方:

作者方案中第二个LDAP更多的类似一个备用配置,如果两个LDAP用户出现冲突了,第二个LDAP的同名用户就永远登录不了了。

看完这个方案,总觉得有些不太满意,还得找一找优雅的方案。

代码吧,虽然不会ruby,但老外的代码实现得一般还是很优雅的,读一读改一改还是问题不大的。

很快找到了这个文件:/opt/gitlab/embedded/service/gitlab-rails/app/views/devise/shared/_signin_box.html.haml,是登录框的页面模版:

从页面中可以发现代码中对多LDAP登录没有限制,然后查看一下生成的配置文件,多LDAP也都在配置文件中,都没有问题。

只能继续跟踪一下ldap_servers的相关实现,最后找到两个文件:/opt/gitlab/embedded/service/gitlab-rails/app/controllers/concerns/renders_ldap_servers.rb和/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb。

我们先看看第一个文件renders_ldap_servers.rb:

代码很简单,如果sign_in_enabled,就返回配置的available_servers。Ldap::Config代码就在第二个文件config.rb中,截取相关代码如下:

在这个代码中我们找到了多LDAP登录限制的“罪魁祸首”——Array.wrap(servers.first)——通过这行代码选取了多个LDAP配置中的第一个,简单的修改此处即可优雅的解锁gitlab社区版的多LDAP支持。

最终解决方案记录如下:

修改/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/auth/ldap/config.rb文件:

修改后重启一下gitlab即可。

但是,是不是就没有其他的呢?如果你要了解一个 web 服务器是怎么运行的。至少它是怎么可以同时服务成千上万的用户的,这个问题,可能是很多网络服务器编程都要面对的问题。那么他们的源代码呢?很显然IIS 是不可能有源代码的,不然微软早就game over 了。但是你会说 Apache 是开源的,是的,它是开源的,但是我觉得等你搞明白了apache 的时候,也许是半年之后的事情了,并且你可能会觉得,哦,天啊,原来它是这么糟糕。所以,如果你希望了解web 服务器的工作原理,就需要那些剩下的10%- 轻量级web 服务器了,当然了,他们一般都是开源的,并且大部分是使用c 和 perl 写的,还有的是java、php 等,也有一些"不著名"的语言。它们比Apache 小得多。如此小的应用程序可以直接记住,系统地、严密地加以考虑,以证明它们的安全性或可伸缩性。小型Web 服务器包括:Cheetah Server,用不到一千行的C 代码编写而成。DustMote,一个非常小的Web 服务器,用一个大约 3000 字节的Tcl 源文件实现。fnord,大小取决于平台和配置,不超过20K。虽然很小,但是它支持虚拟主机、CGI 和keep-alive。ihttpd,使用不到800 行的C 代码,包括CGI,并通过inetd 提供页面。im-httpd,非常小的服务器-- 只有大约7 KB,链接到glibc。而且它也非常快。mattows,支持CGI,只有 600 行 C 代码。Scrinchy,虽然很小,不到 30KB,但是支持多种脚本编制语言,包括一种特殊用途的、基于栈的Sy 脚本语言。ZWS 演示了一个即使是使用500 多行带足够注释的zsh(!)编写的应用程序--在这里是一个HTTP 0.9+服务器-- 也可以有多强大。体积小并不妨碍这些服务器被正式使用。例如,fnord 可以处理数千个同时进行的连接。也许轻量级作为一个类别最令人印象深刻的成就是高性能服务器:cghttpd 是一个小型Web 服务器,它被理解为使用2.6 系列内核中可用的异步功能的一个试验品。darkhttpd 是一个快速的、单线程的 HTTP/1.1 服务器。Gatling 是为高性能设计的。它的特性包括FTP、IPv6、虚拟主机、CGI 等。Kernux 是一个Linux 内核模块,它实现了一个HTTP 守护进程。 lighttpd 是使用率排名第五的Web 服务器(排名还在上升)。它为很多同时进行的连接进行了优化:"典型的场景是使用lighttpd 作为一个下载(off-load)服务器,以提供静态内容…"LiteSpeed Web Server 是一款轻量级商业Web 服务器,强调性能和安全性。LiteSpeed Technologies 公司宣传为静态内容提速了 6 倍,在解释页面方面也有一定的提高。Miniature JWS,也称tjws,它是基于 Java 的Web 服务器,可以处理servlet、JSP 和数千个并发连接,而大小只有 77 KB。它的作者声称它"比Apache 2.x 快10%"。Yaws 是用Erlang 编写的一款高性能HTTP/1.1 服务器。有些Web 服务器被实现为类或库,以便嵌入到较大的应用程序中。在这些Web 服务器当中,我发现特别有趣的有:EHS--"嵌入式 HTTP 服务器",被设计为一个C++类,用于嵌入到较大的C++应用程序;还有 Embedded TCL Web Server,它是一个很普通的Web 服务器,支持SSL 和Basic Authentication,速度非常快--其作者使它至少与lighthttpd 和AOLserver 一样快。它是用不到100 行Tcl 编写的。Python 是几种适合不寻常环境的Web 服务器的实现语言,这些Web 服务器包括:cdServer 是一个小型的、用Python 编写的HTTP 服务器,它"被设计用来提供来自CD-ROM 的(静态)内容"。它在提供动态内容方面能力有限。我们有几个涉及不受影响的"live CDs"的项目,在这些项目中像cdServer 之类的工具很关键。edna,一款智能的用Python 编写的MP3 服务器,它是用HTTP 实现的。还有其他一些用Perl 和其他不出名的语言编写的轻量级Web 服务器:Camlserv,用ocaml 编写的一个完整的Web 服务器,目标是"高度交互式的Web 页面"。它由几千行ocaml 编写而成,其中大部分代码都与MySQL 和HTML 的特殊处理有关。dhttpd 用和Apache 相同的格式记录访问。它支持CGI,并具有内建的Perl 解释器、虚拟主机、IPv6、带宽管理和安全性等方面的特性。DNHTTPD 是用Perl 编写的,用于UNIX。它支持虚拟主机、SSL 连接、CGI 等。Jellybean 是用Perl 编写的基于HTTP 的Perl Object Server。lns.http 是一个Common LISP HTTP/1.1 Web 框架。Mongrel 是用 Ruby 编写的、用于HTTP 的一个库和服务器。Nanoweb 是用PHP 编写的一款快速、健壮的Web 服务器。它宣称具有丰富的特性,包括完全遵从HTTP/1.1、访问控制、身份验证、虚拟主机、SSL 兼容性等。Naridesh 是用Perl 编写的Web 服务器。OpenAngel 是用Perl 编写的。它强调的重点是安全性。Xavante 是用Lua 编写的HTTP/1.1 Web 服务器。XSP 是用C#编写的,用于运行ASP.NET。有时候您可能需要其他一些用 C 编写的、具有不常见的次要优势的轻量级 Web 服务器: ABYSS 可以在UNIX 和Win32 之间移植,其"目的是成为完全遵从HTTP/1.1 的 Web 服务器"。它占用的内存很少。Anti-Web HTTPD(也称"Anti-Web"、 "awhttpd"和"AW")是一款单进程、无线程、支持CGI 的服务器,它强调安全性和简单性。MHTTPD 支持从外部文件或LDAP 服务器进行的MHTTPD Basic Authentication。mini-httpd 可以在一个系统线程中处理多个并发请求,但是在主机上占用的内存或CPU 很少。Naken Web 类似于很多其他的轻量级服务器- -它支持Basic Authentication、静态内容等--但是它的作者将它设计为用于 Webcam 操作,并且在Gumstix、WRT54GL、OpenWrt 和其他新的平台上运行。 Null httpd 是一款多线程的、简单的、可移植的Web 服务器。Seminole 是一款商业 Web 服务器,内存需求较小,功能较多。thttpd throttle,支持 chroot、 Basic Authentication 等。Web 服务器远远不止是Apache 和IIS 的天下。您可以发现很多其他的Web 服务器,它们很小,易于理解,但是又足够快,可以被正式使用。