LDAP,Light Directory Access Portocol,基于X.500标准的轻量级目录访问协议。OpenLDAP是LDAP的自由和开源的实现
许多开源工具都支持LDAP认证,这样只需要管理LDAP,不需要各个软件都单独管理帐号,极大减少维护帐号的工作。建议使用LDAP,将开源工具集成LDAP认证。
OpenLDAP安装及配置
操作系统版本:ubuntu 18.04
假设 ip : 192.168.3.5
域名: example.com
admin账户密码:123456
直接在物理机上安装
安装命令
sudo apt install slapd ldap-utils
配置
在/etc/ldap/ldap.conf, 添加BASE 和 URI。LDAP默认的端口号是389
BASE dc=example,dc=com
URI ldap://192.168.3.5:389
重新加载配置,如果需要重新修改域名,则使用这个命令,如果域名已经设置好了,可以忽略
sudo dpkg-reconfigure slapd
大概需要输入内容如下
No -> DNS domain:example.com -> organization name: example -> 密码 -> 确认密码 -> yes -> MDB ->no -> yes
验证安装
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
#-b 参数值,使用的是/etc/ldap/ldap.conf中配置的BASE
ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn
问题
执行ldapsearch -x
时出现下面的错误信息:
"ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)"
原因:在/etc/ldap/ldap.conf中配置IP和端口号错了,所以报了网络的错。
使用docker安装
拉取docker镜像
docker pull osixia/openldap
创建容器
docker run -d -p <宿主机映射389的端口>:389 -p <宿主机映射636的端口>:636 --name <容器名称> \
--network bridge --hostname openldap --restart=always \
--env LDAP_ORGANISATION="example" \
--env LDAP_DOMAIN="example.com" \
--env LDAP_BASE_DN="dc=example,dc=com" \
--env LDAP_ADMIN_PASSWORD="123456" \
osixia/openldap:latest
安装phpLDAPadmin
phpLDAPadmin是一款可以在页面上管理OpenLDAP的软件,实现可视化管理OpenLDAP。
安装命令
sudo apt-get install -y phpldapadmin
配置
在/etc/phpldapadmin/config.php文件中添加OpenLDAP信息,修改文件中下面几个参数
/*设置openldap的ip*/
$servers->setValue('server','host','192.168.3.5');
/*设置openldap的端口号,默认是389;如果是docker安装,填写宿主机映射389的端口*/
$servers->setValue('server','port',389);
/*填写openldap的最顶端的dn*/
$servers->setValue('server','base',array('dc=example,dc=com'));
/*填写admin的dn*/
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
$config->custom->appearance['hide_template_warning'] = true;
验证
访问链接:http://192.168.3.5/phpldapadmin
报错
打开登录phpldapadmin报错,报错信息如下:
Deprecated: Function create_function() is deprecated in /usr/share/phpldapadmin/lib/functions.php on line 1083
原因
:create_function存在漏洞,php在5.3版本及更高版本之后就不再支持create_function的用法了,而当前机器的php版本是7.2.x。
解决
:将当前机器的php的版本降低。如果当前机器是服务器的话,不建议修改php版本,可能会影响其他操作。
ubuntu18.04上没有php5.3之前的版本,以下是切换php版本的参考步骤。
#添加php的源
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
#下载php5.x版本
sudo apt-get install -y php5.6
#查看当前机器上的php的版本,这个命令也能修改默认的版本
sudo update-alternatives --config php
# 从7.2.x切到5.6
sudo update-alternatives --set php /usr/bin/php5.6
LDAP命令使用
添加
ldapadd -x -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 -f add.ldif
add.ldif示例如下
#创建部门
dn: ou=departmentA,dc=example,dc=com
objectClass: organizationalUnit
ou: departmentA
#创建帐号
dn: cn=test,ou=departmentA,dc=example,dc=com
objectClass: inetOrgPerson
uid: test
sn: test
cn: test
displayName: 测试帐号
mail: [email protected]
ou: departmentA
userPassword:123456
查询
ldapsearch -x -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 -b <要查询内容的dn>
删除
删除具体帐号:
ldapadd -x -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 cn=test,ou=departmentA,dc=example,dc=com
删除某个ou
#删除没有子条目的ou
ldapadd -x -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 ou=departmentA,dc=example,dc=com
#删除有子条目的ou,加个 -r 选项
ldapadd -x -r -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 ou=departmentA,dc=example,dc=com
修改
ldapadd -x -D cn=admin,dc=example,dc=com -h 192.168.3.5 -p 389 -w 123456 -f modify.ldif
modify.ldif示例
dn: cn=test,ou=departmentA,dc=example,dc=com
changetype: modify
replace: mail
mail: [email protected]
-
replace: displayName
displayName: 临时测试帐号
-
replace: userPassword
userPassword: 321