博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

Ubuntu 16.04 集成安装Apache+PHP+Kerberos+LDAP+phpLDAPadmin

Posted on 2019-09-26 15:48  Mr.智  阅读(1021)  评论(0编辑  收藏  举报

一、安装Apache

1.1、安装Apache

apt-get update
apt-get install apache2

过程如下:

root@duke01:~# apt-get update
命中:1 http://cn.archive.ubuntu.com/ubuntu xenial InRelease
命中:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates InRelease
命中:3 http://cn.archive.ubuntu.com/ubuntu xenial-backports InRelease
命中:4 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64 InRelease
命中:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64 InRelease
命中:6 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64 InRelease
命中:7 http://security.ubuntu.com/ubuntu xenial-security InRelease
正在读取软件包列表... 完成
root@duke01:~# apt-get install apache2
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
apache2 已经是最新版 (2.4.18-2ubuntu3.9)。
apache2 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。

1.2、Apache安装目录信息

/var/www                      #Apache默认文档根目录
/etc/apache2                  #Apache配置存储目录
/etc/apache2/apache2.conf     #Apache配置文件

1.3、配置Apache

1.3.1、将“全局服务器名称”设置为“禁止语法警告”

如果不设置ServerName全球范围内,你会检查语法错误Apache配置时收到以下警告:

apache2ctl configtest #检查语法错误

过程如下:

root@duke01:/# apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

修改/etc/apache2/apache2.conf配置文件,关闭语法警告
过程如下:

root@duke01:/# vi /etc/apache2/apache2.conf
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
ServerName 10.0.0.55  #在最后一行添加,ip是当前主机IP
root@duke01:/# apache2ctl configtest
Syntax OK
root@duke01:/# systemctl restart apache2 重启Apache

1.3.2、调整防火墙以允许Web流量

  1. 查看防火墙管理列表
    ufw app list
    过程如下:

    root@duke01:/# ufw app list
    可用应用程序:
    Apache
    Apache Full
    Apache Secure
    CUPS
    OpenLDAP LDAP
    OpenLDAP LDAPS
    OpenSSH

  2. 查看Apache Full使用的端口
    ufw app info "Apache Full"
    
    过程如下:

    root@duke01:/# ufw app info "Apache Full"
    配置: Apache Full
    标题:Web Server (HTTP,HTTPS)
    描述: Apache v2 is the next generation of the omnipresent Apache web server.
    端口:80,443/tcp

  3. 防火墙开放Apache
    ufw allow in "Apache Full"
    

    root@duke01:/# ufw allow in "Apache Full"
    防火墙规则已更新
    规则已更新(v6)

  4. 访问Apache
    开放防火墙后就可以尝试登陆Apache服务器
    登陆 http://10.0.0.55/
    
    界面如下:

1.3、Apache命令

启动命令

/etc/init.d/apache2 start
或
systemctl start apache2

停止命令

/etc/init.d/apache2 stop
或
systemctl stop apache2

重启命令

/etc/init.d/apache2 restart
或
systemctl restart apache2

二、安装PHP开发环境

2.1、安装PHP

apt-get install php libapache2-mod-php php-mcrypt

过程如下:

root@duke01:/# apt-get install php libapache2-mod-php php-mcrypt
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
libapache2-mod-php 已经是最新版 (1:7.0+35ubuntu6.1)。
libapache2-mod-php 已设置为手动安装。
将会同时安装下列软件:
libmcrypt4 php7.0 php7.0-mcrypt
建议安装:
libmcrypt-dev mcrypt
下列【新】软件包将被安装:
libmcrypt4 php php-mcrypt php7.0 php7.0-mcrypt
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。
需要下载 83.6 kB 的归档。
解压缩后会消耗 326 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libmcrypt4 amd64 2.5.8-3.3 [63.0 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php7.0 all 7.0.32-0ubuntu0.16.04.1 [1,288 B]
获取:3 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 php all 1:7.0+35ubuntu6.1 [2,862 B]
获取:4 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php7.0-mcrypt amd64 7.0.32-0ubuntu0.16.04.1 [14.5 kB]
获取:5 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php-mcrypt all 1:7.0+35ubuntu6.1 [1,934 B]
已下载 83.6 kB,耗时 1秒 (42.5 kB/s)
正在选中未选择的软件包 libmcrypt4。
(正在读取数据库 ... 系统当前共安装有 215502 个文件和目录。)
正准备解包 .../libmcrypt4_2.5.8-3.3_amd64.deb ...
正在解包 libmcrypt4 (2.5.8-3.3) ...
正在选中未选择的软件包 php7.0。
正准备解包 .../php7.0_7.0.32-0ubuntu0.16.04.1_all.deb ...
正在解包 php7.0 (7.0.32-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php。
正准备解包 .../php_1%3a7.0+35ubuntu6.1_all.deb ...
正在解包 php (1:7.0+35ubuntu6.1) ...
正在选中未选择的软件包 php7.0-mcrypt。
正准备解包 .../php7.0-mcrypt_7.0.32-0ubuntu0.16.04.1_amd64.deb ...
正在解包 php7.0-mcrypt (7.0.32-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php-mcrypt。
正准备解包 .../php-mcrypt_1%3a7.0+35ubuntu6.1_all.deb ...
正在解包 php-mcrypt (1:7.0+35ubuntu6.1) ...
正在处理用于 libapache2-mod-php7.0 (7.0.32-0ubuntu0.16.04.1) 的触发器 ...
正在设置 libmcrypt4 (2.5.8-3.3) ...
正在设置 php7.0 (7.0.32-0ubuntu0.16.04.1) ...
正在设置 php (1:7.0+35ubuntu6.1) ...
正在设置 php7.0-mcrypt (7.0.32-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/mcrypt.ini with new version
正在设置 php-mcrypt (1:7.0+35ubuntu6.1) ...
正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ...
正在处理用于 libapache2-mod-php7.0 (7.0.32-0ubuntu0.16.04.1) 的触发器 ...

2.2、配置PHP

2.2.1、配置index.html

修改Apache在请求目录时提供文件的方式。Apache将首先从寻找一个名为index.html文件改为寻找index.php文件。

vim /etc/apache2/mods-enabled/dir.conf

过程如下:

<IfModule mod_dir.c>
        DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

修改为

<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

重启Apache

root@duke01:/# systemctl restart apache2

2.3、安装PHP增强模块

2.3.1、查看PHP功能增强列表

apt-cache search php- | less

过程如下:

root@duke01:~# apt-cache search php- | less
libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
php-ldap - LDAP module for PHP [default]
php-mysql - MySQL module for PHP [default]
php-odbc - ODBC module for PHP [default]
......
php-horde-text-filter-jsmin - Horde Text Filter - Jsmin PHP Driver
php-mythtv - PHP Bindings for MythTV
php7.0-dba - DBA module for PHP

2.3.2、安装增强功能

经过筛选,选择安装php-ldap、php-mbstring

apt-get install php-ldap php-mbstring

过程如下:

root@duke01:~# apt-get install php-ldap php-mbstring
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
php-ldap 已经是最新版 (1:7.0+35ubuntu6.1)。
php-ldap 已设置为手动安装。
下列【新】软件包将被安装:
php-mbstring php7.0-mbstring
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。
需要下载 467 kB 的归档。
解压缩后会消耗 1,512 kB 的额外空间。
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php7.0-mbstring amd64 7.0.32-0ubuntu0.16.04.1 [465 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 php-mbstring all 1:7.0+35ubuntu6.1 [1,940 B]
已下载 467 kB,耗时 2秒 (189 kB/s)
正在选中未选择的软件包 php7.0-mbstring。
(正在读取数据库 ... 系统当前共安装有 215525 个文件和目录。)
正准备解包 .../php7.0-mbstring_7.0.32-0ubuntu0.16.04.1_amd64.deb ...
正在解包 php7.0-mbstring (7.0.32-0ubuntu0.16.04.1) ...
正在选中未选择的软件包 php-mbstring。
正准备解包 .../php-mbstring_1%3a7.0+35ubuntu6.1_all.deb ...
正在解包 php-mbstring (1:7.0+35ubuntu6.1) ...
正在处理用于 libapache2-mod-php7.0 (7.0.32-0ubuntu0.16.04.1) 的触发器 ...
正在设置 php7.0-mbstring (7.0.32-0ubuntu0.16.04.1) ...
Creating config file /etc/php/7.0/mods-available/mbstring.ini with new version
正在设置 php-mbstring (1:7.0+35ubuntu6.1) ...
正在处理用于 libapache2-mod-php7.0 (7.0.32-0ubuntu0.16.04.1) 的触发器 ...

2.4、测试PHP服务

2.4.1、添加测试文件

/var/www/html下新建一个info.php文件,用于测试PHP是否配置成功
过程如下:

root@duke01:~# vi /var/www/html/info.php
<?php
phpinfo();

2.4.2、测试服务状态

在浏览器中输入服务器IP/info.php即可,如下图:


三、安装Kerberos

3.1、清理环境

3.1.1 检查是否安装过kerberos

dpkg -l krb*

过程如下:

root@duke01:~# dpkg -l krb*
期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
| 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待(W)/触发器未决(T)
|/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
||/ 名称                                          版本                        体系结构:                  描述
+++-=============================================-===========================-===========================-===============================================================================================
un  krb5-doc                                      <无>                        <无>                        (无可用描述)
ii  krb5-locales                                  1.13.2+dfsg-5ubuntu2        all                         Internationalization support for MIT Kerberos
un  krb5-user                                     <无>                        <无>                        (无可用描述)

3.1.2 删除已经存在的版本

apt-get remove --purge krb*     # krb*替换成具体需要删除的文件

过程如下:

root@duke01:~# apt-get remove --purge krb*
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
注意,根据Glob 'krb' 选中了 'krb5-multidev'
注意,根据Glob 'krb
' 选中了 'krb5-gss-samples'
注意,根据Glob 'krb' 选中了 'krb5-k5tls'
注意,根据Glob 'krb
' 选中了 'krb5-sync'
注意,根据Glob 'krb' 选中了 'krb5-kdc-ldap'
注意,根据Glob 'krb
' 选中了 'krb5-pkinit'
注意,根据Glob 'krb' 选中了 'krb5-sync-tools'
注意,根据Glob 'krb
' 选中了 'krb5-auth-dialog'
注意,根据Glob 'krb' 选中了 'krb5-locales'
注意,根据Glob 'krb
' 选中了 'krb5-admin-server'
注意,根据Glob 'krb' 选中了 'krb5-user'
注意,根据Glob 'krb
' 选中了 'krb5-doc'
注意,根据Glob 'krb' 选中了 'krb5-kdc'
注意,根据Glob 'krb
' 选中了 'krb5-config'
注意,根据Glob 'krb' 选中了 'krb5-otp'
注意,根据Glob 'krb
' 选中了 'krb5-sync-plugin'
注意,根据Glob 'krb' 选中了 'krb5-strength'
软件包 krb5-sync 未安装,所以不会被卸载
软件包 krb5-config 未安装,所以不会被卸载
软件包 krb5-auth-dialog 未安装,所以不会被卸载
软件包 krb5-strength 未安装,所以不会被卸载
软件包 krb5-sync-plugin 未安装,所以不会被卸载
软件包 krb5-sync-tools 未安装,所以不会被卸载
软件包 krb5-doc 未安装,所以不会被卸载
软件包 krb5-multidev 未安装,所以不会被卸载
软件包 krb5-admin-server 未安装,所以不会被卸载
软件包 krb5-gss-samples 未安装,所以不会被卸载
软件包 krb5-k5tls 未安装,所以不会被卸载
软件包 krb5-kdc 未安装,所以不会被卸载
软件包 krb5-kdc-ldap 未安装,所以不会被卸载
软件包 krb5-otp 未安装,所以不会被卸载
软件包 krb5-pkinit 未安装,所以不会被卸载
软件包 krb5-user 未安装,所以不会被卸载
下列软件包将被【卸载】:
krb5-locales

升级了 0 个软件包,新安装了 0 个软件包,要卸载 1 个软件包,有 232 个软件包未被升级。
解压缩后将会空出 2,830 kB 的空间。
您希望继续执行吗? [Y/n] y
(正在读取数据库 ... 系统当前共安装有 213495 个文件和目录。)
正在卸载 krb5-locales (1.13.2+dfsg-5ubuntu2) ...

3.2、 安装kerberos

apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap

过程如下:

root@duke01:~# apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
krb5-config krb5-user
建议安装:
openbsd-inetd | inet-superserver krb5-kdc-ldap
下列【新】软件包将被安装:
krb5-admin-server krb5-config krb5-kdc krb5-user
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 232 个软件包未被升级。
需要下载 0 B/379 kB 的归档。
解压缩后会消耗 1,342 kB 的额外空间。
您希望继续执行吗? [Y/n]y
正在预设定软件包 ...



输入kerberos的域,要大写:EXAMPLE.COM



输入kerberos服务器地址,多个以空格进行分割:10.0.0.55



输入kerberos管理域服务器:10.0.0.55



正在选中未选择的软件包 krb5-config。
(正在读取数据库 ... 系统当前共安装有 215444 个文件和目录。)
正准备解包 .../krb5-config_2.3_all.deb ...
正在解包 krb5-config (2.3) ...
正在选中未选择的软件包 krb5-user。
正准备解包 .../krb5-user_1.13.2+dfsg-5ubuntu2_amd64.deb ...
正在解包 krb5-user (1.13.2+dfsg-5ubuntu2) ...
正在选中未选择的软件包 krb5-kdc。
正准备解包 .../krb5-kdc_1.13.2+dfsg-5ubuntu2_amd64.deb ...
正在解包 krb5-kdc (1.13.2+dfsg-5ubuntu2) ...
正在选中未选择的软件包 krb5-admin-server。
正准备解包 .../krb5-admin-server_1.13.2+dfsg-5ubuntu2_amd64.deb ...
正在解包 krb5-admin-server (1.13.2+dfsg-5ubuntu2) ...
正在选中未选择的软件包 krb5-kdc-ldap。
正准备解包 .../krb5-kdc-ldap_1.13.2+dfsg-5ubuntu2_amd64.deb ...
正在解包 krb5-kdc-ldap (1.13.2+dfsg-5ubuntu2) ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在设置 krb5-config (2.3) ...
Use of uninitialized value $admin in string eq at /var/lib/dpkg/info/krb5-config.config line 171, line 19.
正在设置 krb5-user (1.13.2+dfsg-5ubuntu2) ...
正在设置 krb5-kdc (1.13.2+dfsg-5ubuntu2) ...
正在设置 krb5-admin-server (1.13.2+dfsg-5ubuntu2) ...
正在设置 krb5-kdc-ldap (1.13.2+dfsg-5ubuntu2) ...
正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...

【注意】:安装好kerberos后不要急于配置,先安装配置LDAP后在配置kerberos会比较好

四、安装openLDAP

4.1.安装openLDAP

卸载

apt remove --purge slapd ldap-utils

安装

apt-get update
apt-get install slapd ldap-utils

过程如下:

root@duke01:~# apt-get update
命中:1 http://cn.archive.ubuntu.com/ubuntu xenial InRelease
命中:2 http://cn.archive.ubuntu.com/ubuntu xenial-updates InRelease
命中:3 http://cn.archive.ubuntu.com/ubuntu xenial-backports InRelease
命中:4 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64  InRelease
命中:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  InRelease
命中:6 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  InRelease
命中:7 http://security.ubuntu.com/ubuntu xenial-security InRelease
正在读取软件包列表... 完成
root@duke01:~# apt-get install slapd ldap-utils
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
  libldap-2.4-2 libodbc1 libslp1
建议安装:
  libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libmyodbc odbc-postgresql tdsodbc unixodbc-bin slpd openslp-doc
下列【新】软件包将被安装:
  ldap-utils libodbc1 libslp1 slapd
下列软件包将被升级:
  libldap-2.4-2
升级了 1 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。
需要下载 1,872 kB 的归档。
解压缩后会消耗 17.1 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libldap-2.4-2 amd64 2.4.42+dfsg-2ubuntu3.3 [161 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libodbc1 amd64 2.3.1-4.1 [180 kB]
获取:3 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libslp1 amd64 1.2.1-11ubuntu0.16.04.1 [40.4 kB]
获取:4 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 slapd amd64 2.4.42+dfsg-2ubuntu3.3 [1,369 kB]
获取:5 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 ldap-utils amd64 2.4.42+dfsg-2ubuntu3.3 [122 kB]
已下载 1,872 kB,耗时 4秒 (410 kB/s)
正在预设定软件包 ...

输入LDAP的管理员密码:duke

确认LDAP的管理员密码:duke
(正在读取数据库 ... 系统当前共安装有 213618 个文件和目录。)
正准备解包 .../libldap-2.4-2_2.4.42+dfsg-2ubuntu3.3_amd64.deb  ...
正在将 libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.3) 解包到 (2.4.42+dfsg-2ubuntu3.2) 上 ...
正在选中未选择的软件包 libodbc1:amd64。
正准备解包 .../libodbc1_2.3.1-4.1_amd64.deb  ...
正在解包 libodbc1:amd64 (2.3.1-4.1) ...
正在选中未选择的软件包 libslp1:amd64。
正准备解包 .../libslp1_1.2.1-11ubuntu0.16.04.1_amd64.deb  ...
正在解包 libslp1:amd64 (1.2.1-11ubuntu0.16.04.1) ...
正在选中未选择的软件包 slapd。
正准备解包 .../slapd_2.4.42+dfsg-2ubuntu3.3_amd64.deb ... 正在解包 slapd (2.4.42+dfsg-2ubuntu3.3) ... 正在选中未选择的软件包 ldap-utils。 正准备解包 .../ldap-utils_2.4.42+dfsg-2ubuntu3.3_amd64.deb ... 正在解包 ldap-utils (2.4.42+dfsg-2ubuntu3.3) ... 正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ... 正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ... 正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在设置 libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.3) ... 正在设置 libodbc1:amd64 (2.3.1-4.1) ... 正在设置 libslp1:amd64 (1.2.1-11ubuntu0.16.04.1) ... 正在设置 slapd (2.4.42+dfsg-2ubuntu3.3) ... Creating new user openldap... done. Creating initial configuration... done. Creating LDAP directory... done. 正在设置 ldap-utils (2.4.42+dfsg-2ubuntu3.3) ... 正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ... 正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ... 正在处理用于 ureadahead (0.100.0-19) 的触发器 ... 正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...

4.2、设置openLDAP

完成安装后,需要重新配置。 slapd软件包有能力提出很多重要的配置问题,但默认情况下,它们将在安装过程中跳过。
通过slapd软件可以系统重新配置包,可以访问所有提示:

dpkg-reconfigure slapd

在这个过程中有很多新的问题需要回答。
过程如下:

root@duke01:~# dpkg-reconfigure slapd
Moving old database directory to /var/backups:

  • directory unknown... done.
    Creating initial configuration... done.
    Creating LDAP directory... done.

省略了OpenLDAP服务器配置? 否


DNS域名?

此选项将确定目录路径的基本结构。 阅读消息以了解这将如何实现。 即使您不拥有实际的网域,您也可以选择所需的任何值。 但是,本教程假设您具有适当的服务器域名,因此您应该使用它。 我们将在整个教程中使用example.com 。


机构名称?

对于本指南,将使用example.com作为我们组织的名称


管理员密码? 输入两次安全密码


数据库后端? MDB


清除slapd时删除数据库? 没有


移动旧数据库? 是


允许LDAPv2协议? 没有

4.3、打开防火墙上的LDAP端口

LDAP服务器已配置并运行。 打开防火墙上的LDAP端口,以便外部客户端可以连接:

ufw allow ldap

root@duke01:~# ufw allow ldap
防火墙规则已更新
规则已更新(v6)

4.4、测试LDAP连接

测试与ldapwhoami的LDAP连接,该连接应该返回我们连接的用户名:

ldapwhoami -H ldap:// -x

root@duke01:~# ldapwhoami -H ldap:// -x
anonymous

4.5、检查安装状态

过程如下:

root@duke01:~# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}mdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}mdb,cn=config

内容说明:

配置项
说明
cn=config 全局配置
cn=module{0},cn=config 一个动态加载的模块
cn=schema,cn=config 包含硬编码的系统级模式
cn={0}core,cn=schema,cn=config 硬编码内核模式
cn={1}cosine,cn=schema,cn=config cosine 模式
cn={2}nis,cn=schema,cn=config nis 模式
cn={3}inetorgperson,cn=schema,cn=config inetorgperson模式
olcBackend={0}mdb,cn=config 后端,mdb存储数据库
olcDatabase={-1}frontend,cn=config 前端数据库,默认设置为其他数据库
olcDatabase={0}config,cn=config slapd配置数据库(cn = config)
olcDatabase={1}mdb,cn=config 你的数据库实例 (dc=example,dc=com)

4.6、LDAP操作(知识点,非环境搭建内容)

此时LDAP只有cn=admin,dc=example,dc=com这个用户存在(第五章节会说明),此时LDAP还没有真正能够进行使用,只是一个空的平台。所以需要进行节点、用户存储、组存储、用户等信息的创建。
该章节会针对这些进行相关说明,该内容是知识点,不是部署重要环节,如果只是部署环境,可以跳过该章节,在“第六章”会做部署整合相关的内容说明。

4.6.1、变更数据库

为了LDAP能够真正使用,还需要创建以下内容:

序列分类名称
说明
1 用户节点 People 一个存储用户信息的节点,用户信息都会存储在该节点,例如:han
2 组节点 Groups 一个存储组信息的节点,组信息都会存储在该节点,例如:LDAPGroup
3 LDAPGroup 创建一个LDAP的用户组
4 用户 han 创建一个属于LDAPGroup组的用户

操作过程如下:

  • 创建一个LDIF文件,该文件用于创建上面表单中的内容,文件可以叫ldap_init.ldif

    root@duke01:~# cd /home/
    root@duke01:/home# mkdir ldap
    root@duke01:/home# cd ldap
    root@duke01:/home# vi ldap_init.ldif

  • ldap_init.ldif文件中添加以下内容

    dn: ou=People,dc=example,dc=com
    objectClass: organizationalUnit
    ou: People
    
    dn: ou=Groups,dc=example,dc=com
    objectClass: organizationalUnit
    ou: Groups
    
    dn: cn=LDAPGroup,ou=Groups,dc=example,dc=com
    objectClass: posixGroup
    cn: LDAPGroup
    gidNumber: 5000
    
    dn: uid=han,ou=People,dc=example,dc=com
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    uid: han
    sn: duke
    givenName: Han
    cn: Duke
    displayName: Duke
    uidNumber: 10000
    gidNumber: 5000
    userPassword: duke
    gecos: Duke
    loginShell: /bin/bash
    homeDirectory: /home/ldap/han
    
    【注意】:文件中的uidNumbergidNumber这2个值不能和系统中的已经存在的值冲突,所以最好采用高数值来进行区分。
    相关的值可以在/etc/passwd/etc/group文件中进行查询
  • 将用户信息加入到LDAP中
    ldapadd -x -D cn=admin,dc=example,dc=com -W -f ldap_init.ldif
    
    过程如下:

    root@duke01:/home/ldap# ls
    ldap_init.ldif
    root@duke01:/home/ldap# ldapadd -x -D cn=admin,dc=example,dc=com -W -f ldap_init.ldif
    Enter LDAP Password:
    adding new entry "ou=People,dc=example,dc=com"

    adding new entry "ou=Groups,dc=example,dc=com"

    adding new entry "cn=LDAPGroup,ou=Groups,dc=example,dc=com"

    adding new entry "uid=han,ou=People,dc=example,dc=com"

4.6.2、检查节点、组、用户是否添加正确

ldapsearch -x -LLL -b dc=example,dc=com 'uid=han' cn gidNumber

过程如下:

root@duke01:/home/ldap# ldapsearch -x -LLL -b dc=example,dc=com 'uid=han' cn gidNumber
dn: uid=han,ou=People,dc=example,dc=com
cn: Duke
gidNumber: 5000

指令说明:

参数
说明
-x “简单”绑定; 不会使用默认的SASL方法
-LLL 禁用打印无关信息
uid=han 用于查找han用户的“过滤器”
cn gidNumber 请求显示某些属性(默认为显示所有属性)

4.6.3、增加支持的模式(add schema)

默认情况下安装完LDAP是只支持 cosine、nis、inetorgperson 这3种模式,如果要新增就需要自行添加,例如:本文所要涉及的kerberos。

由于后续第6章节,需要讲述kerberos和LDAP的整合,其中会涉及到在LDAP中增加kerberos模式,所以此处就不再赘述。相关知识点,请直接查看6.1、LDAP增加kerberos模式(schema)章节

五、安装和配置phpLDAPadmin Web界面

5.1、安装phpLDAPadmin

apt-get install phpldapadmin

过程如下:

root@duke01:~# apt-get install phpldapadmin
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 php-common php-ldap php-xml php7.0-cli
php7.0-common php7.0-json php7.0-ldap php7.0-opcache php7.0-readline php7.0-xml
建议安装:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom php-pear
下列【新】软件包将被安装:
apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 php-common php-ldap php-xml php7.0-cli
php7.0-common php7.0-json php7.0-ldap php7.0-opcache php7.0-readline php7.0-xml phpldapadmin
升级了 0 个软件包,新安装了 22 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。
需要下载 5,871 kB 的归档。
解压缩后会消耗 25.9 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3 [86.0 kB]
......
获取:22 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 phpldapadmin all 1.2.2-5.2ubuntu2.1 [727 kB]
已下载 5,871 kB,耗时 3秒 (1,888 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 libapr1:amd64。
(正在读取数据库 ... 系统当前共安装有 213938 个文件和目录。)
正准备解包 .../libapr1_1.5.2-3_amd64.deb ...
正在解包 libapr1:amd64 (1.5.2-3) ...
......
正在设置 apache2-data (2.4.18-2ubuntu3.9) ...
正在设置 apache2 (2.4.18-2ubuntu3.9) ...
Enabling module mpm_event.
......
Enabling site 000-default.
正在设置 php-common (1:35ubuntu6.1) ...
正在设置 php7.0-common (7.0.32-0ubuntu0.16.04.1) ...

Creating config file /etc/php/7.0/mods-available/calendar.ini with new version
......
Creating config file /etc/php/7.0/mods-available/tokenizer.ini with new version
正在设置 php7.0-json (7.0.32-0ubuntu0.16.04.1) ...
......
正在处理用于 libc-bin (2.23-0ubuntu10) 的触发器 ...
正在处理用于 systemd (229-4ubuntu21.1) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在处理用于 ufw (0.35-0ubuntu2) 的触发器 ...
正在处理用于 libapache2-mod-php7.0 (7.0.32-0ubuntu0.16.04.1) 的触发器 ...

5.2、配置phpLDAPadmin

安装phpLDAPadmin应用程序,启用必要的Apache配置,并重新加载Apache。
Web服务器配置为提供应用程序,需要进行一些更改。 需要将phpLDAPadmin配置为使用的域,而不是自动填充LDAP登录信息。
需要修改/etc/phpldapadmin/config.php配置文件

vim /etc/phpldapadmin/config.php
  1. 配置LDAP服务器--标识

    找到 $servers->setValue('server','name','My LDAP Server'); 这一行,修改第三个参数,如下:
    $servers->setValue('server','name','DUKE LDAP Server');

  2. 配置LDAP服务器--IP

    找到 $servers->setValue('server','host','127.0.0.1'); 这一行,修改第三个参数,如下:
    $servers->setValue('server','host','10.0.0.55');

  3. 配置LDAP服务器--域名
    【注意】:
    该配置告诉phpLDAPadmin LDAP层次结构的根目录,这是基于重新配置slapd包时输入的值。
    前面slapd配置是example,因此在这里配置example.com
    需要将每个域组件(不是一个点)放入dc= notation中将其转换为LDAP语法

    找到 $servers->setValue('server','base',array('dc=example,dc=com')); 这一行,修改第三个参数,如下:
    $servers->setValue('server','base',array('dc=example,dc=com'));

  4. 配置LDAP服务器--登陆
    【注意】:
    如果phpLDAPadmin页面是可公开访问的,改配置是不能共享的信息,需要注释掉。因为此选项会预先填充Web界面中的管理员登录详细信息。
    如果是非公开访问的,只需将dc=example改为dc=duke

    找到 $servers->$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com'); 这一行,修改第三个参数,如下:
    #$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

  5. 配置LDAP服务器--告警
    【注意】:
    需要调整控制phpLDAPadmin警告消息可见性的设置。
    默认情况下,应用程序将显示相当多的关于模板文件的警告消息。 这些对目前使用的软件没有影响。
    可以通过搜索hide_template_warning参数来隐藏它们,取消注释包含它的行,并将其设置为true

    找到 // $config->custom->appearance['hide_template_warning'] = false; 这一行,修改第三个参数,如下:
    $config->custom->appearance['hide_template_warning'] = true;

5.3、登陆phpLDAPadmin

在登录前,必须保用户电脑和LDAP服务器同属于一个域当中,并配置hosts文件。
例子:

说明IP地址
LDAP服务器 10.0.0.55
用户电脑 10.0.0.166
网关 10.0.0.1

登陆地址如下:

https://duke.com/phpldapadmin

如果没有配置hosts文件,也可以直接使用IP地址进行登录:

https://10.0.0.55/phpldapadmin

登陆页面如下:

用户登录:
点击页面左侧登录按钮后,页面如下:

登录DN是您将要使用的用户名。
包含:帐户名称作为cn=部分,服务器选择的域名分为dc=部分,在安装过程中设置的默认管理员帐户称为admin ,因此在我们的示例中,我们将键入以下内容:

cn=admin,dc=example,dc=com

设置页面如下:

登录成功后页面如下:

六、kerberos和LDAP整合配置

6.1、LDAP增加kerberos模式(schema)

存在2种添加方式

6.1.1、LDAP增加kerberos schema文件

解压kerberos.schema.gz,添加到LDAP的schema存储目录

gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz
cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/

6.1.2、LDAP增加kerberos模式

  • 新建一个schema转换文件:kerberos_schema_convert.conf
    vim kerberos_schema_convert.conf
    
  • kerberos_schema_convert.conf文件中添加以下内容:
    include /etc/ldap/schema/core.schema
    include /etc/ldap/schema/collective.schema
    include /etc/ldap/schema/corba.schema
    include /etc/ldap/schema/cosine.schema
    include /etc/ldap/schema/duaconf.schema
    include /etc/ldap/schema/dyngroup.schema
    include /etc/ldap/schema/inetorgperson.schema
    include /etc/ldap/schema/java.schema
    include /etc/ldap/schema/misc.schema
    include /etc/ldap/schema/nis.schema
    include /etc/ldap/schema/openldap.schema
    include /etc/ldap/schema/ppolicy.schema
    include /etc/ldap/schema/kerberos.schema
    
  • 创建一个临时目录来存放LDIF文件
    mkdir -p /home/ldap/tmp
    
  • 使用slapcat来转换schema文件
    slapcat -f kerberos_schema_convert.conf -F /home/ldap/tmp -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /home/ldap/tmp/cn=kerberos.ldif
    
    【注意】:cn={12}kerberos中的{12}
    指的是kerberos_schema_convert.conf文件中“include /etc/ldap/schema/kerberos.schema”信息位置的序号
    并且需要(序号-1),序号是以0为起始位

    过程如下:

    root@duke01:/home/ldap# slapcat -f kerberos_schema_convert.conf -F /home/ldap/tmp -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /home/ldap/tmp/cn=kerberos.ldif
    root@duke01:/home/ldap# cd tmp
    root@duke01:/home/ldap/tmp# ls
    cn=config cn=config.ldif cn=kerberos.ldif
    root@duke01:/home/ldap/tmp# cat cn\=kerberos.ldif

    dn: cn={12}kerberos,cn=schema,cn=config
    objectClass: olcSchemaConfig
    cn: {12}kerberos
    olcAttributeTypes: {0}( 2.16.840.1.113719.1.301.4.1.1 NAME 'krbPrincipalName
    ' EQUALITY caseExactIA5Match SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1
    .4.1.1466.115.121.1.26 )
    olcAttributeTypes: {1}( 1.2.840.113554.1.4.1.6.1 NAME 'krbCanonicalName' EQU
    ALITY caseExactIA5Match SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.
    1466.115.121.1.26 SINGLE-VALUE )
    ......
    olcObjectClasses: {11}( 2.16.840.1.113719.1.301.6.17.1 NAME 'krbTicketPolicy
    ' SUP top STRUCTURAL MUST cn )
    structuralObjectClass: olcSchemaConfig
    entryUUID: 84374308-66be-1038-8430-576d5315da4e
    creatorsName: cn=config
    createTimestamp: 20181018011141Z
    entryCSN: 20181018011141.878509Z#000000#000#000000
    modifiersName: cn=config
    modifyTimestamp: 20181018011141Z

  • 编辑生成的/home/ldap/tmp/cn=kerberos.ldif文件,修改其中属性,删除以下不需要的部分,这部分属性可能不会一样,每次生成的value是肯定不一样,根据情况删除
    structuralObjectClass: olcSchemaConfig
    entryUUID: 84374308-66be-1038-8430-576d5315da4e
    creatorsName: cn=config
    createTimestamp: 20181018011141Z
    entryCSN: 20181018011141.878509Z#000000#000#000000
    modifiersName: cn=config
    modifyTimestamp: 20181018011141Z
    
  • 用ldapadd加载新的schema
    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /home/ldap/tmp/cn=kerberos.ldif
    
  • 查看是否加载成功
    ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
    
    过程如下:

    root@duke01:/home/ldap# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
    dn: cn=schema,cn=config
    dn: cn={0}core,cn=schema,cn=config
    dn: cn={1}cosine,cn=schema,cn=config
    dn: cn={2}nis,cn=schema,cn=config
    dn: cn={3}inetorgperson,cn=schema,cn=config
    dn: cn={4}kerberos,cn=schema 新增加成功的keberos模式

6.2、配置kerberos

6.2.1、设置/etc/krb5.conf文件

vim /etc/krb5.conf

1、设置libdefaults属性
找到[libdefaults]行,进行以下修改

[libdefaults]
        default_realm = EXAMPLE.COM

# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true

修改为

[libdefaults]
        default_realm = EXAMPLE.COM
        renew_lifetime = 7d
              ticket_lifetime = 24h
              dns_lookup_realm = false
              dns_lookup_kdc = false
              default_ccache_name = /tmp/krb5cc_%{uid}
# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true

2、设置realms属性
找到[realms]行,进行以下修改

[realms]        
        EXAMPLE.COM = {
                kdc = 10.0.0.55
                admin_server = 10.0.0.55
        }  

修改为

[realms]        
        EXAMPLE.COM = {
                kdc = 10.0.0.55
                admin_server = 10.0.0.55
                max_renewable_life = 30m
                            database_module = openldap_ldapconf
                             supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal

        }  

3、设置domain_realm属性
找到[domain_realm]行,进行以下修改

[domain_realm]
        .mit.edu = ATHENA.MIT.EDU
        mit.edu = ATHENA.MIT.EDU
        .media.mit.edu = MEDIA-LAB.MIT.EDU
        media.mit.edu = MEDIA-LAB.MIT.EDU
        .csail.mit.edu = CSAIL.MIT.EDU
        csail.mit.edu = CSAIL.MIT.EDU
        .whoi.edu = ATHENA.MIT.EDU
        whoi.edu = ATHENA.MIT.EDU
        .stanford.edu = stanford.edu
        .slac.stanford.edu = SLAC.STANFORD.EDU
        .toronto.edu = UTORONTO.CA
        .utoronto.ca = UTORONTO.CA

修改为

[domain_realm]
        .example.com = EXAMPLE.COM
              example.com = EXAMPLE.COM
              kdc.example.com = EXAMPLE.COM
              client.example.com = EXAMPLE.COM

4、添加以下属性

[logging]
  default = FILE:/home/ldap/log/krb5libs.log
  kdc = FILE:/home/ldap/log/krb5kdc.log
  admin_server = FILE:/home/ldap/log/kadmind.log

[dbdefaults]
  ldap_kerberos_container_dn = cn=kerberos,dc=example,dc=com

[dbmodules]
    openldap_ldapconf = {
        db_library = kldap
        ldap_servers = ldapi://
        ldap_kerberos_container_dn = "cn=kerberos,dc=example,dc=com"
        ldap_kdc_dn = "cn=root,dc=example,dc=com"
        ldap_kadmind_dn = "cn=root,dc=example,dc=com"
        ldap_service_password_file = /etc/krb5kdc/krb5.ldap
        ldap_conns_per_server = 5
    }
【注意】
1、ldap_kdc_dn 对应 Kerberos 访问 LDAP 数据库时的服务帐号,需要有读权限
2、ldap_kadmind_dn 对应 Kerberos 访问 LDAP 数据库时的管理帐号,需要有读写权限
3、此处为了简单方便,统一用cn=root,dc=example,dc=com一个进行管理
4、ldap_kerberos_container_dn 必须以 'cn'开头

6.2.1、设置/etc/krb5kdc/kdc.conf文件

在默认情况下supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包推荐不使用。所以需要针对aes256-cts进行修改。

vim /etc/krb5kdc/kdc.conf

将下面内:

[kdcdefaults]
    kdc_ports = 750,88

[realms]
    EXAMPLE.COM = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }

删除aes256-cts:normal

[kdcdefaults]
    kdc_ports = 750,88

[realms]
    EXAMPLE.COM = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }
【注意】在某些情况下,例如centos系统,
kdc.conf文件还会多一个 master_key_type = aes256-cts 配置
需要将其注释掉 #master_key_type = aes256-cts

6.3、LDAP增加kerberos用户

6.3.1、创建LDAP数据库(用于后续整合)

1、查看相关默认配置
由于安装LDAP时,使用的是MDB数据库,所以在/etc/ldap/slapd.d/cn=config目录查看olcDatabase={1}mdb.ldif文件中的一些相关默认配置

cat /etc/ldap/slapd.d/cn\=config/olcDatabase={1}mdb.ldif

内容如下:

dn: olcDatabase={1}mdb
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW:: e1NTSEF9VHlMckdjdXhZVDdkcEFyTVE0Rk02YmhXdWlCdi81Y3E=
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824
structuralObjectClass: olcMdbConfig
entryUUID: bf42cf74-64c2-1038-9ec4-b1830bf84692
creatorsName: cn=config
createTimestamp: 20181015123656Z
entryCSN: 20181015123656.605646Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20181015123656Z

其中以下内容是下面步骤所需要的关键

olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com

2、创建数据库信息
创建数据库信息文件modify.ldif

vim /home/ldap/modify.ldif

文件内容如下:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
# Temporary lines to allow initial setup
olcRootDN: uid=ldapadmin,ou=People,dc=example,dc=com

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: 12345678

dn: cn=config
changetype: modify
add: olcAuthzRegexp
olcAuthzRegexp: uid=([^,]*),cn=GSSAPI,cn=auth uid=$1,ou=People,dc=example,dc=com

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
# Everyone can read everything
olcAccess: {0}to dn.base="" by * read
# The ldapadm dn has full write access
olcAccess: {1}to * by dn="uid=ldapadmin,ou=People,dc=example,dc=com" by dn="cn=root,dc=example,dc=com" write by * read

3、载入数据库配置信息

ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/ldap/modify.ldif

过程如下:

root@duke01:/home/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/ldap/modify.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"
ldap_modify: Inappropriate matching (18)
additional info: modify/add: olcRootPW: no equality matching rule

在执行过程中报错,密码不能够被配置,配置文件编写不对。修改方法如下:
将modify.ldif文件中的下面内容:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: 12345678

修改为

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: 12345678

再次执行,过程如下:

root@duke01:/home/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/ldap/modify.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"
modifying entry "cn=config"
modifying entry "olcDatabase={1}mdb,cn=config"

注明:cn=root,dc=example,dc=com授权,以便整合Kerberos使用

6.3.2、创建数据库数据

数据库配置完成,但是没有数据,需要添加数据。
可以手动编写 ldif 文件来导入一些用户和组。
也可以使用 migrationtools 工具来生成 ldif 模板。
此处采用ldif文件配置方法来新增数据。
1、创建ldap_init_data.ldif文件

vim /home/ldap/ldap_init_data.ldif

添加内容如下:

dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: example com
dc: example

dn: ou=People,dc=example,dc=com
objectclass: organizationalUnit
ou: People
description: Users

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: uid=ldapadmin,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: LDAP admin account
uid: ldapadmin
sn: ldapadmin
uidNumber: 10001
gidNumber: 5000
homeDirectory: /home/ldap/ldapadmin
loginShell: /bin/bash

2、载入数据

ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/ldap_init_data.ldif

如果执行过程中报以下错误,是因为在按文档操作过程中,已经按照4.6.1章节创建了数据库数据信息,导致部分数据已经存在,所以无法创建成功。没有按照4.6.1章节操作,直接按照本章节操作是可以成功的。

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/ldap_init_data.ldif
adding new entry "dc=example,dc=com"
ldap_add: Already exists (68)

为了解决上面问题,需要将ldap_init_data.ldif文件修改为以下内容:

dn: ou=People,dc=example,dc=com
objectclass: organizationalUnit
ou: People
description: Users

dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: group

dn: uid=ldapadmin,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: LDAP admin account
uid: ldapadmin
sn: ldapadmin
uidNumber: 10001
gidNumber: 5000
homeDirectory: /home/ldap/ldapadmin
loginShell: /bin/bash

再次执行过程如下:

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/ldap_init_data.ldif
adding new entry "uid=ldapadmin,ou=People,dc=example,dc=com"
【注意】:-w 12345678 表示的是设置密码为12345678,此处的密码没有在配置文件中设置,用的是命令输入方式,这样可以避免密码泄露

3、验证数据
http://10.0.0.55/phpldapadmin页面使用uid=ldapadmin,ou=People,dc=example,dc=com用户进行登录,如果登录成功即表示数据库数据添加成功。如下页面:

6.3.3、导入linux系统用户

若要将 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 数据库,就需要用到 migrationtools 工具。
1、安装migrationtools

apt-get install migrationtools

过程如下:

root@duke01:/home/ldap# apt-get install migrationtools
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列【新】软件包将被安装:
migrationtools
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 233 个软件包未被升级。
需要下载 28.6 kB 的归档。
解压缩后会消耗 213 kB 的额外空间。
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 migrationtools all 47-8ubuntu2 [28.6 kB]
已下载 28.6 kB,耗时 1秒 (23.7 kB/s)
正在选中未选择的软件包 migrationtools。
(正在读取数据库 ... 系统当前共安装有 215537 个文件和目录。)
正准备解包 .../migrationtools_47-8ubuntu2_all.deb ...
正在解包 migrationtools (47-8ubuntu2) ...
正在设置 migrationtools (47-8ubuntu2) ...

2、修改默认配置
利用迁移工具生成模板,但是需要先修改默认的配置:

vim /etc/migrationtools/migrate_common.ph

将下面内容

\# Default DNS domain
$DEFAULT_MAIL_DOMAIN =  "padl.com";

\# Default base 
$DEFAULT_BASE =  "dc=padl,dc=com";

修改为

\# Default DNS domain
$DEFAULT_MAIL_DOMAIN =  "example.com";

\# Default base 
$DEFAULT_BASE =  "dc=example,dc=com";

3、生成文件模板

/usr/share/migrationtools/migrate_base.pl > /home/ldap/linux_base.ldif

4、导入命令
根据需求更改上面文件内容,然后执行下面语句,即可把linux用户导入到LDAP中

ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/linux_base.ldif

当然你可能会遇到下面错误,这是因为生成的linux_base.ldif文件中,有已经存在于LDAP的用户信息,所以导无法加载成功。

root@duke01:~# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/linux_base.ldif
adding new entry "dc=example,dc=com"
ldap_add: Already exists (68)

修改方法如下,删除已经存在的用户信息即可,原始内容如下:

dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain

dn: ou=Services,dc=example,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit

dn: ou=Rpc,dc=example,dc=com
ou: Rpc
objectClass: top
objectClass: organizationalUnit

dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Networks,dc=example,dc=com
ou: Networks
objectClass: top
objectClass: organizationalUnit

dn: nisMapName=netgroup.byuser,dc=example,dc=com
nismapname: netgroup.byuser
objectClass: top
objectClass: nisMap

dn: ou=Aliases,dc=example,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit

dn: ou=Protocols,dc=example,dc=com
ou: Protocols
objectClass: top
objectClass: organizationalUnit

dn: ou=Netgroup,dc=example,dc=com
ou: Netgroup
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

dn: ou=Mounts,dc=example,dc=com
ou: Mounts
objectClass: top
objectClass: organizationalUnit

dn: ou=Hosts,dc=example,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit

dn: nisMapName=netgroup.byhost,dc=example,dc=com
nismapname: netgroup.byhost
objectClass: top
objectClass: nisMap

修改为

dn: ou=Services,dc=example,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit

dn: ou=Rpc,dc=example,dc=com
ou: Rpc
objectClass: top
objectClass: organizationalUnit

dn: ou=Networks,dc=example,dc=com
ou: Networks
objectClass: top
objectClass: organizationalUnit

dn: nisMapName=netgroup.byuser,dc=example,dc=com
nismapname: netgroup.byuser
objectClass: top
objectClass: nisMap

dn: ou=Aliases,dc=example,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit

dn: ou=Protocols,dc=example,dc=com
ou: Protocols
objectClass: top
objectClass: organizationalUnit

dn: ou=Netgroup,dc=example,dc=com
ou: Netgroup
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

dn: ou=Mounts,dc=example,dc=com
ou: Mounts
objectClass: top
objectClass: organizationalUnit

dn: ou=Hosts,dc=example,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit

dn: nisMapName=netgroup.byhost,dc=example,dc=com
nismapname: netgroup.byhost
objectClass: top
objectClass: nisMap

执行过程如下:

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/linux_base.ldif
adding new entry "ou=Services,dc=example,dc=com"
adding new entry "ou=Rpc,dc=example,dc=com"
adding new entry "ou=Networks,dc=example,dc=com"
adding new entry "nisMapName=netgroup.byuser,dc=example,dc=com"
adding new entry "ou=Aliases,dc=example,dc=com"
adding new entry "ou=Protocols,dc=example,dc=com"
adding new entry "ou=Netgroup,dc=example,dc=com"
adding new entry "ou=Group,dc=example,dc=com"
adding new entry "ou=Mounts,dc=example,dc=com"
adding new entry "ou=Hosts,dc=example,dc=com"
adding new entry "nisMapName=netgroup.byhost,dc=example,dc=com"

导入后页面展示结果如下:


5、导入指定的用户
可以进行批量导入用户,也可以指定导入用户,操作如下:
①、创建系统用户test并设置密码为test

useradd test

②、查看用户是否创建成功,并导入到指定文件

grep -E "test" /etc/passwd >/home/ldap/test_userinfo.txt

③、转换test信息为ldif文件

/usr/share/migrationtools/migrate_passwd.pl /home/ldap/test_userinfo.txt /home/ldap/test_userinfo.ldif

④、导入系统

ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/test_userinfo.ldif

过程如下:

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/test_userinfo.ldif
adding new entry "uid=test,ou=People,dc=example,dc=com"

⑤、将用户组导入到指定文件

grep -E "test" /etc/group >/home/ldap/test_groupinfo.txt

⑥、转换组信息为ldif文件

/usr/share/migrationtools/migrate_group.pl /home/ldap/test_groupinfo.txt /home/ldap/test_groupinfo.ldif

⑦、导入到系统

ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/test_groupinfo.ldif

过程如下:

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/test_groupinfo.ldif
adding new entry "cn=test,ou=Group,dc=example,dc=com"

页面查看如下:



使用test用户登录页面查看如下:
登录密码是linux系统设置的test


6.3.4、LDAP操作指令(知识点,配合6.3.3章节新建的test用户操作

1、查询
查询新添加的 test 用户:

ldapsearch -LLL -x -D 'uid=ldapadmin,ou=People,dc=example,dc=com' -w 12345678 -b 'dc=example,dc=com' 'uid=test'

过程如下:

root@duke01:/home/ldap# ldapsearch -LLL -x -D 'uid=ldapadmin,ou=People,dc=example,dc=com' -w 12345678 -b 'dc=example,dc=com' 'uid=test'
dn: uid=test,ou=People,dc=example,dc=com
uid: test
cn: test
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JC56ZzI4a0JtJFNaeFlJV3Q1TjlBT2hlaHpOQThJN1RZYWFiVlZ
4Y1oxcUNjb2xncmN2cUg4dmpCRXlGUjJObkJmckVsb29DSmxIaGkwZURZMjZvYnphL2dXM0hEVXQv
shadowLastChange: 17823
shadowMax: 99999
shadowWarning: 7
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/test

2、修改
用户添加好以后,需要给其设定初始密码,运行命令如下:

ldappasswd -x -D 'uid=ldapadmin,ou=People,dc=example,dc=com' -w 12345678 "uid=test,ou=People,dc=example,dc=com" -S

过程如下:

root@duke01:/home/ldap# ldappasswd -x -D 'uid=ldapadmin,ou=People,dc=example,dc=com' -w 12345678 "uid=test,ou=People,dc=example,dc=com" -S
New password: 12345678
Re-enter new password:12345678

3、删除
删除用户:

ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=People,dc=example,dc=com' "uid=test,ou=People,dc=example,dc=com"

删除用户组:

ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=People,dc=example,dc=com' "cn=test,ou=group,dc=example,dc=com"

6.3.5、创建kerberos用户

1、新建user.ldif文件

vim /home/ldap/user.ldif

该文件用户ldap配置kerberos所要用到的用户信息,文件内容如下:

dn: cn=kerberos,dc=example,dc=com
cn: kerberos
objectClass: organizationalRole

dn: cn=root,dc=example,dc=com
cn: root
userPassword: root
objectClass: simpleSecurityObject
objectClass: organizationalRole

2、载入用户信息

ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/user.ldif

执行过程如下:

root@duke01:/home/ldap# ldapadd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 -f /home/ldap/user.ldif
adding new entry "cn=kerberos,dc=example,dc=com"
adding new entry "cn=root,dc=example,dc=com"

3、管理员修改普通用户的密码
cn=root,dc=example,dc=com用户密码修改为:12345678

ldappasswd -x -D "uid=ldapadmin,ou=People,dc=example,dc=com" -w 12345678 "cn=root,dc=example,dc=com" -s 12345678

6.3.5、生成kerberos访问ldap的服务密码文件

因为Kerberos 需要有 ldap_kdc_dnldap_kadmind_dn密码才能访问 LDAP数据库,执行以下命令:

kdb5_ldap_util -D uid=ldapadmin,ou=People,dc=example,dc=com -w 12345678 stashsrvpw -f /etc/krb5.ldap cn=root,dc=example,dc=com
cat /etc/krb5.ldap

过程如下:

root@duke01:/etc# kdb5_ldap_util -D uid=ldapadmin,ou=People,dc=example,dc=com -w 12345678 stashsrvpw -f /etc/krb5.ldap cn=root,dc=example,dc=com
Password for "cn=root,dc=example,dc=com": 输入密码:12345678
Re-enter password for "cn=root,dc=example,dc=com": 确认密码:12345678
root@duke01:/etc# cat /etc/krb5.ldap
cn=root,dc=example,dc=com#{HEX}3132333435363738

6.3.6、创建kerberos数据库

 kdb5_ldap_util -D uid=ldapadmin,ou=People,dc=example,dc=com -w 12345678 -H ldapi:// create -r EXAMPLE.COM -s

过程如下

root@duke01:/etc/krb5kdc# kdb5_ldap_util -D uid=ldapadmin,ou=People,dc=example,dc=com -w 12345678 -H ldapi:// create -r EXAMPLE.COM -s
Initializing database for realm 'EXAMPLE.COM' 初始化'EXAMPLE.COM'域的数据库
You will be prompted for the database Master Password.输入数据库主密码
It is important that you NOT FORGET this password.请勿忘记此密码,这一点很重要
Enter KDC database master key: 输入密码:12345678
Re-enter KDC database master key to verify:输入确认密码:12345678

6.3.7、重启Kerberos

service krb5-kdc restart
service krb5-admin-server restart

6.3.8、测试kerberos和ldap是否整合成功

1、添加用户

kadmin.local

添加一个test用户
过程如下:

root@duke01:/etc# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local: addprinc test 如果要添加test用户,必须在test前输入 addprinc 关键字
WARNING: no policy specified for test@EXAMPLE.COM; defaulting to no policy
Enter password for principal "test@EXAMPLE.COM": 输入test用户密码:test
Re-enter password for principal "test@EXAMPLE.COM": >确认test用户密码:test
Principal "test@EXAMPLE.COM" created.

2、检查是否添加成功

slapcat |grep "test"

root@duke01:/etc# slapcat |grep "test"
dn: krbPrincipalName=test@EXAMPLE.COM,cn=EXAMPLE.COM,cn=kerberos,dc=example,
krbPrincipalName: test@EXAMPLE.COM

3、检查ldap页面是否添加成功


7、Kerberos+LDAP认证整合

确保Kerberos和LDAP已经配置,即完成前6章的内容

7.1、采用该 LDAP作为用户认证。

1、先按照6.3.3章节第5小点进行操作,添加test用户

2、只需要对用户 uid=test,ou=People,dc=example,dc=com 添加 userPassword成员即可。
如果通过 命令行添加,需要先准备test.ldif文件(userPassword对应的密码为12345678),内容如下:

dn: uid=test,ou=People,dc=example,dc=com
changetype: modify
add: userPassword
userPassword:: e1NTSEF9QnpadEw0Wnpqak1YLzAycVhpbEdnT2pwT3BEYjZSMUoK

然后执行命令

ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 12345678 -h 10.0.0.55 -f /home/ldap/test.ldif

执行过程如下:

root@duke01:/home/ldap# vi test.ldif
dn: uid=test,ou=People,dc=example,dc=com
changetype: modify
add: userPassword
userPassword:: e1NTSEF9QnpadEw0Wnpqak1YLzAycVhpbEdnT2pwT3BEYjZSMUoK

"test.ldif" 4L, 146C 已写入
root@duke01:/home/ldap# ldapmodify -x -D 'cn=root,dc=example,dc=com' -w root -h 10.0.0.55 -f /home/ldap/test.ldif
modifying entry "uid=test,ou=People,dc=example,dc=com"

3、确认是否成功

ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 12345678 10.0.0.55 -b 'ou=People,dc=example,dc=com'

执行过程如下

root@duke01:/home/ldap# ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 12345678 10.0.0.55 -b 'ou=People,dc=example,dc=com'
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: 127.0.0.1 
#
# People, example.com
dn: ou=People,dc=example,dc=com
# test, People, example.com
dn: uid=test,ou=People,dc=example,dc=com
# ldapadmin, People, example.com
dn: uid=ldapadmin,ou=People,dc=example,dc=com
# search result
search: 2
result: 0 Success
# numResponses: 4
# numEntries: 3

7.2、使用 Kerberos 认证。

需要将用户的密码域做如下修改:

1、userPassword 对应的密码生成:

echo -n "{SASL}test@EXAMPLE.COM" | base64

过程如下:

root@duke01:/home/ldap# echo -n "{SASL}test@EXAMPLE.COM" | base64
e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==

2、编写修改test用户的密码的test_modify.ldif文件

dn: uid=test,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword:: e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==

过程如下:

root@duke01:/home/ldap# vi test_modify.ldif
dn: uid=test,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword:: e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==

"test_modify.ldif" 4L, 130C 已写入

3、执行应用该修改

ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 12345678 -h 10.0.0.55 -f /home/ldap/test_modify.ldif

过程如下:

root@duke01:/home/ldap# ldapmodify -x -D 'cn=root,dc=example,dc=com' -w root -h 10.0.0.55 -f /home/ldap/test_modify.ldif
modifying entry "uid=test,ou=People,dc=example,dc=com"

7.3、修改saslauthd配置

1、修改saslauthd配置

vi /etc/default/saslauthd

执行过程如下:将下面内容

#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

改为:

># Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="kerberos5"

重启:

service saslauthd restart

2、修改ldap配置
创建/etc/sasl2/slapd.conf文件

vim /etc/sasl2/slapd.conf

添加/etc/sasl2/slapd.conf文件内容:

pwcheck_method: saslauthd

重启:

service slapd restart

3、查看saslauthd是否报错

service saslauthd status -l

过程如下:

root@duke01:/home/ldap# service saslauthd status -l
● saslauthd.service - LSB: saslauthd startup script
   Loaded: loaded (/etc/init.d/saslauthd; bad; vendor preset: enabled)
   Active: active (running) since 三 2018-10-31 15:14:46 CST; 4min 44s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 20292 ExecStop=/etc/init.d/saslauthd stop (code=exited, status=0/SUCCESS)
  Process: 20311 ExecStart=/etc/init.d/saslauthd start (code=exited, status=0/SUCCESS)
    Tasks: 5
   Memory: 4.7M
      CPU: 40ms
   CGroup: /system.slice/saslauthd.service
           ├─20360 /usr/sbin/saslauthd -a kerberos5 -c -m /var/run/saslauthd -n 5
           ├─20361 /usr/sbin/saslauthd -a kerberos5 -c -m /var/run/saslauthd -n 5
           ├─20362 /usr/sbin/saslauthd -a kerberos5 -c -m /var/run/saslauthd -n 5
           ├─20363 /usr/sbin/saslauthd -a kerberos5 -c -m /var/run/saslauthd -n 5
           └─20364 /usr/sbin/saslauthd -a kerberos5 -c -m /var/run/saslauthd -n 5

10月 31 15:14:46 duke01 systemd[1]: Starting LSB: saslauthd startup script...
10月 31 15:14:46 duke01 saslauthd[20311]:  * Starting SASL Authentication Daemon saslauthd
10月 31 15:14:46 duke01 saslauthd[20360]: detach_tty      : master pid is: 20360
10月 31 15:14:46 duke01 saslauthd[20360]: ipc_init        : listening on socket: /var/run/saslauthd/mux
10月 31 15:14:46 duke01 systemd[1]: Started LSB: saslauthd startup script.
10月 31 15:14:46 duke01 saslauthd[20311]:    ...done.

7.4、增加kerberos的用户配置

执行如下操作:

kadmin.local -q "ank -clearpolicy -randkey host/duke01"
kadmin.local -q "ktadd host/duke01"
service saslauthd restart
ps -aux | grep saslauthd
kadmin.local -q 'ank -pw 12345678 test'
【注意】
1、host/duke01中的duke01,是服务器名称,不能写成IP
2、ankadd_principal简写,表示增加
3、-q表示静默,不进入kadmin.local的对话模式
4、-pw 表示设置test密码为12345678

7.5、测试Kerberos+OpenLDAP整合认证是否成功

1、测试kerberos认证

testsaslauthd -u test -p 12345678

执行过程如下:

root@duke01:/home/ldap# testsaslauthd -u test -p 12345678
0: OK "Success."

至此, Kerberos 认证测试成功。

2、测试OpenLDAP认证

ldapsearch -x -D 'uid=test,ou=people,dc=example,dc=com' -w 12345678 -h 10.0.0.55 -b 'ou=people,dc=example,dc=com'

执行 ldapsearch测试LDAP 认证是否成功

ldapsearch -x -D 'uid=test,ou=people,dc=example,dc=com' -w 123456 -h 127.0.0.1 -b 'ou=people,dc=example,dc=com'

参考

[kadmin用法]
http://manpages.ubuntu.com/manpages/xenial/en/man1/kadmin.1.html

[openldap搭建说明]
https://help.ubuntu.com/community/OpenLDAPServer

[sldap配置文件说明]
http://manpages.ubuntu.com/manpages/xenial/en/man5/slapd-config.5.html