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)({\n DN: (string) (len=42) \"uid=test01,ou=people,dc=linuxpanda,dc=tech\",\n FirstName: (string) (len=6) \"test01\",\n LastName: (string) (len=6) \"test01\",\n Username: (string) (len=22) \"test01@linuxpanda.tech\",\n Email: (string) (len=22) \"test01@linuxpanda.tech\",\n MemberOf: ([]string) <nil>\n})\n" 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/