centos 7.6 安装 openldap 2.5.17、centos 7.6 安装phpLDAPadmin 1.2.6.7 [apache运行phpLDAPadmin]
0、写在前面(重要必看)
本文所用组件版本说明,下载链接在文中对应章节
想要快速上手openldap,一定要按照这个版本组合就可成功安装phpLDAPadmin,因为不同的phpLDAPadmin版本对于php的版本要求是不同的。
服务器:centos 7.6
apache http server:2.4.58
openldap:2.5.17
php:8.0.0
phpLDAPadmin:1.2.6.7
其他版本有兴趣的话请自行测试。
1、下载ldap
官网下载地址 链接: https://openldap.org/software/download/
选择LTSR版本 OpenLDAP-2.5.17
选择HK站点
2、安装 openldap 2.5.17
2.1、官方参考文档
官方参考文档 https://www.openldap.org/doc/
官方安装文档 链接: https://www.openldap.org/doc/admin25/quickstart.html
2.2、安装前准备
安装openldap前 需要安装的依赖包
在解压后的目录中 查看README文件
以下是需要预先安装的软件
- Standard C compiler (required) 比如GCC
- Cyrus SASL 2.1.27+ (recommended)
- OpenSSL 1.1.1+ (recommended)
- libevent 2.1.8+ (recommended)
- libargon2 or libsodium (recommended)
- Reentrant POSIX REGEX software (required)
需要安装的是 GCC 和 Reentrant POSIX REGEX software
2.2.1、安装gcc
centos 7.6默认的gcc 版本是 4.8.5
如没有 gcc
使用如下命令安装
yum install gcc
2.2.2、安装Reentrant POSIX REGEX software
参考链接: https://www.openldap.org/faq/data/cache/152.html
centos 7 默认有这个软件 直接跳过即可
2.2.3、安装Cyrus SASL 2.1.27+ (非必选项 跳过即可)
官方参考文档 https://www.cyrusimap.org/sasl/
官方安装文档 https://www.cyrusimap.org/sasl/sasl/installation.html#
下载链接 https://github.com/cyrusimap/cyrus-sasl/releases
tar -xzvf cyrus-sasl-2.1.28.tar.gz
cd /path/to/cyrus-sasl-2.1.28
./configure
make
make install
ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
至此安装 Cyrus SASL 2.1.28 完成
configure截图
make截图
make install 截图
形成了以下目录
2.2.4、安装OpenSSL 1.1.1+ (非必选项 跳过即可)
2.2.4.1、下载openssl 3.0
centos 7.6默认的openssl 版本是
openssl version
需要编译安装openssl 3.0
访问 https://www.openssl.org/source/ 下载openssl 3.0
openssl安装手册 在解压包后目录下的Install.md
2.2.4.2、安装依赖包
安装openssl 3.0的前提 需要安装以下依赖包
安装perl 5
yum install perl
yum install perl-IPC-Cmd
2.2.4.3、编译安装openssl 3.0
tar -xzvf openssl-3.0.13.tar.gz
cd /path/to/openssl-3.0.13
./Configure
make
make test
make install
Configure截图
make截图
make test截图
make install 截图
安装openssl 3.0后
默认的目录如下
查看openssl version 仍然是旧版本的openssl 1.0
这是因为没有吧openssl命令链接到新安装的openssl程序
mv /usr/bin/openssl /usr/bin/openssl.1.0
ln -s /usr/local/bin/openssl /usr/bin/openssl
mv /usr/lib64/openssl/ /usr/lib64/openssl.1.0
ln -s /usr/local/include/openssl/ /usr/include/openssl
ln -s /usr/local/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
其中为什么要做软链接 /usr/lib64/libssl.so.3 和 /usr/lib64/libcrypto.so.3 呢?是因为不这样做就会报错
结合报错信息说明 centos系统查找库文件 是从/usr/lib64/ 目录下找的,因此要在/usr/lib64/ 目录下建立 libssl.so.3 和 libcrypto.so.3 的软链接。
查看openssl 版本
openssl version
至此在centos 7.6上安装openssl 3.0 完成
2.2.5、安装libevent 2.1.8+ (非必选项 跳过即可)
centos 7.6 默认的 libevent版本是 2.0.21
需要编译安装libevent 2.1.12
官方安装参考文档 https://github.com/libevent/libevent
2.2.6、安装libargon2 or libsodium (非必选项 跳过即可)
2.3、安装 openldap 2.5.17
tar -xzvf openldap-2.5.17.tgz
cd /path/to/openldap-2.5.17/
./configure --prefix=/usr/local/openldap-2.5.17
make depend
make
make test
make install
configure截图
configure用了–prefix选项的好处方便是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)
make depend 截图
make 截图
make test 截图
出现这个错误 不知道为啥 先跳过
make install 截图
支持安装完成 openldap 2.5.17
2.4、配置 启动 openldap 2.5.17
参考链接: https://www.openldap.org/doc/admin26/quickstart.html
2.4.1、创建配置文件目录
mkdir -p /usr/local/openldap-2.5.17/etc/slapd.d
mkdir -p /usr/local/openldap-2.5.17/var/openldap-data
chmod 700 /usr/local/openldap-2.5.17/var/openldap-data
2.4.2、导入openldap配置
cd /usr/local/openldap-2.5.17/libexec/
执行导入配置命令前 配置文件夹 /usr/local/openldap-2.5.17/etc/slapd.d 是空的
导入openldap配置
/usr/local/openldap-2.5.17/sbin/slapadd -n 0 -F /usr/local/openldap-2.5.17/etc/slapd.d -l /usr/local/openldap-2.5.17/etc/openldap/slapd.ldif
执行导入配置命令后 配置文件夹 /usr/local/openldap-2.5.17/etc/slapd.d 形成了如下文件
命令参数含义:
2.4.3、后台启动openldap
启动openldap前 389端口没有被占用
netstat -antlp|grep 389
后台启动slapd进程
/usr/local/openldap-2.5.17/libexec/slapd -F /usr/local/openldap-2.5.17/etc/slapd.d
命令参数含义:
确认是否启动成功
启动openldap后 389端口被占用了 进程是slapd
/usr/local/openldap-2.5.17/bin/ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
设置openldap开机自启动
编辑 /etc/rc.local 文件
vi /etc/rc.local
在最后加入一行内容如下
nohup /usr/local/openldap-2.5.17/libexec/slapd -F /usr/local/openldap-2.5.17/etc/slapd.d & >> /root/logs/openldapAutoStart.log 2>&1
2.4.4、终止openldap 即终止slapd进程
kill -INT $(cat /usr/local/openldap-2.5.17/var/run/slapd.pid)
2.4.5、前台启动openldap
启动openldap前 389端口没有被占用
netstat -antlp|grep 389
执行下列命令 是前台启动slapd进程的意思
/usr/local/openldap-2.5.17/libexec/slapd -F /usr/local/openldap-2.5.17/etc/slapd.d -d stats
启动后一直占用终端屏幕 这就是前台启动
启动openldap后 389端口被占用 进程是slapd
netstat -antlp|grep 389
ctrl+c 中止终端后 slapd进程也被终止了
3、安装ldap管理工具 phpLDAPadmin
下载链接: https://github.com/leenooks/phpLDAPadmin/tags
解压后查看INSTALL.md
3.1、安装phpLDAPadmin 的先决条件
安装phpLDAPadmin 的先决条件是
3.1.1、安装一个web服务器(phpLDAPadmin官方安装手册推荐使用 apache http server)
参考链接: centos 7.6安装 Apache HTTP Server 2.4.58
3.1.2、安装PHP 7.0或以上版本(含有ldap支持、含有apache http server支持)
下载链接: https://www.php.net/downloads.php
安装文档: https://www.php.net/manual/en/install.unix.apache2.php
解压压缩包
cd /path/to/php-8.3.3.tar.gz
tar -xzvf php-8.3.3.tar.gz
cd php-8.3.3/
./configure --with-ldap --prefix=/usr/local/php-8.3.3 --with-apxs2=/usr/local/apache2/bin/apxs
–with-apxs2 作用是支持apache可以解析php网页
我们要知道–with-apxs2=/usr/local/apache2/bin/apxs 有什么影响,就是说我们要知道自己在做什么
这个选项会在apache的安装目录下生成libphp.so文件供apache调用,libphp.so提供给了apache解析php网页的能力。
那么apache是怎么调用libphp.so呢?
通过在apache的配置文件中配置要加载的模块 使得apache在启动时加载libphp.so。
查看apache配置文件httpd.conf
我们注意到在apache配置文件httpd.conf中 有两行关于加载libphp.so的配置
LoadModule php_module modules/libphp.so
#LoadModule php7_module modules/libphp7.so
libphp.so 指的是php 8.0版本的库文件
libphp7.so 指的是php 7.0版本的库文件
就是说通过安装不同版本的php 通过–with-apxs2=/usr/local/apache2/bin/apxs 选项可以为apache生成不同php版本的库文件 供apache启动时选择加载哪一种版本php库文件,很智能, apache不想加载的东西 在apache配置文件httpd.conf中注释掉即可 然后重启apache生效。
configure报错 缺少libxml-2.0 >= 2.9.0
安装libxml2
yum install libxml2 libxml2-devel
再次configure
./configure --with-ldap --prefix=/usr/local/php-8.3.3 --with-apxs2=/usr/local/apache2/bin/apxs
报错缺少 ldap.h configure: error: Cannot find ldap.h
改变configure命令为如下
./configure --with-ldap=/usr/local/openldap-2.5.17/ --prefix=/usr/local/php-8.3.3 --with-apxs2=/usr/local/apache2/bin/apxs
/usr/local/openldap-2.5.17/ 是openldap的安装目录 这个目录下含有 ldap.h文件 一般来说 头文件在include目录下
报错 No package ‘sqlite3’ found
安装sqlite3
yum install sqlite sqlite-devel
再次configure
./configure --with-ldap=/usr/local/openldap-2.5.17/ --prefix=/usr/local/php-8.3.3 --with-apxs2=/usr/local/apache2/bin/apxs
最终configure成功
然后顺序执行以下2条命令安装php
make
make install
make完成
make install 完成
查看php版本
把php加入到PATH环境变量中
编辑 /etc/profile 在最后面加入两行
PHP_HOME=/usr/local/php-8.3.3/
PATH=$PHP_HOME/bin:$PATH
vi /etc/profile
使得PHP环境变量生效
source /etc/profile
验证已经生效
3.1.3、配置httpd 支持解析php网页文件
编辑httpd的配置文件
vi /usr/local/apache2/conf/httpd.conf
修改httpd.conf在文件中添加一行内容:AddType application/x-httpd-php .php
修改前
修改后
加上针对php的索引,如果没有该索引的支持,则无法解析用php编写的网页,在配置文件中添加对应索引
编辑httpd的配置文件
vi /usr/local/apache2/conf/httpd.conf
找到DirectoryIndex
修改前
修改后
修改完成httpd.conf后 重启httpd
/usr/local/apache2/bin/apachectl -k restart
测试验证 httpd 能否解析php网页文件
在httpd的web主目录下新建1个php文件 内容如下
cd /usr/local/apache2/htdocs
vi test.php
test.php内容如下
<?php
phpinfo();
?>
访问 http://httpd-server-ip:80/test.php
显示如下页面 就表示httpd 可以成功解析php网页文件
3.2、安装phpLDAPadmin
下载链接: https://github.com/leenooks/phpLDAPadmin/tags
解压后查看INSTALL.md
上传phpLDAPadmin-1.2.6.7.tar.gz 到服务器上
cd /path/to/phpLDAPadmin-1.2.6.7.tar.gz
tar -xzvf phpLDAPadmin-1.2.6.7.tar.gz -C /usr/local/apache2/htdocs/
cd /usr/local/apache2/htdocs
mv phpLDAPadmin-1.2.6.7/ phpLDAPadmin
cp phpLDAPadmin/config/config.php.example phpLDAPadmin/config/config.php
访问phpldapadmin页面 http://httpd-server-ip/phpLDAPadmin
出现如下页面 报错 Your install of PHP appears to be missing GETTEXT support. 意思是说安装php时没有打开GETTEXT支持。
因此需要安装gettext 然后重新编译安装php(加上对gettext的支持)
gettext官网页面: https://www.gnu.org/software/gettext/
gettext下载链接 https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.5.tar.gz
解压gettext安装包 查看解压目录下的INSTALL文件 这是安装手册
cd /path/to/gettext-0.22.5.tar.gz
tar -xzvf gettext-0.22.5.tar.gz
cd gettext-0.22.5/
./configure --prefix=/usr/local/gettext
make
make install
configure 截图
make 截图
make install 截图
重新编译安装php
先执行 make clean
cd /root/package/php/php-8.3.3
make clean
然后删除php的安装目录
rm -rf /usr/local/php-8.3.3/
然后编译安装PHP 注意这次php configure 命令需要加上 --with-gettext=/usr/local/gettext
再次configure
./configure --with-ldap=/usr/local/openldap-2.5.17/ --prefix=/usr/local/php-8.3.3 --with-apxs2=/usr/local/apache2/bin/apxs --with-gettext=/usr/local/gettext
make
make install
configure 截图
make 截图
make install 截图
访问phpldapadmin页面 http://httpd-server-ip/phpLDAPadmin
出现如下页面 报错 Unrecognized error number: 8192: Creation of dynamic property page::$index is deprecated
这个是因为 在php 8.2 及之后版本 setting a value to an undeclared class property is deprecated 而本文使用的php是8.3版本,踩坑了。
解决方法就是 重新安装php 7.0.0版本
https://www.php.net/releases/
下载链接 https://www.php.net/distributions/php-7.0.0.tar.gz
重新编译安装php
先对老版本8.3.3 php执行 make clean
cd /root/package/php/php-8.3.3
make clean
然后删除php的安装目录
rm -rf /usr/local/php-8.3.3/
再次configure
cd /path/to/php-7.0.0.tar.gz
tar -xzvf php-7.0.0.tar.gz
cd php-7.0.0/
./configure --with-ldap=/usr/local/openldap-2.5.17/ --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-gettext=/usr/local/gettext
make
make install
configure 截图
make 截图
make install 截图
访问phpldapadmin页面 http://httpd-server-ip/phpLDAPadmin
出现如下页面 报错
搜索这个报错
参考链接 : https://blog.csdn.net/hj960511/article/details/104560870
问题原因是php 低于7.1版本
解决方法就是 重新安装php 8.0.0版本
https://www.php.net/releases/
下载链接 https://www.php.net/distributions/php-8.0.0.tar.gz
重新编译安装php
先对老版本7.0.0 php 执行 make clean
cd /root/package/php/php-7.0.0
make clean
然后删除php 7.0.0的安装目录
rm -rf /usr/local/php
再次configure
cd /path/to/php-8.0.0.tar.gz
tar -xzvf php-8.0.0.tar.gz
cd php-8.0.0/
./configure --with-ldap=/usr/local/openldap-2.5.17/ --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-gettext=/usr/local/gettext
make
make install
configure 截图
make 截图
make install 截图
访问phpldapadmin页面 http://httpd-server-ip/phpLDAPadmin
出现如下页面表示成功安装。 至此安装phpLDAPadmin 1.2.6.7 成功
3.3、使用phpLDAPadmin
访问phpldapadmin页面 http://httpd-server-ip/phpLDAPadmin
点击登录
出现登录界面
输入登录DN 和密码
登录DN 和密码在 openldap的配置文件中 /usr/local/openldap-2.5.17/etc/openldap/slapd.ldif
登录DN:cn=Manager,dc=localhost,dc=localdomain
登录密码:secret
输入登录DN和密码后 点击认证按钮
页面出现 Successfully logged into server. 表示登录openldap成功
但是界面上显示 This base cannot be created with PLA 不能添加ldap条目
解决方法参考链接: phpldapadmin This base cannot be created with PLA
然后再次访问phpldapadmin页面 点击下图按钮
点击 创建一个子条目
创建基础域 点击 Generic: Organisational Unit
输入基础域名称 account 点击创建对象
点击提交
查看phpldapadmin 页面已经多了一个基础域 account
然后在account下创建1个组,组名为:user
先点击 ou=account 然后点击创建一个子条目
发现组模版不能点击 有个红色x号
推测应该是没有打开这个组模版
联想到在进入phpldapadmin首页时的这些错误提示 确定是openldap配置问题 在配置中没有打开这些模版
解决方法:
链接: https://unix.stackexchange.com/questions/353350/centos-7-ldap-add-insufficient-access-50
需要在openldap中添加上这些配置文件
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/core.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/cosine.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/inetorgperson.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
添加core.ldif时 报错如下 说明使用的DN:-D cn=Manager,dc=localhost,dc=localdomain 没有权限添加这个core.ldif文件
需要编辑这个文件 添加DN:-D cn=Manager,dc=localhost,dc=localdomain 的权限让其能添加这个core.ldif文件
vi /usr/local/openldap-2.5.17/etc/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif
更改olcAccess这一行
更改前
olcAccess: {0}to * by * none
更改后
olcAccess: {0}to * by manage by dn.base=“cn=Manager,dc=localhost,dc=localdomain” manage by * none
然后重启openldap
kill -INT $(cat /usr/local/openldap-2.5.17/var/run/slapd.pid)
/usr/local/openldap-2.5.17/libexec/slapd -F /usr/local/openldap-2.5.17/etc/slapd.d
再次添加core.ldif文件
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/core.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
报错如下 无需理会这个错误
继续添加cosine.ldif
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/cosine.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
添加cosine.ldif成功
继续添加inetorgperson.ldif
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/inetorgperson.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
添加inetorgperson.ldif成功
书归正传 继续添加组
在account下创建1个组,组名为:user
先点击 ou=account 然后点击创建一个子条目
发现组模版不能点击 有个红色x号
但是相比于没添加core.ldif、cosine.ldif、inetorgperson.ldif 前 已经可以添加很多其他模版了 比如Generic: User Account 这个就是人员 其实至此已经可以在ou=ou=account 下添加人员了
本着解决问题的精神 继续前进 推测应该还是openldap中没有打开组模版
那么组模版在哪里呢?
查看openldap内置的所有模版文件
ls -l /usr/local/openldap-2.5.17/etc/openldap/schema/
可以看到 模版目录schema下 除了刚才添加的 core.ldif、cosine.ldif、inetorgperson.ldif 还有许多其他的.ldif文件
直接把其他所有模版 .ldif文件全部添加一下
刚才已经执行了添加模版这些命令
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/core.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/cosine.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/inetorgperson.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
继续添加其他模版文件
注意一下命令需要单挑执行 因为每条都需要在屏幕上输入密码 密码在openldap的配置文件中查看 默认是secret 查看密码
vi /usr/local/openldap-2.5.17/etc/openldap/slapd.ldif
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/collective.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/corba.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/dsee.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/duaconf.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/dyngroup.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/java.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/misc.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/msuser.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/namedobject.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/nis.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/openldap.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
/usr/local/openldap-2.5.17/bin/ldapadd -f /usr/local/openldap-2.5.17/etc/openldap/schema/pmi.ldif -x -D cn=Manager,dc=localhost,dc=localdomain -W
然后再次重启openldap
kill -INT $(cat /usr/local/openldap-2.5.17/var/run/slapd.pid)
/usr/local/openldap-2.5.17/libexec/slapd -F /usr/local/openldap-2.5.17/etc/slapd.d
然后刷新phpldapadmin页面
继续添加组
在account下创建1个组,组名为:user
先点击 ou=account 然后点击创建一个子条目
点击 Generic: Posix Group
输入组名 users 点击创建对象
点击提交
然后在users组下 创建用户ein 先点cn=users 再点创建一个子条目
然后点击 Generic: User Account
输入用户信息 用户名密码等 其中GID号 选择users组
点击提交
查看ein账号
和建立ein账号 同样的方法 在users组下面 建立zwei账号
查看ein 和 zwei
至此成功使用phpldapadmin 操作openldap 创建账户成功
现在有了openldap服务器 并且创建了账户 下面就可以使用各种服务来对接openldap实现用户认证了
比如使用cas对接openldap 实现sso单点登录 centos 7.6 安装cas 对接openldap sso单点登录实战
比如使用openvpn对接openldap实现账户认证 等等…