一、安装Apache
1.1、安装Apache
apt-get update
apt-get install apache2
过程如下:
1.2、Apache安装目录信息
/var/www #Apache默认文档根目录
/etc/apache2 #Apache配置存储目录
/etc/apache2/apache2.conf #Apache配置文件
1.3、配置Apache
1.3.1、将“全局服务器名称”设置为“禁止语法警告”
如果不设置ServerName全球范围内,你会检查语法错误Apache配置时收到以下警告:
apache2ctl configtest #检查语法错误
过程如下:
修改/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流量
- 查看防火墙管理列表
过程如下:ufw app list
- 查看Apache Full使用的端口
过程如下:ufw app info "Apache Full"
- 防火墙开放Apache
ufw allow in "Apache Full"
- 访问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
过程如下:
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
2.3、安装PHP增强模块
2.3.1、查看PHP功能增强列表
apt-cache search php- | less
过程如下:
2.3.2、安装增强功能
经过筛选,选择安装php-ldap、php-mbstring
apt-get install php-ldap php-mbstring
过程如下:
2.4、测试PHP服务
2.4.1、添加测试文件
在/var/www/html下新建一个info.php文件,用于测试PHP是否配置成功
过程如下:
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*替换成具体需要删除的文件
过程如下:
3.2、 安装kerberos
apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
过程如下:
【注意】:安装好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
在这个过程中有很多新的问题需要回答。
过程如下:
4.3、打开防火墙上的LDAP端口
LDAP服务器已配置并运行。 打开防火墙上的LDAP端口,以便外部客户端可以连接:
ufw allow ldap
4.4、测试LDAP连接
测试与ldapwhoami的LDAP连接,该连接应该返回我们连接的用户名:
ldapwhoami -H ldap:// -x
4.5、检查安装状态
过程如下:
内容说明:
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
在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: zhiwei
givenName: Han
cn: Han ZhiWei
displayName: Han ZhiWei
uidNumber: 10000
gidNumber: 5000
userPassword: hanzhiwei
gecos: Han ZhiWei
loginShell: /bin/bash
homeDirectory: /home/ldap/han
【注意】:文件中的uidNumber、gidNumber这2个值不能和系统中的已经存在的值冲突,所以最好采用高数值来进行区分。
相关的值可以在/etc/passwd和/etc/group文件中进行查询
- 将用户信息加入到LDAP中
过程如下:ldapadd -x -D cn=admin,dc=example,dc=com -W -f ldap_init.ldif
4.6.2、检查节点、组、用户是否添加正确
ldapsearch -x -LLL -b dc=example,dc=com 'uid=han' cn gidNumber
过程如下:
指令说明:
-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
过程如下:
5.2、配置phpLDAPadmin
安装phpLDAPadmin应用程序,启用必要的Apache配置,并重新加载Apache。
Web服务器配置为提供应用程序,需要进行一些更改。 需要将phpLDAPadmin配置为使用的域,而不是自动填充LDAP登录信息。
需要修改/etc/phpldapadmin/config.php配置文件
vim /etc/phpldapadmin/config.php
配置LDAP服务器--标识
配置LDAP服务器--IP
- 配置LDAP服务器--域名
【注意】:
该配置告诉phpLDAPadmin LDAP层次结构的根目录,这是基于重新配置slapd包时输入的值。
前面slapd配置是example,因此在这里配置example.com
需要将每个域组件(不是一个点)放入dc= notation中将其转换为LDAP语法 - 配置LDAP服务器--登陆
【注意】:
如果phpLDAPadmin页面是可公开访问的,改配置是不能共享的信息,需要注释掉。因为此选项会预先填充Web界面中的管理员登录详细信息。
如果是非公开访问的,只需将dc=example改为dc=duke - 配置LDAP服务器--告警
【注意】:
需要调整控制phpLDAPadmin警告消息可见性的设置。
默认情况下,应用程序将显示相当多的关于模板文件的警告消息。 这些对目前使用的软件没有影响。
可以通过搜索hide_template_warning参数来隐藏它们,取消注释包含它的行,并将其设置为true
5.3、登陆phpLDAPadmin
在登录前,必须保用户电脑和LDAP服务器同属于一个域当中,并配置hosts文件。
例子:
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为起始位
过程如下: - 编辑生成的/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
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
过程如下:
在执行过程中报错,密码不能够被配置,配置文件编写不对。修改方法如下:
将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
再次执行,过程如下:
注明: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
过程如下:
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的用户信息,所以导无法加载成功。
修改方法如下,删除已经存在的用户信息即可,原始内容如下:
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
执行过程如下:
导入后页面展示结果如下:
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
过程如下:
⑤、将用户组导入到指定文件
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
过程如下:
页面查看如下:
使用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'
过程如下:
2、修改
用户添加好以后,需要给其设定初始密码,运行命令如下:
ldappasswd -x -D 'uid=ldapadmin,ou=People,dc=example,dc=com' -w 12345678 "uid=test,ou=People,dc=example,dc=com" -S
过程如下:
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
执行过程如下:
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_dn 和 ldap_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
过程如下:
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
过程如下
6.3.7、重启Kerberos
service krb5-kdc restart
service krb5-admin-server restart
6.3.8、测试kerberos和ldap是否整合成功
1、添加用户
kadmin.local
添加一个test用户
过程如下:
2、检查是否添加成功
slapcat |grep "test"
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
执行过程如下:
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
过程如下:
2、编写修改test用户的密码的test_modify.ldif文件
dn: uid=test,ou=People,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword:: e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==
过程如下:
3、执行应用该修改
ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 12345678 -h 10.0.0.55 -f /home/ldap/test_modify.ldif
过程如下:
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、ank是add_principal的简写,表示增加
3、-q表示静默,不进入kadmin.local的对话模式
4、-pw 表示设置test密码为12345678
7.5、测试Kerberos+OpenLDAP整合认证是否成功
1、测试kerberos认证
testsaslauthd -u test -p 12345678
执行过程如下:
至此, 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