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


    一、安装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

  • 相关阅读:
    魅族note手机 图片打马赛克
    魅蓝note手机一键root
    eclipse启动时return code 13
    Eclipse adt 23中运行百度地图官网上的demo出现fatal错误
    windows上部署svn服务器
    windows下jenkins slave 搭建
    图片懒加载
    tomcat7 设置静态资源的expires过期时间
    如何将不带www的根域名301重定向到带www的主域名
    简单的防止图片另存为
  • 原文地址:https://www.cnblogs.com/hzw97/p/11592244.html
Copyright © 2020-2023  润新知