• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<三>openLDAP学习笔记–集成zabbix,Jenkins,Gitlab,jumpserver,harbor,NGINX实战

LDAP eryajf 2周前 (11-03) 114°C 已收录 0个评论
本文预计阅读时间 19 分钟

网上有很多文章,都是在介绍了部署之后,就完事儿了,真正系统认真地把实际应用场景中的配置内容分享的,则是少之又少,有分享的,也都是含糊不清,让人难以学习,这里我特别将日常生产中常用的一些软件配置方式,一一过了一遍,并整理分享,愿阅读本篇文章的你能有所收获。

另外,我所分享出来的,可能只是我个人的一种思路方案,如果您有更加简便合理的方案,欢迎留言分享交流!

1,zabbix配置LDAP

zabbix在配置起来是比较简单的,我们直接使用最外层的用户授权即可,亦即不用过分深入再对用户进行分组管理,因为zabbix自身还会有一层授权控制。

那么所有的配置如下图所示:

image-20191020233943407

说明:

  • 认证方式:选择LDAP。
  • LDAP主机:可以填IP,这里我写了配置LDAP时用的域名,注意记得将此域名写入到本机hosts解析。
  • 端口:默认389.
  • 基于DN:此处填写 ou=People,dc=eryajf,dc=net,表示用户基于People这一分组下维护。
  • 搜索属性:uid。
  • 绑定DN:此处填写 cn=admin,dc=eryajf,dc=net,表示绑定到根域上去。
  • 登陆:Admin,这个用户与zabbix管理账户重叠,但是要注意需要先在LDAP中创建此用户,并设置密码。
  • 用户密码:将上一步创建用户的密码写在这里,点击测试,如果没毛病,将会通过测试。

2,Gitlab。

默认情况下,Gitlab没有开启ldap的认证,这个功能需要通过配置文件来启用,所以在现有Gitlab中,往配置文件里边添加如下配置:

cat /etc/gitlab/gitlab.rb

external_url 'http://10.133.205.206'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = 'Linuxlql@163.com'
gitlab_rails['smtp_password'] = "xxxxxxx"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = :plain
#gitlab_rails['smtp_authentication'] = "login"
#gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['gitlab_email_from'] = "Linuxlql@163.com"
user["git_user_email"] = "Linuxlql@163.com"
git_data_dir "/home/git"

gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
  'label' => 'OpenLDAP', # 随便自定义
  'host' =>  '10.3.0.42',   # ldap的server地址
  'port' => 389,    # ldap端口
  'uid' => 'sn',    # 配置为cn或者sn都可以,但要注意用户名称将会以此处配置为依据
  'encryption' => 'plain',  # 加密
  'bind_dn' => 'cn=admin,dc=eryajf,dc=net', # 管理员账号
  'password' => 'eryajf@456',   # 管理员密码
  'active_directory' => false,
  'base' => 'ou=People,dc=eryajf,dc=net',   # 核心配置,表示从哪一层读取用户信息
  'allow_username_or_email_login' => true,  # 是否启用邮件作为用户名登陆
  'verify_certificates' => true,    #
  }
}

配置添加之后,依旧像安装时候那样,重载一下配置:

gitlab-ctl reconfigure

重载过程如果不报错,可以使用如下命令验证功能是否可用:

$ gitlab-rake gitlab:ldap:check

Checking LDAP ...

LDAP: ... Server: ldapmain
LDAP authentication... Success
LDAP users with access to your GitLab server (only showing the first 100 results)
    DN: uid=test01,ou=people,dc=eryajf,dc=net    cn: ceshi
    DN: uid=test02,ou=people,dc=eryajf,dc=net    cn: test02
    DN: uid=test03,ou=people,dc=eryajf,dc=net    cn: test03
    DN: uid=admin,ou=people,dc=eryajf,dc=net     cn: Admin
    DN: uid=liql,ou=people,dc=eryajf,dc=net  cn: liql

Checking LDAP ... Finished

可以看到会刷出来当前所有的用户,此时配置就已经完成了,再次访问Gitlab,发现已经多了一个ldap登陆的选项。

image-20191024192805089

使用ldap用户名密码进行登陆即可,此时登陆进去是没有任何项目的权限,如果需要某权限,可以对用户进行组或者单项目的授权。

3,Jenkins

以上两种应用,都是基于最外层的用户进行管理的,并没有再细化分组,这种配置方式,是有其原因的,因为两者都是在默认登陆之后,用户无任何权限,需要通过管理员重新授权,从而获得相应的权限。

而Jenkins就不太一样了,Jenkins启用了ldap登陆之后,默认是登录用户就是管理员权限,尽管我们还可以通过更细化权限划分的插件来实现管控,但是这仍然让人觉得不那么优雅。

因此,在Jenkins这里,打算采用基于应用分组的方式进行配置。

配置之前,首先创建用户以及应用组,那么授权的时候,直接针对应用组授权即可。

创建普通用户:

  • 在People之下点击创建新条目
  • 模板选择默认
  • ObjectClasses选择inetOrgPerson,然后点击继续
  • 从上而下填写,RDN选择 User Name(uid)
  • 然后开始正式的人员信息填写
    • cn:zhangs
    • sn:zhangs
    • displayName:张三
    • 电子邮件:zhangs@qq.com
    • ou:People
    • 密码:123456
    • User Name:zhangs

然后点击创建,提交之后,一个普通用户就创建成功了。一般情况下,应用直接通过这一曾来管理用户即可。

但是有些情况下,再另外拉出来一个分组,从软件的角度来分组,会更好一些。

创建一个应用组:

  • 在Group之下创建新条目
  • 模板选择默认
  • ObjectClasses选择groupOfNames,然后点击继续
  • 从上而下填写,RDN选择 cn(cn)
  • 然后开始填写组信息
    • cn:jenkins
    • member:点击后边的搜索框,选择将要包含的用户

然后点击创建,提交之后,就创建了一个jenkins组,配置ldap的时候,可以基于这个组来进行管理。

创建完成后的架构模式如下:

image-20191024210149443

可以看到,此时在Jenkins这个组里边,加入了三个用户,实际生产当中,原有用户应该已经存在,此时可以新增群组,然后将需要访问Jenkins应用的用户,加入进来,而没有加入这个组的用户,将无法访问。

下边进入正式配置,新版本的Jenkins已经默认集成了ldap,因此不需要额外安装插件,直接点击系统管理—>Configure Global Security,按照下边的内容,进行配置即可。

image-20191024210039994

配置完成,下边会有一个test,此时可以用其中一个账号密码进行测试,看到如下输出,则说明配置成功:

image-20191024210612711

保存之后,就可以通过ldap当中,Jenkins组内的用户名密码进行登陆了,这里只是解决了用户能够登陆Jenkins的问题,具体Jenkins中详细的用户权限分配,可以参考这篇文章进行配置

4,jumpserver

直接进入到jumpserver的系统设置里边,如下内容,进行配置,几项工具配置下来,基本上都熟悉了各个配置的概念了。

image-20191025163733208

配置完毕,可以点击测试连接,会看到导入几个用户的提示,然后点击提交配置,提交之后,可以点击一键导入,将对应用户导入进来:

image-20191025163956397

然后点击导入,即可将ldap中的用户导入到jumpserver中了。

5,harbor

常规来讲,harbor的认证,也像zabbix那样,只取用ldap最外层即可,也就是People下的所有人,都可以登录harbor,然后再针对不同的项目,对不同的用户进行授权即可。

这种配置比较简单,如下图所示:

image-20191029135235857

配置完成之后,可以点击一下测试看看效果,如果成功,则可以保存启用。

当然,如果人员数量很大,也可以走按组分配的方向,可以基于如上配置进行:

image-20191029140020957

同样,先测试是否可用,成功之后点击保存即可。保存之后,可以用其中一个用户进行登陆验证,可以在用户设置里边看到来自于LDAP。

image-20191029140226307

6,NGINX

NGINX基于ldap的认证,一旦出手,谁与争锋,日常业务当中,有太多页面内容,通过NGINX代理,有时需要添加认证以提高安全,使用NGINX的密码策略,又极不方便,容易出现一个账号多人使用的情况,而今接入到ldap,所有权限回归到ldap中,简直不要太优雅。

NGINX基于ldap的认证需要 nginx-auth-ldap模块儿,可以在原有已经在用的NGINX中,添加进去,或者直接全新的NGINX进行配置。

cd /opt
git clone https://github.com/nginxinc/nginx-ldap-auth

然后编译安装NGINX:

tar xf nginx-1.14.0.tar.gz

yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel libxslt-devel 

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --add-module=/opt/nginx-auth-ldap

make && make install

然后进入正式配置:

$cat /usr/local/nginx/conf/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    log_format json escape=json '{ "remote_addr": "$remote_addr",'
                           '"@timestamp":"$time_iso8601",'
                           '"request_uri": "$request_uri",'
                           '"verb": "$request_method",'
                           '"httpversion": "$server_protocol",'
                           '"response": "$status", '
                           '"body_bytes_sent": "$body_bytes_sent", '
                           '"referrer": "$http_referer", '
                           '"user_agent": "$http_user_agent", '
                           '"server_name": "$host",'
                           '"request_time": "$request_time",'
                           '"upstream_response_time": "$upstream_response_time",'
                           '"realpath_root": "$realpath_root",'
                           '"cookie": "$http_cookie",'
                           '"request_body": "$request_body",'
                           '"nginx_version": "$nginx_version",'
                           '"scheme": "$scheme"}';
    access_log /data/log/tmp.log json;
    error_log /data/log/error.log;

    ldap_server test {
    url ldap://10.3.0.42:389/DC=eryajf,DC=net?cn?sub?(objectClass=person);
    binddn "cn=admin,dc=eryajf,dc=net";
    binddn_passwd 123465;
        require valid_user;
    }

    ldap_server test_ldap1 {
        url "ldap://10.3.0.42:389/DC=eryajf,DC=net?uid?sub?(&(objectClass=organizationalPerson))";
        binddn "cn=admin,dc=eryajf,dc=net";
        binddn_passwd "123456";
        require valid_user;
        #group_attribute People;
        #group_attribute_is_dn on;
    #require group "cn=jenkins,ou=Group,dc=eryajf,dc=net";
    }

    server {
        listen       80;
        server_name  localhost;
        location / {
            auth_ldap "Forbidden";
            auth_ldap_servers test_ldap1;
            root   /usr/share/nginx/html;
        }
    }
}

说明:最开始我使用的 test的配置,对于许多地方并没有过于在意,但是在请求的时候,总是进入死循环,输入用户名密码之后又跳入到了让输入用户名密码的界面,然后错误日志里边打印了一条:[error] 11539#0: *388 http_auth_ldap: Could not find user DN,,然后在官方issue中,看到一个不错的解答:https://github.com/kvspb/nginx-auth-ldap/issues/133

最后根据回答里边说明的,结合自己配置的实际情况,使用了 test_ldap1这个server,整体验证通过。

Oct-30-2019 17-18-38

然后就可以利用这种思路,给很多web界面套上这种管理方案了。


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<三>openLDAP学习笔记–集成zabbix,Jenkins,Gitlab,jumpserver,harbor,NGINX实战
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!