zoukankan      html  css  js  c++  java
  • ldap配置系列三:grafana集成ldap

    ldap配置系列三:grafana集成ldap

    grafana的简介

     grafana是一个类似kibana的东西,是对来自各种数据源的数据进行实时展示的平台,拥有这牛逼的外观。给一个官方的demo体验地址: https://play.grafana.org/d/000000012/grafana-play-home?orgId=1

    这里提供一个demo截图。

    grafana的安装

    grfana安装的官方参考: http://docs.grafana.org/installation/rpm/

    [root@VM_0_15_centos ~]# sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
    [root@VM_0_15_centos ~]# rpm -ql grafana |grep /etc
    /etc/grafana
    /etc/init.d/grafana-server
    /etc/sysconfig/grafana-server
    
    [root@VM_0_15_centos ~]# systemctl start grafana-server
    [root@VM_0_15_centos ~]# systemctl status grafana-server
    
    [root@VM_0_15_centos ~]# firewall-cmd --permanent  --add-port=3000/tcp
    success
    [root@VM_0_15_centos ~]# firewall-cmd --reload 
    success
    
    # 添加域名grafana.linuxpanda.tech 
    # web访问下grafana.linuxpanda.tech:3000 

    主界面如下: 

    默认的用户名和密码都是admin。

    ldap用户组和用户创建

    如果没有ldap服务,可以参考: https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_52_ldap.html

    这里我们使用 ldapadmin.exe 这个小软件连接到ldap服务, 在group这个ou里面添加一个grafana的ou,然后在grafana这个ou里面添加3个组, 对应管理,编辑和预览。

    创建三个用户test01,test02,test03 ,设置密码为oracle, 让其分别属于三个不同的组,方便后续的测试。

    ldap配置文件

    grafana的ldap配置官方参考: http://docs.grafana.org/installation/ldap/

    grafana.ini配置

    [root@VM_0_15_centos ~]# cd /etc/grafana/
    [root@VM_0_15_centos grafana]# ll
    total 24
    -rw-r----- 1 root grafana 13655 Sep  5 21:39 grafana.ini
    -rw-r----- 1 root grafana  3468 Sep  5 21:39 ldap.toml
    drwxr-xr-x 4 root grafana  4096 Sep  5 21:39 provisioning
    [root@VM_0_15_centos grafana]# cp ldap.toml  ldap.toml.default 
    [root@VM_0_15_centos grafana]# cp grafana.ini grafana.ini.default
    [root@VM_0_15_centos grafana]# chown grafana.grafana grafana.ini ldap.toml  [root@VM_0_15_centos grafana]# vim grafana.ini # 这个文件修改2项,log的其实没有必要,但是ldap调试比较麻烦,建议先开启debug,等配置好ldap后,在修改回去info级别。 [auth.ldap] enabled
    = true [log] level = debug

    配置前需要先做几个查询

    查询所有用户

    [root@VM_0_15_centos ~]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=people,dc=linuxpanda,dc=tech" 
    dn: ou=people,dc=linuxpanda,dc=tech
    objectClass: organizationalUnit
    ou: user
    ou: people
    
    dn: uid=test01,ou=people,dc=linuxpanda,dc=tech
    objectClass: posixAccount
    objectClass: top
    objectClass: inetOrgPerson
    gidNumber: 0
    givenName: test01
    sn: test01
    displayName:: 5rWL6K+VMQ==
    uid: test01
    homeDirectory: /home/test01
    loginShell: /bin/bash
    mail: test01@linuxpanda.tech
    cn:: 5rWL6K+VMQ==
    uidNumber: 55545
    userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9
    
    dn: uid=test02,ou=people,dc=linuxpanda,dc=tech
    objectClass: posixAccount
    objectClass: top
    objectClass: inetOrgPerson
    gidNumber: 0
    givenName: test02
    sn: test02
    displayName:: 5rWL6K+VMg==
    uid: test02
    homeDirectory: /home/test02
    loginShell: /bin/bash
    mail: test02@linuxpanda.tech
    cn:: 5rWL6K+VMg==
    uidNumber: 50880
    userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9
    
    dn: uid=test03,ou=people,dc=linuxpanda,dc=tech
    objectClass: posixAccount
    objectClass: top
    objectClass: inetOrgPerson
    gidNumber: 0
    givenName: test03
    sn: test03
    displayName:: 5rWL6K+VMw==
    uid: test03
    homeDirectory: /home/test03
    loginShell: /bin/bash
    mail: test03@linuxpanda.tech
    cn:: 5rWL6K+VMw==
    uidNumber: 46507
    userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9

    查询特定用户

    [root@VM_0_15_centos ~]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=people,dc=linuxpanda,dc=tech" "(uid=test01)"   
    dn: uid=test01,ou=people,dc=linuxpanda,dc=tech
    objectClass: posixAccount
    objectClass: top
    objectClass: inetOrgPerson
    gidNumber: 0
    givenName: test01
    sn: test01
    displayName:: 5rWL6K+VMQ==
    uid: test01
    homeDirectory: /home/test01
    loginShell: /bin/bash
    mail: test01@linuxpanda.tech
    cn:: 5rWL6K+VMQ==
    uidNumber: 55545
    userPassword:: e1NIQX1ReE5rdGtVUHhIek52Mm9pQmQvYkc2NjNsQkk9

    查询所有组

    [root@VM_0_15_centos grafana]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=grafana,ou=group,dc=linuxpanda,dc=tech"  
    dn: ou=grafana,ou=group,dc=linuxpanda,dc=tech
    objectClass: top
    objectClass: organizationalUnit
    ou: grafana
    
    dn: cn=grafana-admins,ou=grafana,ou=group,dc=linuxpanda,dc=tech
    objectClass: posixGroup
    objectClass: top
    cn: grafana-admins
    gidNumber: 49004
    memberUid: test01
    
    dn: cn=grafana-editors,ou=grafana,ou=group,dc=linuxpanda,dc=tech
    objectClass: posixGroup
    objectClass: top
    gidNumber: 34366
    cn: grafana-editors
    memberUid: test02
    
    dn: cn=grafana-viewers,ou=grafana,ou=group,dc=linuxpanda,dc=tech
    objectClass: posixGroup
    objectClass: top
    cn: grafana-viewers
    gidNumber: 25527
    memberUid: test03

     查询用户所在的组

    [root@VM_0_15_centos grafana]# ldapsearch  -LLL -w oracle   -x -H ldap://ldap.linuxpanda.tech -D"cn=admin,dc=linuxpanda,dc=tech" -b "ou=grafana,ou=group,dc=linuxpanda,dc=tech"   "(&(objectClass=posixGroup)(memberUid=test03))"
    dn: cn=grafana-viewers,ou=grafana,ou=group,dc=linuxpanda,dc=tech
    objectClass: posixGroup
    objectClass: top
    cn: grafana-viewers
    gidNumber: 25527
    memberUid: test03

    修改ldap.toml文件

    [root@VM_0_15_centos grafana]# vim ldap.toml
    [root@VM_0_15_centos grafana]# cat ldap.toml
    
    [[servers]]
    host = "ldap.linuxpanda.tech"
    port = 389
    use_ssl = false
    start_tls = false
    ssl_skip_verify = false
    
    bind_dn = "cn=admin,dc=linuxpanda,dc=tech"
    bind_password = 'oracle'
    
    search_filter = "(uid=%s)"
    
    search_base_dns = ["ou=people,dc=linuxpanda,dc=tech"]
    
    group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
    group_search_base_dns = ["ou=grafana,ou=group,dc=linuxpanda,dc=tech"]
    [servers.attributes]
    name = "givenName"
    surname = "sn"
    username = "uid"
    #member_of = "memberOf"
    member_of="cn"
    email =  "mail"
    
    [[servers.group_mappings]]
    group_dn = "grafana-admins"
    org_role = "Admin"
    
    [[servers.group_mappings]]
    group_dn = "grafana-editors"
    org_role = "Editor"
    
    [[servers.group_mappings]]
    group_dn = "grafana-viewers"
    #group_dn = "*"
    org_role = "Viewer"

    主要配置说明

    host:就是指定你的ldap服务器,可以指定多个,需要分隔符。

    port:你的ldap服务器的监听的端口。

    bind_dn: 你需要特定ou的管理员账号,我这里使用了域管理者。

    bind_password: 上面账号的密码。

    search_filter:  用户搜索的过滤表达式,配合search_base_dns。

    search_base_dns: 用户搜索的范围,这里在people这个ou里面搜索所有的用户,需要配合search_filter来完成用户的过滤。

    group_search_filter: 组搜索的过滤表达式,配合group_search_base_dns。

    group_search_base_dns: 指定组搜索的范围,我们的grafana这个ou里面设置了3个组。

    servers.attributes: 这个主要是用户获取特定提取到的用户条目有特定字段的提取, username从查询的用户信息取特定字段值作为grafana的用户名, 

                                  member_of 代表,根据group_search_base_dns和group_search_filter 得到特定的一个组后,取那个字段作为组名字。 这个取到的结果需要和下面的映射保持一致。

                                  email代表取特定用户的mail字段作为grafana用户的email信息。

    servers_group_mappings: 这个是用于定义ldap用户组和grafana角色组的映射关系的, 上面member_of ,group_search_base_dns和group_search_filter 这三个条件可以获取到ldap的组名,这里要和三个条件获取的一致。

    一张图说清楚

    修改完毕重启服务进行测试。

    最终结果图

    修改grafana的日志级别为info。

     

    调试

     判定ldap服务是否可通

    [root@VM_0_15_centos grafana]# telnet ldap.linuxpanda.tech 389
    Trying 58.87.98.84...
    Connected to ldap.linuxpanda.tech.
    Escape character is '^]'.

    确定开启了ldap配置

    检查grafana.ini文件确认有ldap=true启用的,默认去掉注释还是false,注意啦。

    关注日志信息

    主要的日志有2个,一个是grafana的日志, 一个是ldap的日志。

    [root@VM_0_15_centos grafana]# journalctl -f  
    Sep 05 22:51:50 VM_0_15_centos grafana-server[12052]: t=2018-09-05T22:51:50+0800 lvl=dbug msg="Ldap User found" logger=ldap info="(*login.LdapUserInfo)(0xc420030fc0)({
     DN: (string) (len=42) "uid=test01,ou=people,dc=linuxpanda,dc=tech",
     FirstName: (string) (len=6) "test01",
     LastName: (string) (len=6) "test01",
     Username: (string) (len=22) "test01@linuxpanda.tech",
     Email: (string) (len=22) "test01@linuxpanda.tech",
     MemberOf: ([]string) <nil>
    })
    "
    Sep 05 22:51:50 VM_0_15_centos grafana-server[12052]: t=2018-09-05T22:51:50+0800 lvl=dbug msg="Updating last user_seen_at" logger=context userId=2 orgId=1 uname=test01@linuxpanda.tech user_id=2
    [root@VM_0_15_centos grafana]# tail -f /var/log/slapd/slapd.log 

    参考 

    grafana官方帮助文档: http://docs.grafana.org/

  • 相关阅读:
    php反射类 ReflectionClass
    大写中文数字-財务
    Cookie/Session机制具体解释
    具体解释VB中连接access数据库的几种方法
    Hibernate Criterion
    hdu1151 Air Raid,DAG图的最小路径覆盖
    【收藏】十大Webserver漏洞扫描工具
    美国地名大全(美国城市名称英文、中文)
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    数据库索引的作用和长处缺点
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_51_ldap_for_grafana.html
Copyright © 2011-2022 走看看