云平台初建之LDAP服务统一管理HMC账号

1.1   LDAP机制与原理

LDAP(轻量级目录访问协议,Light weight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取、浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持惊喜复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的失误管理或回卷策略。而目录服务的更新则Ibanez都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访问协议-LDAP。
LDAP的信息是以树型结构存储的,在树根一般定位的简称有:
o-organization:组织-公司
OU(Organizational Unit):组织单元-部门
c-countryName:国家
DC(Domain Component):域名
SN(suer name):真实名称
CN(Common Name):常用名称
HMC(Hardware Management Console):是独立于Power服务器的外置系统,将Power服务器的HMC接口和HMC服务器接入同一个网络,那么可以使用HMC系统对Power服务器进行管理,在Power服务器上创建分区(LPAR)也需要用到HMC系统。

LDAP 在读取、浏览、搜索目录和专门存储有序信息的数据库等方面进行了优化。许多计算环境的目标是使得来自任何位置(如工作站、公共工作站和 Web)的用户都能够使用各种网络资源。可以使用 LDAP Server 进行用户管理,以实现这一目标。
图5-1 LDAP机制

ldap-8

图5-2 LDAP原理

ldap-9.JPG

LDAP 客户端向 LDAP 服务器发送一个查询,以便从集中式的数据库中获取这个用户和组的信息。DB2® 是用于存储用户和组信息的数据库。LDAP 数据库以具有层次结构的条目为基础,存储和检索信息,其中每个条目都具有区别于其他条目的名称、类型和属性。属性用于为条目定义可接受的取值。LDAP 数据库能够为许多用户存储和维护他们的条目。

1.2   LDAP特性

  • 低维护费用
  • 易配置
  • 易管理
  • 提供了满足不同应用程序对目录服务所需求的特性。

1.3   目录设计

设计目录结构是LDAP最重要的方面之一。下面我将通过一个简单的例子来说明如何设计合理的目录结构。该例子将通过Netscape地址薄来访问。假设有一个位于美国US(c=US)而且跨越多个州的名为Acme(o=Acme)的公司。Acme希望为所有的雇员实现一个小型的地址薄服务器。

我们从一个简单的组织DN开始:

dn:o=Acme,c=US

Acme所有的组织分类和属性将存储在该DN之下,这个DN在该存储在该服务器的目录是唯一的。Acme希望将其雇员的信息分为两类:管理者(ou=Managers)和普通雇员(ou=Employees),这种分类产生的相对区别名(RDN,relative distingguished names。便是相对于顶点DN)就是:

dn:ou=Managers,o=Acme,c=us

dn:ou=Employees,o=Acme,c=US

在下面我们将会看到分层结构的组成:顶点是US的Acme,下面是管理者组织单元和雇员组织单元。因此包括Managers和Employees的DN组成为:

dn:cn=Jason H.Smith,ou=Managers,o=Acme,c=US

dn:cn=Ray D.Jones,ou=Employees,o=Acme,c=US

dn:cn=Eric S.Woods,ou=Employees,o=Acme,c=us

为了引用Jason H.Smith的通用名(common name)条目,LDAP将采用cn=Jason H.Smith的RDN。然后将前面的父条目结合在一起就形成如下的树型结构:

cn=Jason H.Smith

+ou=Managers

+o=Acme

+c=US

->dn:cn=Jason H.Smith,ou=Managers,o=Acmes,c=US

现在已经定义好了目录结构,下一步就需要导入目录信息数据。目录信息数据将被存放在LDIF文件中,其实导入目录信息数据的默认存放文件。用户可以方便的编写Perl脚本来从例如/etc/passwd、NIS等系统文件中自动创建LDIF文件。

下面的实例保存目录信息数据为testdate.ldif文件,该文件的格式说明将可以在man ldif中得到。

在添加任何组织单元以前,必须首先定义Acme DN:

dn:o=Acme,c=US

objectClass:organization

这里o属性是必须的

o:Acme

下面是管理组单元的DN,在添加任何管理者信息以前,必须先定义该条目。

dn:ou=Managers,o=Acme,c=US

objectClass:organizationalUnit

这里ou属性是必须的。

ou:Managers

第一个管理者DN:

dn:cn=Jason H.Smith,ou=Managers,o=Acme,c=US

objectClass:inetOrgPerson

cn和sn都是必须的属性

cn:Jason H.Smith

sn:Smith

但是还可以定义一些可选的属性

TelephoneNumber:111-222-9999

mail:headhauncho@acme.com

localityName:Houston

可以定义另外一个组织单元:

Dn:ou=Employees,o=Acme,c=US

objectClass:organizationalUnit

ou:Employees

并添加雇员信息如下:

Dn:cn=Ray D.Jones,ou=Employees,o=Acmes,c=US

objectClass:inetOrgPerson

cn:Ray D.Jones

sn:Jones

telephoneNumber:444-555-6767

mail:jonesrd@ame.com

localityName:Houston

dn:cn=Eric S.Woods,ou=Employees,o=Acme,c=US

objectClasss:inetOrgPerson

cn:Eric S.Woods

sn:Woods

telephoneNumber:444-555-6768

mail:woodses@acme.com

localityName:Houston

1.4   系统所需软件

1.4.1  软件准备

  • 操作系统:红帽企业版 linux AS6  即:linux6.4
  • LDAP服务软件:openldap-servers、openldap-clients、openldap、openldap-devel一共4个包

1.4.2  硬件准备

  • 服务器:一台HMC X3550服务器,一台装有RedHat6.4系统的虚拟机或者服务器

1.4.3  网络规划

  • 每个服务器的IP地址和主机名(确保server跟client可以互相ping通访问)
用途 Ip地址 主机名
ldap server 192.168.222.140 ldapserver
ldap client 192.168.222.200 HMC

1.5   LDAP配置

1.5.1  LDAP软件安装

首先建立光盘挂载目录/disk,然后挂载本地光盘 mount /dev/cdrom /disk。

然后配置本地光盘yum源,cd进入/etc/yum.repos.d/目录中,mv rhel-debuginfo.repo rhel-debuginfo.repo.bak,建立自己的redhat.repo,如下:

[redhat]

baseurl=file:///disk

gpgcheck=0

建立好后,通过yum install openldap* 安装LDAP服务必备包即可。

1.5.2  主机信息配置

以下是RedHat6.4 LDAP服务器的/etc/hosts文件:

127.0.0.1               localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.222.140        ldapserver

192.168.222.200        HMC

备注:此IP根据自己实际情况填写

以下是HMC7.4.0 LDAP客户端的/etc/hosts文件:

ccfw@hmc:~>su – root

口令:

hmc:~cat /etc/hosts

127.0.0.1 localhost.lcoaldomain localhost

192.168.222.200 hmc.hmcdomain hmc

1.5.3  修改主机名和主机信息

1、最好用setup配置网络,防止出现特殊字符,如有特殊字符可能会出现网卡不识别的样子,如dev num命名的网卡,此时重启再观察。也可以修改/etc/sysconfig/network-script/ifcfg-eth0文件:

#cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=00:0c:29:7c:9a:72

TYPE=Ethernet

UUID=6a0adcb4-ec51-43d1-9cf2-5e8dfe52eb63

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPADDR=192.168.222.140

NETMASK=255.255.255.0

GATEWAY=192.168.222.1

IPV6INIT=no

USERCTL=no

2、修改/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=ldapserver

GATEWAY=192.168.222.1

1.5.4  LDAP服务端配置

RedHat6.3环境下:

LDAP server:192.168.222.140

LDAP clent: 192.168.222.200

准备工作:

配置前先关闭iptables和SELINUX,避免配置过程中报错。

# service iptables stop

不重启关闭selinux的解决办法:

执行命令:setenforce 0

在新版本中的Red Hat 和 Fedora 上,修改档案/etc/sysconfig/selinux:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing – SELinux security policy is enforced.

# permissive – SELinux prints warnings instead of enforcing.

# disabled – SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

# targeted – Only targeted network daemons are protected.

# strict – Full SELinux protection.

SELINUXTYPE=targeted

把 SELINUX设定为disable, 下次启动系统后将会停止SElinux。

Linux核心参数(Kernel Parameter)

或者可以在核心参数后加上: selinux=0 (停止) 或 selinux=1 (开启)参数

档案/boot/grub/grub.conf

title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-358.el6 ro root=LABEL=/ rhgb quiet selinux=0

initrd /initrd-2.6.32-358.3l6.img

检查SELinux现时况态

要知到你现在是否使用 SELinux:

# getenforce

disabled

1.LDAP server端配置:

安装LDAP服务(使用YUM本地光盘安装)

# yum install openldap-* -y

提示安装以下4个包

openldap-devel-2.4.23-26.el6.x86_64

openldap-clients-2.4.23-26.el6.x86_64

openldap-2.4.23-26.el6.x86_64

openldap-servers-2.4.23-26.el6.x86_64

拷贝LDAP配置文件到LDAP目录(redhat6.3):

# cd /etc/openldap/

# cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf

redhat6.0或6.1版本配置文件在主目录有备份:

# cd /etc/openldap/

# cp slapd.conf.bak slapd.conf

创建LDAP管理员密码:

# slappasswd

这里我输入的密码是redhat,输入完密码后,返回一串密文,先保存到剪贴板

{SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKLy(我的密码是123456)

也可以生成MD5的秘钥

[root@ldapserver 桌面]# slappasswd -h {MD5}

New password:

Re-enter new password:

{MD5}4QrcOUm6Wau+VuBX8g+IPg==

编译配置文件

# vi /etc/openldap/nf

找到115行,默认如图:

ldap-1

修改为:

ldap-2

高亮部分为刚才生成的密码(加密后的)。

配置文件最后几行的权限部分我们也要做相应的更改:

原内容:

ldap-3

更改为:

ldap-4

保存退出。

拷贝DB_CONFIG文件到指定目录

# cp /usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIG

删除默认/etc/openldap/slapd.d下面的所有内容,否则后面在使用ldapadd的时候会报错:

# rm -rf /etc/openldap/slapd.d/*

启动LDAP的slapd服务,并设置自启动:

# service slapd restart

# chkconfig slapd on

赋予配置目录相应权限:

# chown -R ldap:ldap /var/lib/ldap

# chown -R ldap:ldap /etc/openldap/

测试并生成配置文件:

slaptest  -f /etc/openldap/nf -F /etc/openldap/slapd.d

返回config file testing succeeded,则配置成功。

赋予生成的配置文件予权限并重启:

# chown -R ldap:ldap /etc/openldap/slapd.d

# service slapd restart

创建一个账号,以备客户端测试登陆

# useradd ldapuser1

# passwd ldapuser1

至此,这些用户仅仅是系统上存在的用户(存储在/etc/passwd和/etc/shadow上),并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。但LDAP只能识别特定格式的文件 即后缀为ldif的文件(也是文本文件),所以不能直接使用/etc/passwd和/etc/shadow。 需要migrationtools这个工具把这两个文件转变成LDAP能识别的文件。

安装配置migrationtools

# yum install migrationtools -y

进入migrationtool配置目录

# cd /usr/share/migrationtools/

首先编辑migrate_common.ph

# vi  migrate_common.ph

找到如下内容(大概在70行):

ldap-5

修改为:

ldap-6

下面利用pl脚本将/etc/passwd 和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下。

注意:默认生成的/etc/passwd和/etc/shadow和/etc/group里包含了所有用户组的账户信息,而我们只需要ldapuser1的账户信息,下面我们需要调整3个ldif文件,去掉不相关的信息:

# ./migrate_base.pl > /tmp/base.ldif

这是创建根项,并为 Hosts、Networks、Group 和 People 等创建第一级的组织单元(OU)

编辑 base.ldif,删除除下面之外的所有条目:

dn: dc=my-domain,dc=com

dc: my-domain

objectClass: top

objectClass: domain

dn: u=People,dc=my-domain,dc=com

ou: People

objectClass: top

objectClass: organizationalUnit

dn: u=Group,dc=my-domain,dc=com

ou: Group

objectClass: top

objectClass: organizationalUnit

执行:

grep ldapuser /etc/group > /tmp/group.ldapuser.in

./migrate_group.pl /tmp/group.ldapuser.in > /tmp/group.ldapuser.ldif

导出ldapuser组的信息,以同样方式到处其他组的信息

执行:

grep ldapuser /etc/passwd > /tmp/passwd.ldapuser.in

./migrate_passwd.pl /tmp/passwd.ldapuser.in > /tmp/passwd.ldapuser.ldif

可以复制passwd文件为passwd.in后将passwd.in中系统自带的用户删除后作为脚本的输入参数,这样可以一次转换所有用户。不建议将系统自带用户导入ldap,这样做的好处是万一在ldap认证出现问题的情况下不至于连root账户也不能登录。

下面就要把这三个文件导入到LDAP,这样LDAP的数据库里就有了我们想要的用户

# ldapadd -x -D “cn=admin,dc=example,dc=com” -W -f /tmp/base.ldif

Enter LDAP Password:

adding new entry “dc=example,dc=com”

adding new entry “ou=People,dc=example,dc=com”

adding new entry “ou=Group,dc=example,dc=com”

# ldapadd -x -D “cn=admin,dc=example,dc=com” -W -f /tmp/passwd.ldapuser.ldif

Enter LDAP Password:

adding new entry “uid=ldapuser1,ou=People,dc=example,dc=com”

# ldapadd -x -D “cn=admin,dc=example,dc=com” -W -f /tmp/group.ldif

Enter LDAP Password:

adding new entry “cn=ldapuser1,ou=Group,dc=example,dc=com”

过程若无报错,则LDAP服务端配置完毕

tcpdump跟踪客户端登录IP访问信息:

[root@ldapserver tmp]# tcpdump host 192.168.222.200

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

08:39:32.705444 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [S], seq 2110679166, win 5840, options [mss 1460,sackOK,TS val 3126465 ecr 0,nop,wscale 2], length 0

08:39:32.706228 ARP, Request who-has 192.168.222.200 tell 192.168.222.140, length 28

08:39:32.706504 ARP, Reply 192.168.222.200 is-at 00:0c:29:6a:a5:d2 (oui Unknown), length 46

08:39:32.706535 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [S.], seq 3995253765, ack 2110679167, win 14480, options [mss 1460,sackOK,TS val 18760238 ecr 3126465,nop,wscale 6], length 0

08:39:32.706857 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [.], ack 1, win 1460, options [nop,nop,TS val 3126466 ecr 18760238], length 0

08:39:32.707030 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [P.], seq 1:15, ack 1, win 1460, options [nop,nop,TS val 3126466 ecr 18760238], length 14

08:39:32.707037 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [.], ack 15, win 227, options [nop,nop,TS val 18760240 ecr 3126466], length 0

08:39:32.707671 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [P.], seq 1:15, ack 15, win 227, options [nop,nop,TS val 18760240 ecr 3126466], length 14

08:39:32.708052 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [.], ack 15, win 1460, options [nop,nop,TS val 3126466 ecr 18760240], length 0

08:39:32.708489 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [P.], seq 15:99, ack 15, win 1460, options [nop,nop,TS val 3126466 ecr 18760240], length 84

08:39:32.709995 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [P.], seq 15:491, ack 99, win 227, options [nop,nop,TS val 18760243 ecr 3126466], length 476

08:39:32.710170 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [P.], seq 491:505, ack 99, win 227, options [nop,nop,TS val 18760243 ecr 3126466], length 14

08:39:32.711249 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [P.], seq 99:194, ack 505, win 1728, options [nop,nop,TS val 3126467 ecr 18760243], length 95

08:39:32.716206 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [P.], seq 505:519, ack 194, win 227, options [nop,nop,TS val 18760249 ecr 3126467], length 14

08:39:32.716589 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [P.], seq 194:208, ack 519, win 1728, options [nop,nop,TS val 3126468 ecr 18760249], length 14

08:39:32.716769 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [P.], seq 519:533, ack 208, win 227, options [nop,nop,TS val 18760249 ecr 3126468], length 14

08:39:32.717481 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [P.], seq 208:215, ack 533, win 1728, options [nop,nop,TS val 3126468 ecr 18760249], length 7

08:39:32.717533 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [F.], seq 215, ack 533, win 1728, options [nop,nop,TS val 3126468 ecr 18760249], length 0

08:39:32.717697 IP 192.168.222.140.ldap > 192.168.222.200.50590: Flags [F.], seq 533, ack 216, win 227, options [nop,nop,TS val 18760250 ecr 3126468], length 0

08:39:32.717907 IP 192.168.222.200.50590 > 192.168.222.140.ldap: Flags [.], ack 534, win 1728, options [nop,nop,TS val 3126468 ecr 18760250], length 0

现在检查以LDIF格式填充的OpenLDAP数据库,已经添加到数据库中的信息,此时运行:

[root@ldapserver 桌面]# ldapsearch -x -b “dc=example,dc=com”

# extended LDIF

#

# LDAPv3

# base <dc=example,dc=com> with scope subtree

# filter: (objectclass=*)

# requesting: ALL

#

# example.com

dn: dc=example,dc=com

dc: example

objectClass: top

objectClass: domain

# People, example.com

dn: ou=People,dc=example,dc=com

ou: People

objectClass: top

objectClass: organizationalUnit

# Group, example.com

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

ou: Group

objectClass: top

objectClass: organizationalUnit

# ldapuser1, Group, example.com

dn: cn=ldapuser1,ou=Group,dc=example,dc=com

objectClass: posixGroup

objectClass: top

cn: ldapuser1

userPassword:: e2NyeXB0fXg=

gidNumber: 501

# ldapuser1, People, example.com

dn: uid=ldapuser1,ou=People,dc=example,dc=com

uid: ldapuser1

cn: ldapuser1

objectClass: account

objectClass: posixAccount

objectClass: top

objectClass: shadowAccount

userPassword:: e2NyeXB0fSQ2JHd4YXRpdlU1JG40OUlLMjlkTHlXWTBrZkhTZ0NWL1BIOVRDbEt

NQVlZSUhsTXRzZWV3cWNXVWdzQlBiQmN5SXpzQkJCRmtlbi9JaDZmUS5aaHFlcFJPRGJKR1FrRkou

shadowLastChange: 16460

shadowMin: 0

shadowMax: 99999

shadowWarning: 7

loginShell: /bin/bash

uidNumber: 501

gidNumber: 501

homeDirectory: /home/ldapuser1

# search result

search: 2

result: 0 Success

# numResponses: 6

# numEntries: 5

这里应该显示如上信息,证明dn创建完毕,可以被客户端搜索到。

重启slapd完成配置

# service slapd restart

2.LDAP 客户端配置

打开客户端图形化界面命令行

输入system-config-authentication,按照如图配置:

ldap-7

 

1.5.5  为LDAP server加入ldap log记录

[root@chasfer/etc]# man slapd.conf          //查看slapd.conf帮助,了解loglevel参数

  loglevel <integer> […]

              Specify  the  level  at which debugging statements and operation

              statistics  should  be  syslogged  (currently  logged   to   the

              syslogd(8)   LOG_LOCAL4  facility).   They  must  be  considered

              subsystems rather than increasingly verbose  log  levels.   Some

              messages  with  higher  priority  are  logged  regardless of the

              configured loglevel as soon as any logging is  configured.   Log

              levels are additive, and available levels are:

                      1      (0x1 trace) trace function calls

                      2      (0x2 packets) debug packet handling

                      4      (0x4 args) heavy trace debugging (function args)

                      8      (0x8 conns) connection management

                      16     (0x10 BER) print out packets sent and received

                      32     (0x20 filter) search filter processing

                      64     (0x40 config) configuration file processing

                      128    (0x80 ACL) access control list processing

                      256    (0x100   stats)   connections,  LDAP  operations,

                             results (recommended)

                      512    (0x200 stats2) stats log entries sent

                      1024   (0x400  shell)  print  communication  with  shell

                             backends

                      2048   (0x800 parse) entry parsing

                      16384  (0x4000 sync) LDAPSync replication

                      32768  (0x8000  none)  only  messages  that  get  logged

                             whatever log level is set

              The desired log level can be input  as  a  single  integer  that

              combines  the  (ORed)  desired  levels,  both  in  decimal or in

              hexadecimal notation, as a  list  of  integers  (that  are  ORed

              internally),  or  as  a list of the names that are shown between

              brackets, such that

loglevel 129

                  loglevel 0x81

                  loglevel 128 1

                  loglevel 0x80 0x1

                  loglevel acl trace

              are equivalent.  The keyword any can be used as  a  shortcut  to

              enable  logging  at  all levels (equivalent to -1).  The keyword

              none, or the equivalent  integer  representation,  causes  those

              messages  that  are logged regardless of the configured loglevel

              to be logged.  In fact, if loglevel is  set  to  0,  no  logging

              occurs,  so  at  least  the  none level is required to have high

              priority messages logged.

              The loglevel defaults to stats.  This level should usually  also

              be  included  when  using  other  loglevels, to help analyze the

              logs.

Loglevel行设置的是日志选项。可以将其设置为这样的级别:调试语句和操作统计信息都会被记录到/var/log/slapd.log中。日志级别是可以累加的:296=256日志链接/操作/结果+32搜索过滤器处理+8连接管理:

下面列举所有loglevel的说明:

-1 记录所有的信息

0  不记录debug

1跟踪功能调用的信息

2 包处理的debug信息

4丰富的debug信息

8连接管理信息

16包的收发信息

32搜索过滤的处理过程

64配置文件的处理过程

128访问控制列表的处理过程

256连接、操作及其结果的统计数据

512向客户端返回的结果的统计信息

1024与shell后端的通信信息

2048显示记录条目的分析信息

4096数据库缓存处理信息

8192数据库索引

16384从服务器数据同步资源消耗处理信息

若要记录所有的debug日志,可以使用LOG_LEVEL4 syslogd系统日志来记录,这需要在slapd.conf中添加如下语句实现:

local4.debug /var/log/slapd.log

以下是我的配置:

 [root@chasfer /etc]# cat /etc/openldap/slapd.conf  //加入loglevel,并赋值

loglevel 2096

[root@chasfer /etc]# cat /etc/rsyslog.conf          //rsyslog中加入ldap日志文件

# save OpenLDAP log

local4.*                                            /var/log/ldap.log

[root@chasfer /etc]# service rsyslog restart                 //重启rsyslog服务

此时,日志文件/var/log/ldap.log即会保存Openldap的日志信息.

1.5.6  LDAP Client HMC配置

首先我们需要清除ldapuser1用户的filter功能,有如下重要的三步需要操作和验证:

3) Open a SSH session and login with hscroot, clear the search filter, type

chhmcldap -o r -r searchfilter

清除ldapuser1的filter功能。

下面是对这个命令参数的说明:

To remove an LDAP resource or the LDAP configuration from the HMC:

chhmcldap -o r -r {backup | ldap | binddn | bindpw | searchfilter}

OPTIONS

-o The operation to perform. Valid values are s to set an HMC LDAP configuration attribute, and r to

remove an LDAP resource or the LDAP configuration from the HMC.

-r The LDAP resource to remove. Valid values are backup to remove the backup LDAP server, ldap

to unconfigure LDAP on the HMC, binddn to remove the bind Distinguished Name (DN),

bindpw to remove the bind password, and searchfilter to remove the LDAP search filter.

This option is required for a remove operation. This option is not valid for a set operation.

4) Set the search scope level (depends on if you want to search subtree or not)

chhmcldap -o s –scope sub|one

选择是搜寻子树还是只搜寻根树。

5) Type following to validate the configuration, e.g.

ldapsearch -x -D “<bind DN>” -W -H <LDAP server>

注意:这里的ldapsearch结果应该与server端查出来的一致。

HMC管理控制台下,输入LDAP client用户账户ldapuser1/ldapuser1,登录后状态如图5-2

ldap-10

图5-2

以server端ldapuser1用户登录HMC控制台后,验证登录情况,ldapuser1账户比默认的hscroot在管理里少了一些功能,对比5-2,如图5-3:

ldap-11

图5-3

登录成功后,查看openldap中的slapd服务记录的客户端登录成功的信息,这里我们用户属性采用的cn或者uid都可以成功登录:

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 fd=16 ACCEPT from IP=192.168.222.200:38275 (IP=0.0.0.0:389)

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=0 BIND dn=”” method=128

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=0 RESULT tag=97 err=0 text=

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=1 SRCH base=”uid=ldapuser1,ou=People,dc=example,dc=com” scope=2 deref=0 filter=”(cn=ldapuser1)”

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=2 BIND dn=”uid=ldapuser1,ou=People,dc=example,dc=com” method=128

Jan 31 20:35:47 ldapserver slapd[15055]: slap_global_control: unrecognized control: 1.3.6.1.4.1.42.2.27.8.5.1

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=2 BIND dn=”uid=ldapuser1,ou=People,dc=example,dc=com” mech=SIMPLE ssf=0

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=2 RESULT tag=97 err=0 text=

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=3 BIND anonymous mech=implicit ssf=0

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=3 BIND dn=”” method=128

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=3 RESULT tag=97 err=0 text=

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 op=4 UNBIND

Jan 31 20:35:47 ldapserver slapd[15055]: conn=1006 fd=16 closed

注意,用户失败的登录,这里我们采用了ou用户属性进行filter查找过滤:

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 fd=16 ACCEPT from IP=192.168.222.200:58368 (IP=0.0.0.0:389)

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 op=0 BIND dn=”” method=128

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 op=0 RESULT tag=97 err=0 text=

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 op=1 SRCH base=”uid=ldapuser1,ou=People,dc=example,dc=com” scope=2 deref=0 filter=”(ou=ldapuser1)”

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 op=2 UNBIND

Jan 31 20:30:20 ldapserver slapd[15055]: conn=1005 fd=16 closed

1.6   附录

1.6.1  LDAP服务端配置日志记录

 

ldap

1.6.1  执行ldapadd 命令时报错ldap_bind: Invalid credentials (49)

引用

ldap_bind: Invalid credentials (49)

这是由于/etc/openldap/slapd.d 目录中使用的数据与执行导入命令时设置的DN 路径不符。

解决办法是,修改ldapadd 中-D 参数后面指定的DN值,或使用slapd.conf 配置模板生成新的配置数据。方法可见上面5.5.4

1.6.2  删除叶节点

# ldapdelete -x -D “cn=admin,dc=example,dc=com” -Wr “dc=example,dc=com”

Enter LDAP Password:

注意:这里recursive递归删除参数位置。

1.6.3  删除非叶节点

# ldapdelete -x -D “cn=admin,dc=example,dc=com” -W “dc=example,dc=com”

Enter LDAP Password:

ldap_delete: Operation not allowed on non-leaf (66)

additional info: subordinate objects must be deleted first

这里我们需要这样操作:

# ldapdelete -x -D “cn=admin,dc=example,dc=com” -w 123456 “cn=ldapuser1,ou=Group,dc=example,dc=com”

再用ldapsearch查找:

# ldapsearch -x -b “dc=example,dc=com”

# extended LDIF

#

# LDAPv3

# base <dc=example,dc=com> with scope subtree

# filter: (objectclass=*)

# requesting: ALL

#

# example.com

dn: dc=example,dc=com

dc: example

objectClass: top

objectClass: domain

# People, example.com

dn: ou=People,dc=example,dc=com

ou: People

objectClass: top

objectClass: organizationalUnit

# Group, example.com

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

ou: Group

objectClass: top

objectClass: organizationalUnit

# ldapuser1, People, example.com

dn: uid=ldapuser1,ou=People,dc=example,dc=com

uid: ldapuser1

cn: ldapuser1

objectClass: account

objectClass: posixAccount

objectClass: top

objectClass: shadowAccount

userPassword:: e2NyeXB0fSQ2JHd4YXRpdlU1JG40OUlLMjlkTHlXWTBrZkhTZ0NWL1BIOVRDbEt

NQVlZSUhsTXRzZWV3cWNXVWdzQlBiQmN5SXpzQkJCRmtlbi9JaDZmUS5aaHFlcFJPRGJKR1FrRkou

shadowLastChange: 16460

shadowMin: 0

shadowMax: 99999

shadowWarning: 7

loginShell: /bin/bash

uidNumber: 501

gidNumber: 501

homeDirectory: /home/ldapuser1

# search result

search: 2

result: 0 Success

# numResponses: 5

# numEntries: 4

对照之前的ldapsearch结果,我们发现删除了非叶子节点:

# ldapuser1, Group, example.com

dn: cn=ldapuser1,ou=Group,dc=example,dc=com

objectClass: posixGroup

objectClass: top

cn: ldapuser1

userPassword:: e2NyeXB0fXg=

gidNumber: 501

1.6.4  LDAP常用命令说明

1、删除命令ldapdelete

# ldapdelete -x -D ‘cn=root,dc=it,dc=com’ -W ‘uid=qq1,dc=it,dc=com’

2、重新索引ldap数据库命令slapindex

# slapindex -f slapd.conf

3、设置使用者密码

-x 进行简单认证

-D 用来绑定服务器的DN

-w 绑定DN的密码

-S 提示的输入密码

-s pass 把密码设置为pass

-a pass 设置old passwd为pass

-A 提示的设置old passwd

-H 是指要绑定的服务器

-I 使用sasl会话方式

# ldappasswd -x -D “cn=root,dc=it,dc=com” -W “uid=qq1,dc=it,dc=com” -S

New password:

Re-enter new password:

Enter bind password:

Result: Success (0)

## “Enter bind password” 是 “cn=root,dc=it,dc=com”管理员的密码

4、管理员密码更改

# slappasswd

New password

Re-enter new password

{SSHA}83DJ4KVwqlk1uh9k2uDb8+NT1U4RgkEs

接下再拷贝到 path/to/sldap.conf 的 rootpw 即可,重启使用配置文件生效

5、修改目录内容

-a 添加新的条目.缺省的是修改存在的条目.

-C 自动追踪引用.

-c 出错后继续执行程序并不中止.缺省情况下出错的立即停止.比如如果你的ldif 文

件内的某个条目在数据库内并不存在,缺省情况下程序立即退出,但如果使用了该参数,程

序忽略该错误继续执行.

-n 用于调试到服务器的通讯.但并不实际执行搜索.服务器关闭时,返回错误;服务器

打开时,常和-v 参数一起测试到服务器是否是一条通路.

-v 运行在详细模块.在标准输出中打出一些比较详细的信息.比如:连接到服务器的

ip 地址和端口号等.

-M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的.

-f file 从文件内读取条目的修改信息而不是从标准输入读取.

-x 使用简单认证.

-D binddn 指定搜索的用户名(一般为一dn 值).

-W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用.

-w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用.

-H ldapuri 指定连接到服务器uri(ip 地址和端口号,常见格式为

ldap://hostname:port).如果使用了-H 就不能使用-h 和-p 参数.

-h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用.

-p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用.

如果使用了-h 和-p 参数就不能使用-H 参数.

-Z[Z] 使用StartTLS 扩展操作.如果使用-ZZ,命令强制使用StartTLS 握手成功.

-V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用

TLS 方式配合使用,并且匿名绑定到目录服务器.

-e 设置客户端证书文件,例: -e cert/client.crt

-E 设置客户端证书私钥文件,例: -E cert/client.key

# ldapmodify -x -D “cn=root,dc=it,dc=com” -W -f modify.ldif

通过ldif文件修改ldap数据,ldif文件格式如下:

dn: cn=qq,dc=it,dc=com

changetype: modify

replace: mail

mail:modme@example.com

add: title

title: Grand Poobah

add: jpegPhoto

jpegPhoto:<file:///tmp/modme.jpeg

delete: description

6、增加条目ldapadd

我们也可用slapadd命令来导入数据。该命令可以导入包含一些系统信息的ldif文件,如:

slapd

4 使用IPv4标准

6 使用IPv6标准

-d debug模式 一般用 -1,1,256

-f 指定配置文件的路径

-h 可以指定启动服务的端口 ldap://:2004 用2004端口启动服务

slurpd

-d debug模式 一般用4

-f 指定配置文件

-r 指定复制

ldapadd

-x 进行简单认证

-D 用来绑定服务器的DN

-h 目录服务的地址

-w 绑定DN的密码

-f 使用ldif文件进行条目添加的文件

例子 ldapadd -x -D “cn=root,dc=starxing,dc=com” -w secret -f /root/test.ldif

ldapadd -x -D “cn=root,dc=starxing,dc=com” -w secret (这样写就是在命令行添加条目)

7、查找条目ldapsearch

ldapsearch

-x 进行简单认证

-D 用来绑定服务器的DN

-w 绑定DN的密码

-b 指定要查询的根节点

-H 制定要查询的服务器

ldapsearch -x -D “cn=root,dc=starxing,dc=com” -w secret -b “dc=starxing,dc=com”

使用简单认证,用 “cn=root,dc=starxing,dc=com” 进行绑定,

要查询的根是 “dc=starxing,dc=com”。这样会把绑定的用户能访问”dc=starxing,dc=com”下的

所有数据显示出来。

8、启用sasl验证

前提是你在系统中安装了sasl认证库,并在编译openldap时支持它,默认就支持的。到http://asg.web.cmu.edu/cyrus下载。

# saslpasswd2 -c test

接着配置slapd.conf文件,加入以下内容。

sasl-regexp

uid=(.*),cn=.*,cn=auth

uid=$1,dc=it,dc=com

重启服务器使配置文件生效。这个配置是最大权限的配置,如果要细化请查阅相关文档。用以下命令测试

# ldapsearch -U qq-b ‘uid=qq,dc=it,dc=com’ -D ‘dc=it,dc=com’ -Y DIGEST-MD5

采用digest-md5验证,提示密码,输入saslpasswd2的密码。

9、配置服务器复制

在一些关键的应用场合,我们需设置多个ldap服务器实例,且数据要保持同步。当一台服务器出现故障或被黑客攻击时,我们就能继续保持应用的正常运行。通过DNS的轮流查询功能,还能实现服务器的负载均衡,提高响应速度。在openldap中有一个slurpd进程,利用slurpd进程可帮助我们实现多台ldap服务器数据的同步功能。下面简单介绍一下主、从ldap服务器的配置。

slurpd运行在主服务器上,它能把主服务器上的变化通过LDAP协议传送到从服务器上。从服务器上的变化不能传送到主服务器上,也就是说是单向同步的。主从服务器的版本最好一样,以减少兼容性问题。主从服务器的安装方法是一样的,关键是配置文件有所不同。我的操作系统是debian sarge,在确保主从服务器能正常运行的前提下进行以下配置:

首先,把主从服务器关闭。通过以下三步操作静态同步主从服务器上的数据:

把主服务器上/var/lib/ldap目录下的所有数据库文件全部拷贝到从服务器的同目录中,覆盖原有文件。

把主服务器上的/etc/ldap/schema目录下的所有schema文件拷贝到从服务器的同目录中,覆盖原有文件。

把主服务器上/etc/ldap/slapd.conf文件拷贝到从服务器的同目录中,覆盖原有文件。

配置主服务器上的slapd.conf文件,取消replogfile指令前的注释符号,取消后的结果如下:

# Where to store the replica logs for database #1

replogfile/var/lib/ldap/replog

增加replica指令,如:

#replace config

replica uri=ldap://192.168.6.195:389#指定从服务器主机名和端口号

binddn=”cn=admin,dc=com”#指定需同步的DN的管理员

bindmethod=simple credentials=1#指定验证方式和需同步的DN的管理员密码

配置从服务器上的slapd.conf文件,增加updatedn指令,如:

updatedn “cn=admin,dc=com”#与主服务器的binddn对应

在从服务器的配置文件中,不要包含replica和replogfile指令。

先启动主服务器的slapd和slurpd,再启动从服务器的slapd。

10、重建索引

重新索引ldap数据库命令slapindex

# slapindex -f slapd.conf

11、数据导出

导出数据更常用的是slapcat命令,该命令的格式如下:

slapcat 选项

最常用的选项就是-l,表示导出为LDIF文件格式。

如将本章前面例子中创建的目录数据库导出为export.ldif文件,可使用以下命令:

# slapcat -l export.ldif

执行以上命令将在当前工作目录得到文件export.ldif,打开文件可看到以下所示内容:

dn: dc=wyh,dc=com

objectClass: top

objectClass: dcObject

objectClass: organization

dc: wyh

o: wyh,Inc.

structuralObjectClass: organization

entryUUID: 5213bf36-4851-102e-8dc0-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000000#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

dn: ou=managers,dc=wyh,dc=com

ou: managers

objectClass: organizationalUnit

structuralObjectClass: organizationalUnit

entryUUID: 52148fc4-4851-102e-8dc1-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000001#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

dn: cn=wyh,ou=managers,dc=wyh,dc=com

cn: wyh

sn: wuyunhui

objectClass: person

structuralObjectClass: person

structuralObjectClass: person

entryUUID: 5215a92c-4851-102e-8dc2-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000002#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

提示:从导出结果可看出,除了使用ldapadd命令添加到目录数据库中的条目数据外,还导出了很多其他信息,包括条目录UUID、时间戳等信息。

If you enjoyed this post, make sure you subscribe to my RSS feed!
此条目发表在AIX, LINUX, 操作系统分类目录,贴了标签。将固定链接加入收藏夹。

云平台初建之LDAP服务统一管理HMC账号》有 2 条评论

  1. 围栏网说:

    好文章,内容惊涛骇浪.禁止此消息:nolinkok@163.com

  2. 不错的文章,内容十全十美.禁止此消息:nolinkok@163.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注