LDAP统一用户认证
目录
慢慢地折腾的东西多了,发现帐号管理是个大问题。Gitlab,Blog,Wiki,Sentry,ownCloud……每个系统都是独立的用户,管理起来相当麻烦。久闻LDAP用户认证,今日得以一试,记之。
LDAP,Lightweight Directory Access Protocol,是一个轻量型目录访问协议。LDAP的一个常用使用方法是单点登录,用户可以在多个服务中使用同一个密码。在这里,我们将以OpenLDAP为例,在Ubuntu上进行安装配置,同时安装 phpLDAPadmin 来提供一个简单的web接口。
安装
$ sudo apt-get update # 安装过程中会要求输入一些信息,可以随意填写,后续我们将再进行重新配置 $ sudo apt-get install slapd ldap-utils
配置 slapd:
$ sudo dpkg-reconfigure slapd
- Omit OpenLDAP server configuration? No
- DNS domain name?
- 这个选项会决定目录的基本结构,如果没有自己的域名,也可以随便填写一个;
- 这里,我们以 test.com 为例
- Organization name?
- 随意填写,我们以 example 为例
- Administrator password?
- 管理员密码,安装的时候已经随意填写了一个,这次我们需要认真填写一个了;
- 数据库后端? HDB
- Remove the database when slapd is purged? No
- Move old database? Yes
- Allow LDAPv2 protocol? No
接下来安装phpLDAPadmin,方便我们通过浏览器直接管理LDAP:
$ sudo apt-get install phpldapadmin
配置
phpLDAPadmin
修改phpLDAPadmin配置文件,/etc/phpldapadmin/config.php:
# 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
$ sudo ln -sv /usr/share/phpldapshare/htdocs /var/www
然后添加Nginx配置文件,这里还可以添加 htpasswd 访问限制;
# 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; } }
然后就可以通过浏览器来访问 ldap 了。
SLDAP
默认情况下,OpenLDAP并没有开启 memberof,参考官方文档 12.8 节,再参考这篇How to enable MemberOf using OpenLDAP文章解决:
首先创建两个节点:
- Groups node
- People node
# 保存为文件 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
$ ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_nodes.ldif
再添加三个文件 memberof_config.ldif, refint1.ldif,refint2.ldif
# 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
# refint1.ldif dn: cn=module{1},cn=config add: olcmoduleload olcmoduleload: refint
# 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
执行
$ 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
码字很辛苦,转载请注明来自ChenJiehua的《LDAP统一用户认证》
2016-03-19 2016-03-21 ldap, authenticate
评论