- 基础环境准备
- 安装openldap服务端
- 初始化openldap配置
- 启动OpenLDAP
- 从新生成配置文件信息
- 规划OpenLDAP目录树组织架构
- 使用GUI客户端登陆查看
- openldap配置日志
- 经过migrationtools实现用户及用户组的添加
- OpenLDAP控制策略
表1:IP地址及主机名规划
| 主机 | 系统版本 | IP地址 | 主机名 | 时间同步 | 防火墙 | SElinux |
| --- | -------- | ------ | ----- | ------- | ----- | -------- |
| ldap服务端 | Centos 6.9最小化安装 | 192.168.244.17 | mldap01.gdy.com | 必须同步 | 关闭 | 关闭 |
| ldap客户端 | Centos 6.9最小化安装 | 192.168.244.18 | test01.gdy.com | 必须同步 | 关闭 | 关闭 |php
表2:OpenLDAP相关软件包套件
| 软件包名称 | 软件包功能描述 |
| --------- | ------------- |
| openldap | OpenLDAP服务端和客户端必须用的库文件 |
| openldap-clients | 在LDAP服务端上使用, 用于查看和修改目录的命令行的包 |
| openldap-servers | 用于启动服务和设置,包含单独的LDAP后台守护程序 |
| openldap-servers-sql | 支持SQL模块 |
| compat-openldap | openldap兼容性库 |html
将主机名添加至hosts文件中(两主机都要,本文主要为服务端)linux
[root@mldap01 ~]# cat >> /etc/hosts << EOF > 192.168.244.17 mldap01.gdy.com mldap01 > 192.168.244.18 test01.gdy.com test01 > EOF
经过yum安装openldap组建,解决软件包的依赖关系。
建议使用yum安装,简单方便快捷。web
[root@mldap01 ~]# yum -y install openldap openldap-servers openldap-clients
[root@mldap01 ~]# cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf [root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/*
[root@mldap01 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG [root@mldap01 ~]# chown -R ldap.ldap /var/lib/ldap/*
生成密码待用
shell [root@mldap01 ~]# slappasswd New password: Re-enter new password: {SSHA}MPZ6cRiXmkjFylwNetRnZunefUEzuKVL
sql
修改配置文件shell
除了loglevel新增,其余配置均为修改shell [root@mldap01 ~]# vim /etc/openldap/slapd.conf access to * by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.exact="cn=Manager,dc=gdy,dc=com" read by * none suffix "dc=gdy,dc=com" rootdn "cn=Manager,dc=gdy,dc=com" rootpw {SSHA}MPZ6cRiXmkjFylwNetRnZunefUEzuKVL loglevel -1 # 新增在最后一行
修改相关文件属性
shell [root@mldap01 ~]# chown ldap.ldap -R /etc/openldap [root@mldap01 ~]# chown ldap.ldap -R /var/lib/ldap [root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/*
数据库
[root@mldap01 ~]# /etc/init.d/slapd restart Stopping slapd: [FAILED] ls: cannot access /etc/openldap/slapd.d//cn=config/olcDatabase*.ldif: No such file or directory Starting slapd: [ OK ] [root@mldap01 ~]# ss -tnlp | grep slapd LISTEN 0 128 :::389 :::* users:(("slapd",10497,8)) LISTEN 0 128 *:389 *:* users:(("slapd",10497,7)) [root@mldap01 ~]# chkconfig slapd on [root@mldap01 ~]# chkconfig --list slapd slapd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
每次修改了配置文件,都须要删除/etc/openldap/slapd.d/*,从新生成vim
[root@mldap01 ~]# ls -lh /etc/openldap/slapd.d/ total 0 [root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ config file testing succeeded [root@mldap01 ~]# chown ldap.ldap -R /etc/openldap/ [root@mldap01 ~]# ls -lh /etc/openldap/slapd.d/ total 8.0K drwxr-x--- 3 ldap ldap 4.0K May 22 15:21 cn=config -rw------- 1 ldap ldap 1.3K May 22 15:21 cn=config.ldif
经过LDIF添加目录树
```shell
[root@mldap01 ~]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W后端
dn: dc=gdy,dc=com
dc: gdy
objectClass: top
objectClass: domaincentosdn: ou=people,dc=gdy,dc=com
ou: people
objectClass: top
objectClass: organizationalUnitdn: ou=group,dc=gdy,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit
EOF
Enter LDAP Password:
adding new entry "dc=gdy,dc=com"
adding new entry "ou=people,dc=gdy,dc=com"
adding new entry "ou=group,dc=gdy,dc=com"
```
经过ldapsearch查看目录树架构
```shell
[root@mldap01 ~]# ldapsearch -x -LLL
dn: dc=gdy,dc=com
dc: gdy
objectClass: top
objectClass: domain
dn: ou=people,dc=gdy,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit
dn: ou=group,dc=gdy,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit
```
若是报错
[root@mldap01 ~]# ldapsearch -x -LLL
No such object (32)
解决方法:
shell [root@mldap01 ~]# cat >> /etc/openldap/ldap.conf << EOF BASE dc=gdy,dc=com URI ldap://mldap01.gdy.com EOF
LDAP GUI客户端有以下:
本文使用GUI客户端为LDAPAdmin,该工具是window下一个绿色程序。因此很是推荐
LDAPAdmin安装
LDAPAdmin安装很是简单,能够从官网地址下载,而后解压即用
LDAPAdmin程序使用
链接至OpenLDAP服务端进行管理
其余使用(未写了,由于和普通的工具同样使用)
参考另外一篇文档LDAPAdmin使用
openldap的日志级别
```shell
[root@mldap01 ~]# slapd -d ?
Installed log subsystems:
Any (-1, 0xffffffff) //开启全部的dug信息 Trace (1, 0x1) //跟踪trace函数调用 Packets (2, 0x2) //与软件包的处理相关的dug信息 Args (4, 0x4) //全面的debug信息 Conns (8, 0x8) //连接数管理的相关信息 BER (16, 0x10) //记录包发送和接收的信息 Filter (32, 0x20) //记录过滤处理的过程 Config (64, 0x40) //记录配置文件的相关信息 ACL (128, 0x80) //记录访问控制列表的相关信息 Stats (256, 0x100) //记录连接、操做以及统计信息 Stats2 (512, 0x200) //记录向客户端响应的统计信息 Shell (1024, 0x400) //记录与shell后端的通讯信息 Parse (2048, 0x800) //记录条目的分析结果信息 Sync (16384, 0x4000) //记录数据同步资源消耗的信息 None (32768, 0x8000) //不记录
NOTE: custom log subsystems may be later installed by specific code
```
建立目录及调整权限,用于存放日志文件
shell [root@mldap01 ~]# mkdir -pv /var/log/slapd mkdir: created directory `/var/log/slapd' [root@mldap01 ~]# chown ldap.ldap /var/log/slapd
修改日志文件,重启rsyslog使其加载OpenLDAP参数
shell [root@mldap01 ~]# cat >> /etc/rsyslog.conf << EOF > local4.* /var/log/slapd/slapd.log > EOF [root@mldap01 ~]# tail -1 /etc/rsyslog.conf local4.* /var/log/slapd/slapd.log [root@mldap01 ~]# /etc/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
查看日志配置是否生效
因为在2.4小节的时候已经设置记录了全部文件。因此没有配置slapd.conf也没有重启slapd进程。
使用tail -f 监听日志文件,而后使用LDAPAdmin刷新一下立马就会有日志出现,有日志出现就证实生效了。
[root@mldap01 ~]# tail -f /var/log/slapd/slapd.log May 22 16:24:38 mldap01 slapd[10497]: daemon: activity on 1 descriptor May 22 16:24:38 mldap01 slapd[10497]: daemon: activity on: May 22 16:24:38 mldap01 slapd[10497]: 14r May 22 16:24:38 mldap01 slapd[10497]: May 22 16:24:38 mldap01 slapd[10497]: daemon: read active on 14 May 22 16:24:38 mldap01 slapd[10497]: daemon: epoll: listen=7 a ...
利用系统logrotate实现自动切割日志
shell [root@mldap01 ~]# cat > /etc/logrotate.d/ldap << EOF > /var/log/slapd/slapd.log { > prerotate > /usr/bin/chattr -a /var/log/slapd/slapd.log > endscript > compress > delaycompress > notifempty > rotate 100 > size 10M > postrotate > /usr/bin/chattr +a /var/log/slapd/slapd.log > endscript > } > EOF
此时当/var/log/slapd/slapd.log日志大于10M就会自动切割了。
shell [root@mldap01 ~]# yum -y install migrationtools
修改migrationtools的配置文件
修改/usr/share/migrationtools/migrate_common.ph文件中的两个地方
使用migrationtools生成openldap根域条目和用户条目及组条目
shell [root@mldap01 ~]# /usr/share/migrationtools/migrate_base.pl > base.ldif [root@mldap01 ~]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd > passwd.ldif [root@mldap01 ~]# /usr/share/migrationtools/migrate_group.pl /etc/group > group.ldif
导入生成的ldif文件
```shell
[root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f base.ldif
加-c是指跳过错误,继续导入
Enter LDAP Password:
adding new entry "dc=gdy,dc=com"
ldap_add: Already exists (68)
adding new entry "ou=Hosts,dc=gdy,dc=com"
...
adding new entry "ou=People,dc=gdy,dc=com"
ldap_add: Already exists (68)
adding new entry "ou=Group,dc=gdy,dc=com"
ldap_add: Already exists (68)
...
adding new entry "nisMapName=netgroup.byhost,dc=gdy,dc=com"
[root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f group.ldif
Enter LDAP Password:
adding new entry "cn=root,ou=Group,dc=gdy,dc=com"
adding new entry "cn=bin,ou=Group,dc=gdy,dc=com"
adding new entry "cn=daemon,ou=Group,dc=gdy,dc=com"
...
adding new entry "cn=ntp,ou=Group,dc=gdy,dc=com"
adding new entry "cn=ldap,ou=Group,dc=gdy,dc=com"
adding new entry "cn=tomcat,ou=Group,dc=gdy,dc=com"
[root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f passwd.ldif
Enter LDAP Password:
adding new entry "uid=root,ou=People,dc=gdy,dc=com"
adding new entry "uid=bin,ou=People,dc=gdy,dc=com"
...
adding new entry "uid=ntp,ou=People,dc=gdy,dc=com"
adding new entry "uid=ldap,ou=People,dc=gdy,dc=com"
adding new entry "uid=tomcat,ou=People,dc=gdy,dc=com"此时使用LDAPAdmin查看
默认状况下,不容许OpenLDAP用户自身修改密码,仅管理员具备修改权限。为了提升我的账号的安全性,须要让用户自身能够修改并更新密码信息,不须要管理员干涉。具体步骤以下:
# 用户没有权限修改密码 [appman@test01 ~]$ passwd Changing password for user appman. Enter login(LDAP) password: New password: Retype new password: LDAP password information update failed: Insufficient access # 权限不足 passwd: Authentication token manipulation error # 在openldap服务器上修改slapd.conf配置文件。 [root@mldap01 ~]# vim /etc/openldap/slapd.conf # 在database config行上面添加,不然无效 access to attrs=shadowLastChange,userPassword by self write by * auth access to * by * read [root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/* [root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ config file testing succeeded [root@mldap01 ~]# chown -R ldap.ldap /etc/openldap [root@mldap01 ~]# /etc/init.d/slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ] # 配置后,用户有权限更改密码了。 [appman@test01 ~]$ passwd Changing password for user appman. Enter login(LDAP) password: New password: Retype new password: LDAP password information changed for appman passwd: all authentication tokens updated successfully.
dn: dc=gdy,dc=com dc: gdy objectClass: top objectClass: domain dn: ou=people,dc=gdy,dc=com ou: people objectClass: top objectClass: organizationalUnit dn: ou=group,dc=gdy,dc=com ou: group objectClass: top objectClass: organizationalUnit dn: uid=user1,ou=people,dc=gdy,dc=com uid: user1 cn: user1 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30001 gidNumber: 30001 homeDirectory: /home/user1 dn: uid=user2,ou=people,dc=gdy,dc=com uid: user2 cn: user2 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30002 gidNumber: 30002 homeDirectory: /home/user2 dn: uid=user3,ou=people,dc=gdy,dc=com uid: user3 cn: user3 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30003 gidNumber: 30003 homeDirectory: /home/user3 dn: uid=user4,ou=people,dc=gdy,dc=com uid: user4 cn: user4 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30004 gidNumber: 30004 homeDirectory: /home/user4 dn: uid=user5,ou=people,dc=gdy,dc=com uid: user5 cn: user5 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30005 gidNumber: 30005 homeDirectory: /home/user5 dn: uid=user6,ou=people,dc=gdy,dc=com uid: user6 cn: user6 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30006 gidNumber: 30006 homeDirectory: /home/user6 dn: uid=user7,ou=people,dc=gdy,dc=com uid: user7 cn: user7 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30007 gidNumber: 30007 homeDirectory: /home/user7 dn: uid=user8,ou=people,dc=gdy,dc=com uid: user8 cn: user8 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30008 gidNumber: 30008 homeDirectory: /home/user8 dn: uid=user9,ou=people,dc=gdy,dc=com uid: user9 cn: user9 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30009 gidNumber: 30009 homeDirectory: /home/user9 dn: uid=user10,ou=people,dc=gdy,dc=com uid: user10 cn: user10 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 30010 gidNumber: 30010 homeDirectory: /home/user10 dn: cn=user1,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user1 gidNumber: 30001 dn: cn=user2,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user2 gidNumber: 30002 dn: cn=user3,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user3 gidNumber: 30003 dn: cn=user4,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user4 gidNumber: 30004 dn: cn=user5,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user5 gidNumber: 30005 dn: cn=user6,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user6 gidNumber: 30006 dn: cn=user7,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user7 gidNumber: 30007 dn: cn=user8,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user8 gidNumber: 30008 dn: cn=user9,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user9 gidNumber: 30009 dn: cn=user10,ou=group,dc=gdy,dc=com objectClass: posixGroup objectClass: top cn: user10 gidNumber: 30010