一、OpenLDAP简介
OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
使用轻量级目录访问协议(LDAP)构建集中的身份验证系统可以减少管理成本,增强安全性,避免数据复制的问题,并提高数据的一致性。
通常,在实际工作环境中,都会通过LDAP来构建一个统一的账号管理、身份验证平台,实现SSO单点登录机制。
二、写在前面
LDAP这个东西,是公司准备实现统一用户身份认证所了解到的,之前完全没有概念, 网上搜索了一些基础,理论知识,简直蒙圈了,实在是太抽象了。后来一想, 理论的知识先大概有个了解, 先动手让ldap跑起来再说其他, 在动手做的时候,如果遇到问题在回头过去查阅资料,说不定慢慢就会理解了。
第一次搭建OpenLDAP的时候,查阅了很多论坛、博客的帖子,发现好多都是讲的不够完善,或者是点到即止,在安装和配置遇到问题的时候,总要浪费很大一部分时间来游走于各大搜索引擎去寻根问药,相当痛苦,下面就是结合网友以及自己尝试摸索的过程,总结成文,希望能够帮助到有需要的朋友。
配置环境:@H_403_57@
服务器操作系统: CentOS 6.5 x86_64,RHEL/Suse 应该都类似
OpenLDAP版本:OpenLDAP 2.4
其实如果不是对LDAP各种参数要求都十分严格的情况下,比较建议采用 yum 的方式安装。因为相关依赖环境,功能都十分全面,对于初学者,强烈建议第一次使用yum来安装。
准备环境:
确保SELinux关闭:
#getenforce 1、临时关闭 #setenforce0 2、永久关闭 #vi/etc/selinux/config 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可
设定iptables防火墙规则:
#vim/etc/sysconfig/iptables *filter :INPUTACCEPT[0:0] :FORWARDACCEPT[0:0] :OUTPUTACCEPT[0:0] -AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT -AINPUT-picmp-jACCEPT -AINPUT-ilo-jACCEPT -AINPUT-mstate--stateNEW-mtcp-ptcp--dport22-jACCEPT -AINPUT-mstate--stateNEW-mtcp-ptcp--dport80-jACCEPT -AINPUT-mstate--stateNEW-mtcp-ptcp--dport389-jACCEPT-s192.168.1.0/16 -AINPUT-mstate--stateNEW-mtcp-ptcp--dport636-jACCEPT-s192.168.1.0/16 -AINPUT-jREJECT--reject-withicmp-host-prohibited -AFORWARD-jREJECT--reject-withicmp-host-prohibited COMMIT 重新加载后如下: #iptables-L ACCEPTtcp--anywhereanywherestateNEWtcpdpt:ssh ACCEPTtcp--anywhereanywherestateNEWtcpdpt:http ACCEPTtcp--192.168.1.0/16anywherestateNEWtcpdpt:ldap ACCEPTtcp--192.168.1.0/16anywherestateNEWtcpdpt:ldaps
同步系统时间:
#ntpdatetime.nist.gov
三、安装OpenLDAP服务
1、yum 安装所需软件
#yuminstall-yopenldap-* #yuminstall-ycompat-openldap#这个包和主从配置有很大关系
2、安装完成后,准备配置文件
#cp/usr/share/openldap-servers/slapd.conf.obsolete/etc/openldap/slapd.conf
OpenLDAP相关配置文件:
/etc/openldap/slapd.conf主配置文件,管理员dn,密码,日志配置,权限等设置
3、创建LDAP管理员密码
LDAP可以支持明文密码,但是我们强烈建议使用加密密码。 通过 slappasswd 命令创建加密密码,返回一串密文,先复制保存一下,下一步需要在LDAP配置文件中使用。
ps. 这里我输入的密码是: ldap
#slappasswd Newpassword: Re-enternewpassword: {SSHA}5EkFHScR0hN0r3oRhd0aP4tyJ0ByopCd
4、进入 /etc/openldap 目录下,编辑 slapd.conf 配置文件。
主要修改的地儿,suffix,rootdn,rootpw, rootdn 其实就是openldap的管理员。
优化:
checkpoint2048 10 # 设置把内存中的数据写回数据文件的操作,此处的设置表示每达到 2048K 或者 10分钟执行一次 checkpoint,即写入数据文件的操作。
cachesize1000# 设置LDAP可以缓存的记录数
#cp/etc/openldap/slapd.conf/etc/openldap/slapd.conf.ori #vi/etc/openldap/slapd.conf .... #enableserverstatusmonitoring(cn=monitor) databasemonitor accessto* bydn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"read bydn.exact="cn=Manager,dc=test,dc=com"read by*none ####################################################################### #databasedefinitions ####################################################################### databasebdb suffix"dc=test,dc=com" checkpoint102415 rootdn"cn=Manager,dc=com" #Cleartextpasswords,especiallyfortherootdn,should #beavoided.Seeslappasswd(8)andslapd.conf(5)fordetails. #USEOfstrongauthenticationencouraged. #rootpwsecret #rootpw{crypt}ijFYNcSNctBYg rootpw{SSHA}5EkFHScR0hN0r3oRhd0aP4tyJ0ByopCd ....... 保存退出。
当然,也可以如下设置明文密码:
5、BerkeleyDB配置。 拷贝 DB_CONFIG 文件到指定目录, 否则后续会报错: warning - no DB_CONFIG file found in directory /var/lib/ldap
PS: OpenLDAP默认使用的是伯克利数据库作为后台数据存储介质,在OpenLDAP-Servers包中已经包含了,直接把配置文件复制到相关目录即可。
#cp/usr/share/openldap-servers/DB_CONFIG.example/var/lib/ldap/DB_CONFIG
6、删除 /etc/openldap/slapd.d 目录下所有的文件,否则后续在使用 ldapadd 命令的时候会报错
PS: 默认情况下,/etc/openldap/slapd.d目录下有一些默认的配置文件,必须删除,然后重新建议,这一步很重要
这是因为 2.4 和 2.3 配置文件兼容性问题导致, 参考: http://www.openldap.org/doc/admin24/appendix-common-errors.html
#rm-rf/etc/openldap/slapd.d/*
7、配置相应目录权限
#chown-Rldap:ldap/var/lib/ldap/ #chown-Rldap:ldap/etc/openldap/
8、启动 LDAP 的 slapd 服务, 并设置开机启动
#chkconfigslapdon #serviceslapdstart
#slaptest-f/etc/openldap/slapd.conf-F/etc/openldap/slapd.d configfiletestingsucceeded 然后重新赋予配置文件的权限: #chown-Rldap:ldap/etc/openldap/slapd.d
10、重新启动 LDAP 的 slapd 服务
#serviceslapdrestart
使用 netstat -tulpn 查看服务是否正常启动
11、开启 SSL
#vim/etc/sysconfig/ldap SLAPD_LDAPS=yes
我们可以看到, OpenLDAP监听端口:
默认监听端口: 389 (明文数据传输)
加密监听端口: 636 (加密数据传输)
四、给OpenLDAP添加日志功能,添加如下内容 1、编辑 /etc/openldap/slapd.conf
#vim/etc/openldap/slapd.conf loglevel296
2、编辑 /etc/rsyslog.conf
#vim/etc/rsyslog.conf local4.*/var/log/ldap.log
3、重启服务
#servicersyslogrestart #serviceslapdrestart
五、迁移用户数据到OpenLDAP
系统用户通常保存在 /etc/passwd,/etc/shadow文件内,所以我们需要迁移用户数据到openldap数据库。但是LDAP只能识别特定格式的文件,即后缀为 ldif 的文件(也是文本文件),所以不能直接使用 /etc/passwd,/etc/shadow直接导入。 最简单的方法是使用padl提供的迁移工具包,是一系列perl编写的脚本, migrationtools 工具,之前的openldap包中已经包含了这些脚本,但是在redhat6.5中已经没有了,要单独下载。
1、安装配置 migrationtools
#yuminstall-ymigrationtools
2、切换到 migrationtool 目录下,进行基本配置
#cd/usr/share/migrationtools/ 编辑migrate_common.ph #vimigrate_common.ph ... #DefaultDNSdomain $DEFAULT_MAIL_DOMAIN="test.com"; #Defaultbase $DEFAULT_BASE="dc=test,dc=com"; ....... 保存退出。:-)
a、在目录MigrationTools里面使用migrate_base.pl脚本生成基本的数据结构
#./migrate_base.pl>/tmp/base.ldif 导入数据: ##-w指定你在slapd.conf中设置的管理员密码,也可以使用-W,交互式输入密码 ##-f指定数据文件的路径 ##我们之前设定的密码:ldap #ldapadd-x-D"cn=Manager,dc=com"-wldap-f/tmp/base.ldif 查询已经导入数据库的数据: #ldapsearch-h-Hldap://192.168.1.35-b"dc=test,dc=com"
b、在目录MigrationTools里面使用migrate_passwd.pl 和 migrate_group.pl 脚本将 /etc/passwd,/etc/group文件中的用户转化为 ldap 可以识别的数据结构 ldif 格式的文件
#./migrate_passwd.pl/etc/passwd/tmp/passwd.ldif #./migrate_group.pl/etc/group/tmp/group.ldif 导入数据: #ldapadd-x-D"cn=Manager,dc=com"-wldap-f/tmp/passwd.ldif #ldapadd-x-D"cn=Manager,dc=com"-wldap-f/tmp/group.ldif
c、在实际生产环境中,并不会把 /etc/passwd 和 /etc/group 中的用户全部用 ldap 管理起来, 我们只需要让实际用户被 ldap 管理即可,所以生产中按照如下规则操作:
#ldapdelete-x-D"cn=Manager,dc=com"-wldap-r"dc=test,dc=com"
建立测试用户 ldapuser01,ldapuser02,把这两个用户导入ldap数据库中
#useraddldapuser01 #useraddldapuser02 #passwdldapuser01 #passwdldapuser02 我们只把需要的用户导入ldap数据库中 #grepldap*/etc/passwd>/tmp/passwd #grepldap*/etc/group>/tmp/group #./migrate_base.pl>/tmp/base.ldif #./migrate_passwd.pl/tmp/passwd>/tmp/passwd.ldif #./migrate_group.pl/tmp/group>/tmp/group.ldif #ldapadd-x-D"cn=Manager,dc=com"-wldap-f/tmp/base.ldif #ldapadd-x-D"cn=Manager,51);font-family:'Microsoft Yahei';line-height:20px;text-indent:28px;font-size:14px;">
六、安装 PHPLDAPadmin
安装EPEL仓库
#rpm-ivhhttp://mirrors.ukfast.co.uk/sites/dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rp安装PHPLDAPadmin
#yuminstall-yPHPldapadmin修改 PHPldapadmin配置文件(该文件会自动创建),添加访问权限
#vim/etc/httpd/conf.d/PHPldapadmin.conf 在这行后面添加 Allowfrom::1 Allowfrom192.168.1//这里修改为你自己的ip段#vim/etc/PHPldapadmin/config.PHP #(line398) //$servers->setValue('login','attr','uid'); #(line530) $servers->newServer('ldap_pla'); $servers->setValue('server','name','LDAPServer'); $servers->setValue('server','host','127.0.0.1'); $servers->setValue('server','port',389); $servers->setValue('server','base',array('dc=test,dc=com')); $servers->setValue('login','auth_type','session'); $servers->setValue('login','bind_id','dc=test,dc=com'); $servers->setValue('login','bind_pass','ldap'); $servers->setValue('server','tls',false);配置完成后,启动apache
#chkconfighttpdon #servicehttpdstart然后通过浏览器进行访问: http://192.168.1.35/ldapadmin/ (这个ip 换成你自己的实际ip)
这里需要注意的是: Login DN: 一定要是完整的 DN, 而不是 RDN。
密码就是我们前面 slappasswd 命令设置的密码, 也就是ldap管理员 rootdn(Manager)的密码,然后就登录成功了。
七、安装 LAM(和PHPLDAPadmin功能相似的GUI工具,可选 )
下载ldap-account-manager包,我这里下载的是较老的版本4.6 ,(最新版应该 6.0了)。
如果没有lamp环境 #yuminstall-yhttpdPHPPHP-ldapPHP-gd #unzipldap-account-manager-4.6.RC1.zip #mvldap-account-manager-4.6.RC1/var/www/html/lam #chown-Rapache:apache/var/www/html/lam 顺便编辑之前的/etc/PHPldapadmin/conf.PHP中增加一行 #vim/etc/httpd/conf.d/PHPldapadmin.conf Alias/lam/var/www/html/lam配置
#cd/var/www/html/lam/config #cpconfig.cfg_sampleconfig.cfg #cplam.conf_samplelam.conf #vimlam.conf serverURL:ldap://192.168.1.35:389 admins:cn=Manager,dc=com treesuffix:dc=test,dc=org 其他dc=my-domain全部更换为:dc=yourdomain重启 httpd 服务
#servicehttpdrestart
然后通过浏览器访问即可, http://192.168.1.35/lam ,更改为你自己的 ip然后通过 Manager 账号以及密码就可以登录成功了。
至此, 可能我们基本可以把 slapd 跑起来了, 但是OpenLDAP做起来感觉还是比较麻烦,也是自己结合网上的资料、教程,实际测试成功后,整理了这篇文章,希望能够帮助到有需要的朋友。
后续还有ldap的具体应用, 比如 wifi, jira,VPN,jenkins 等应用案例。
原文链接:/bash/392648.html