慢慢地折腾的东西多了,发现帐号管理是个大问题。Gitlab,Blog,Wiki,Sentry,ownCloud……每个系统都是独立的用户,管理起来相当麻烦。久闻LDAP用户认证,今日得以一试,记之。
LDAP,Lightweight Directory Access Protocol,是一个轻量型目录访问协议。LDAP的一个常用使用方法是单点登录,用户可以在多个服务中使用同一个密码。在这里,我们将以OpenLDAP为例,在Ubuntu上进行安装配置,同时安装 phpLDAPadmin 来提供一个简单的web接口。
安装
Default
$ sudo apt-get update
# 安装过程中会要求输入一些信息,可以随意填写,后续我们将再进行重新配置
$ sudo apt-get install slapd ldap-utils
1
2
3$sudoapt-getupdate
# 安装过程中会要求输入一些信息,可以随意填写,后续我们将再进行重新配置
$sudoapt-getinstallslapdldap-utils
配置 slapd:
Default
$ sudo dpkg-reconfigure slapd
1$sudodpkg-reconfigureslapd
Omit OpenLDAP server configuration? No
DNS domain name?这个选项会决定目录的基本结构,如果没有自己的域名,也可以随便填写一个;
这里,我们以为例
Organization name?随意填写,我们以 example为例
Administrator password?管理员密码,安装的时候已经随意填写了一个,这次我们需要认真填写一个了;
数据库后端? HDB
Remove the database when slapd is purged? No
Move old database? Yes
Allow LDAPv2 protocol? No
接下来安装phpLDAPadmin,方便我们通过浏览器直接管理LDAP:
Default
$ sudo apt-get install phpldapadmin
1$sudoapt-getinstallphpldapadmin
配置
phpLDAPadmin
修改phpLDAPadmin配置文件,/etc/phpldapadmin/config.php:
Default
# LDAP 服务器IP或者域名
$servers->setValue('server','host','127.0.0.1');
# 修改基本的目录结构
$servers->setValue('server','base',array('dc=test,dc=com'));
# 修改登陆用户
$servers->setValue('login','bind_id','cn=admin,dc=test,dc=com');
# 隐藏警告信息,因为这些信息大多数没用
$config->custom->appearance['hide_template_warning'] = true;
# 限制匿名登陆
$servers->setValue('login','anon_bind', false);
# 或者还可以设置登陆限制
$servers->setValue('login','allowed_dns',array=('cn=admin,dc=test,dc=com'));
1
2
3
4
5
6
7
8
9
10
11
12
13# LDAP 服务器IP或者域名
$servers->setValue('server','host','127.0.0.1');
# 修改基本的目录结构
$servers->setValue('server','base',array('dc=test,dc=com'));
# 修改登陆用户
$servers->setValue('login','bind_id','cn=admin,dc=test,dc=com');
# 隐藏警告信息,因为这些信息大多数没用
$config->custom->appearance['hide_template_warning']=true;
# 限制匿名登陆
$servers->setValue('login','anon_bind',false);
# 或者还可以设置登陆限制
$servers->setValue('login','allowed_dns',array=('cn=admin,dc=test,dc=com'));
配置Nginx
Default
$ sudo ln -sv /usr/share/phpldapshare/htdocs /var/www
1$sudoln-sv/usr/share/phpldapshare/htdocs/var/www
然后添加Nginx配置文件,这里还可以添加 htpasswd 访问限制;
Default
# phpLDAPadmin
server {
listen 80;
root /var/www/phpldapadmin;
index index.html index.htm index.php;
server_name ldap.chenjiehua.me;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# phpLDAPadmin
server{
listen80;
root/var/www/phpldapadmin;
indexindex.htmlindex.htmindex.php;
server_nameldap.chenjiehua.me;
location/{
try_files$uri$uri//index.html;
}
location~\.php${
fastcgi_passunix:/var/run/php5-fpm.sock;
fastcgi_indexindex.php;
includefastcgi_params;
}
}
然后就可以通过浏览器来访问 ldap 了。
SLDAP
默认情况下,OpenLDAP并没有开启 memberof,参考官方文档 12.8 节,再参考这篇How to enable MemberOf using OpenLDAP文章解决:
首先创建两个节点:Groups node
People node
Default
# 保存为文件 add_nodes.ldif
dn: ou=people,dc=test,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=groups,dc=test,dc=com
objectClass: organizationalUnit
ou: Groups
1
2
3
4
5
6
7
8# 保存为文件 add_nodes.ldif
dn:ou=people,dc=test,dc=com
objectClass:organizationalUnit
ou:People
dn:ou=groups,dc=test,dc=com
objectClass:organizationalUnit
ou:Groups
Default
$ ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_nodes.ldif
1$ldapadd-x-Dcn=admin,dc=example,dc=com-W-fadd_nodes.ldif
再添加三个文件memberof_config.ldif,refint1.ldif,refint2.ldif
Default
# memberof_config.ldif
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib/ldap
dn: olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# memberof_config.ldif
dn:cn=module,cn=config
cn:module
objectClass:olcModuleList
olcModuleLoad:memberof
olcModulePath:/usr/lib/ldap
dn:olcOverlay={0}memberof,olcDatabase={1}hdb,cn=config
objectClass:olcConfig
objectClass:olcMemberOf
objectClass:olcOverlayConfig
objectClass:top
olcOverlay:memberof
olcMemberOfDangling:ignore
olcMemberOfRefInt:TRUE
olcMemberOfGroupOC:groupOfNames
olcMemberOfMemberAD:member
olcMemberOfMemberOfAD:memberOf
Default
# refint1.ldif
dn: cn=module{1},cn=config
add: olcmoduleload
olcmoduleload: refint
1
2
3
4# refint1.ldif
dn:cn=module{1},cn=config
add:olcmoduleload
olcmoduleload:refint
Default
# refint2.ldif
dn: olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner
1
2
3
4
5
6
7
8# refint2.ldif
dn:olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
objectClass:olcConfig
objectClass:olcOverlayConfig
objectClass:olcRefintConfig
objectClass:top
olcOverlay:{1}refint
olcRefintAttribute:memberofmembermanagerowner
执行
Default
$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
1
2
3$sudoldapadd-Q-YEXTERNAL-Hldapi:/// -f memberof_config.ldif
$sudoldapmodify-Q-YEXTERNAL-Hldapi:/// -f refint1.ldif
$sudoldapadd-Q-YEXTERNAL-Hldapi:/// -f refint2.ldif
如果觉得《ldap 统一认证 java_LDAP统一用户认证》对你有帮助,请点赞、收藏,并留下你的观点哦!