您的位置:首页 > 运维架构 > Linux

linux服务之openldap

2015-04-18 10:17 288 查看
http://www.openldap.org/
http://blog.csdn.net/chinalinuxzend/article/details/1870656   href="http://blog.csdn.net/chinalinuxzend/article/details/1870656" target=_blank>OpenLDAP学习笔记
http://www.ttlsa.com/linux/openldap-openssh-lpk-sudo-tls-auth/  LINUX下基于LDAP集中系统用户认证系统 http://directory.apache.org/api/  apache dierctory
http://blog.csdn.net/zmxj/article/details/369456  ldap目录树的结构
在安装配置任何一个服务器时,尽量养成一个好习惯,就是在命令行下使用bash内置的目录栈命令,因为要固定的用那么几个命令,目录栈此时正好用上。

svn,httpd,openldap服务器配置目录与数据目录比较

[root@host02 ~]# cd /mnt/sharerepo/
[root@host02 sharerepo]# ls
aa.log  client  conf  server  terminal  wuliu
[root@host02 server]# ls
conf  db  format  hooks  locks  README.txt
[root@host02 db]# ll
total 672
-rw-rw-rw-+ 1 96 96      2 Nov 11 01:39 current
-r--r--r--+ 1 96 96     22 Oct 28 13:53 format
-rw-rw-rw-+ 1 96 96   1920 Oct 28 13:53 fsfs.conf
-rw-rw-rw-+ 1 96 96      5 Oct 28 13:53 fs-type
-rw-rw-rw-+ 1 96 96      2 Oct 28 13:53 min-unpacked-rev
-rw-r--r--+ 1 96 96 636928 Nov 11 01:39 rep-cache.db
drwxrwsrwx+ 3 96 96   4096 Oct 28 13:53 revprops
drwxrwsrwx+ 3 96 96   4096 Oct 28 13:53 revs
drwxrwsrwx+ 2 96 96   4096 Nov 11 01:39 transactions
-rw-rw-rw-+ 1 96 96      2 Nov 10 23:18 txn-current
-rw-rw-rw-+ 1 96 96      0 Oct 28 13:53 txn-current-lock
drwxrwsrwx+ 2 96 96   4096 Nov 11 01:39 txn-protorevs
-rw-rw-rw-+ 1 96 96     37 Oct 28 13:53 uuid
-rw-rw-rw-+ 1 96 96      0 Oct 28 13:53 write-lock

svn的配置目录
/mnt/sharerepo/server/conf
svn的数据目录
/mnt/sharerepo/server/db

httpd的配置目录
/etc/httpd/conf/
httpd的数据目录
/var/www/html/

openldap的配置目录
10:24:28 43 /usr/local/etc/openldap:#ll
total 40
-rw-r--r--. 1 root root  618 Nov 13 10:06 1.ldif
-rw-------. 1 root root  845 Nov  2 17:22 DB_CONFIG.example
-rw-r--r--. 1 root root  245 Nov  2 17:22 ldap.conf
-rw-r--r--. 1 root root  245 Nov  2 17:22 ldap.conf.default
drwxr-xr-x. 2 root root 4096 Nov  2 17:22 schema
-rw-------. 1 root root 1956 Nov  5 17:34 slapd.conf
-rw-------. 1 root root 2129 Nov  2 17:22 slapd.conf.default
drwxr-xr-x. 2 root root 4096 Nov 13 10:02 slapd.d
-rw-------. 1 root root 2626 Nov  5 17:17 slapd.ldif
-rw-------. 1 root root 2651 Nov  2 17:22 slapd.ldif.default

openldap的数据目录
10:23:35 41 /usr/local/var/openldap-data:#ll
total 1016
-rw-r--r--. 1 root root     4096 Nov  5 17:34 alock
-rw-------. 1 root root    24576 Nov  5 17:34 __db.001
-rw-------. 1 root root   188416 Nov  5 17:34 __db.002
-rw-------. 1 root root   270336 Nov  5 17:34 __db.003
-rw-------. 1 root root    98304 Nov  5 17:34 __db.004
-rw-------. 1 root root   753664 Nov  5 17:34 __db.005
-rw-------. 1 root root    32768 Nov  5 17:34 __db.006
-rw-------. 1 root root      845 Nov  2 17:22 DB_CONFIG.example
-rw-------. 1 root root     8192 Nov  5 15:14 dn2id.bdb
-rw-------. 1 root root    32768 Nov  5 15:14 id2entry.bdb
-rw-------. 1 root root 10485760 Nov  5 17:15 log.0000000001
-rw-------. 1 root root     8192 Nov  5 15:14 objectClass.bdb


yum install openldap-servers

yum install openldap-clients

/usr/sbin/slapacl
/usr/sbin/slapadd
/usr/sbin/slapauth
/usr/sbin/slapcat
/usr/sbin/slapd
/usr/sbin/slapdn
/usr/sbin/slapindex
/usr/sbin/slappasswd
/usr/sbin/slapschema
/usr/sbin/slaptest

LDAP:Lightweight Directory Access Protocol 轻量级目录访问协议

LDAP协议基于X.500标准, 与X.500不同,LDAP支持TCP/IP, 是跨平台的和标准的协议

LDAP标准实际上是在X.500标准基础上产生的一个简化版本

AD是Active Directory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,

只是AD顺便还提供了用户接口,也可以利用Active Directory当做LDAP服务器存放一些自己的东西而已。比如LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。然后微软将LDAP做了一些封装接口,用户可以利用这些接口写程序操作LDAP,使得Active Directory也成了一个LDAP服务器。

总之:Active Directory = LDAP服务器+LDAP应用(Windows域控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)

7.1.2
目录服务标准:X.500和LDAP
目录服务的两个国际标准是X.500和LDAP。X.500包括了从X.501到X.509等一系列目录数据服务,已经被作为提供全球范围的目录服务的一种国际标准。
而LDAP是基于TCP/IP协议的目录访问协议,是Internet上目录服务的通用访问协议。
X.500是国际电联定义的目录标准,它包括了一系列完整的目录数据服务。用于X.500客户机与服务器通信的协议是DAP(Directory Access Protocol)。X.500为网络用户提供分布式目录服务。
它定义一个机构如何在一个企业的全局范围内共享名字和与它们相关的对象。X.500规定总体命名方式,全球统一的名字空间,一个完整的X.500系统称为一个目录。这个目录是一个数据库,称为目录信息数据库(DIB)。X.500是层次性的,所有对象被组织成树形结构,模仿一个机构的组织形式。X.500目录服务还能够实现身份认证、访问控制。它被公认为是实现一个目录服务的最好途径,但是它的实现需要很大投资,效率不高,在实际应用中存在着不少障碍。DAP对相关层协议环境要求过多,在许多小系统上无法使用,也不适应TCP/IP协议体系。
鉴于此,出现了DAP的简化版LDAP。
LDAP(Lightweight Directory Access Protocol)的目的很明确,就是要简化X.500目录的复杂度以降低开发成本,同时适应Internet的需要。LDAP已经成为目录服务的标准,它比X.500 DAP协议更为简单实用,而且可以根据需要定制,因而实际应用也更为广泛。与X.500不同,LDAP支持TCP/IP协议,这对访问Internet是必需的。X.500采用公钥基础结构(PKI)作为主要的认证方式,而LDAP最初并不考虑安全问题,目前已增加安全机制。为保证数据访问安全,可使用LDAP的ACL(访问控制列表)来控制对数据读和写的权限。
LDAP目前有两个版本:第2版LDAP v2和第3版LDAP v3。基于LDAP v3的服务器可以让普通用户使用支持LDAP功能的Web浏览器,进行有关电子邮件用户的查询,可以查询的用户属性包括姓名、电话号码、电子邮件地址和地址信息等;系统管理员可以通过LDAP客户程序远程进行目录管理操作,如添加、删除和修改用户账户信息等;可以请求服务器执行扩展操作。

内部细节并不重要,因为这些工具可以将数据库的内容以文本格式(LDAP 数据交换格式,LDIF)呈现在您的面前。

LDAP 信息被组织成属性和值的组合,称为 条目(entry)。条目可能会具有必须的属性或可选属性。一个条目的属性必须要遵循 /etc/openldap/schema/ 模式文件中定义的规则。规则包含在条目的 objectclass 属性中。看一下下面的关系,我们可以看出 posixAccount objectclass 中包含了密码文件条目的信息(posixAccount userPassword 是文件条目的 base64 编码)。

在LDAP中信息以树状方式组织,在树状信息中的基本数据单元是条目,而每个条目由属性构成,属性中存储有属性值

(1)O:Organization 组织
根的表示方法(参考LDAP Server)
a. 组织名称(x.500)
假设组织名称为zhangyang
o=zhangyang
b. 域名
假设组织域名为zhangyang.com
o=zhangyang.com或dc=zhangyang, dc=com
(2)OU: Organization Unit 组织单元
(3)Entry: 条目,记录, 由DN唯一标识
(4)DN: Distinguished Name,每个叶子结点到根的路径就是DN
如: cn=test, ou=ou1, o=zhangyang.com
(5)RDN: Relative Distinguished Name,叶子结点本身的名字是RDN
如:test就是RDN
(6)Base DN: 基准DN,指定LDAP search的起始DN,即从哪个DN下开始搜索
搜索组织单元为ou1,则base DN为 ou=ou1,o=O
ou=ou1,o=zhangyang.com 或 ou=ou1,dc=zhangyang, dc=com
(7)AttributeType:属性类型,
(8)ObjectClass: 对象类,由多个attributetype(属性类型)组成, 每个条目(Entry)必须属于某个或多个对象类(Object Class)
(9)schema文件: 定义对象类、属性类型、语法和匹配规则, 有系统schema,用户也可自定义schema文件
(10) LDIF:LDAP Interchange Format, 是指存储LDAP配置信息及目录内容的标准文本文件格式。LDIF文件常用来向目录导入或更改记录信息,
基本格式:AttributeName: value
属性名 冒号 空格 属性值

dn: dc=zy,dc=net
objectclass: dcObject
objectclass: organization
dc: zy
o: zhangyang
(11)监听端口
TCP/IP port: 389
SSL port: 636

三、Search filter:
每个表达式都放在括号内,多个表达式用与(&),或(|),非(!)等连结
& (&(filter1)(filter2)...(filtern)) filter1,filter2,...,filtern同时满足
| (|(filter1)(filter2)...(filtern)) filter1,filter2,...,filtern至少有一个满足
! (!(filter)) 非filter
filter支持通配符(wildcard)*
*表示零或多个字符

如(objectclass=*),指列出所有类型的记录(不过分类)

四、LDAP客户端和LDAP服务器端交互过程
1. 绑定。LDAP客户端与LDAP服务器建立连接。可匿名绑定,也可以用户名+密码形式绑定(具体参考LDAP Server, AD不支持匿名查询)。
2. LDAP客户端向LDAP服务器发出查询、添加、修改、删除entry等操作。
3. 解除绑定。LDAP客户端与LDAP服务器断开连接。

五、 LDAP软件
常见的LDAP服务器:Microsoft Active Directory, IBM Domino, openldap
常见的LDAP客户端: JXplorer

DNS树
UNIX文件的目录树
ldap的DIT

超级用户与密码由slapd.conf下面指定

rootdn "cn=Manager,dc=fgy,dc=com"

rootpw secret

curl -O ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.42.tgz tar zxvf openldap-2.4.42.tgz
cd openldap-2.4.42
./configure
yum install db4-devel
make depend
make
make test
make install
cd /usr/local/etc/openldap
vi slapd.conf
cd /usr/local/var/openldap-data
/usr/local/libexec/slapd
默认安装完成之后,就可以启动,然后尽量通过工具去操作slapadd,slaptest等
两种配置方式老的slapd.conf,与新的slapd-config方式。

mkdir slapd.d
两种方式,
1.复制一个现成的,然后添加
cp slapd.ldif slapd.d/1.ldif
grep -v "^#" 1.ldif >2.ldif
slapadd -F /usr/local/etc/openldap/slapd.d -n 0 -l 2.ldif
优先顺序是先检查slapd.d目录中有无slapd-config方式的文件,如无,会找slapd.conf文件来启动,并生成bdb格式的文件,如下
[root@localhost slapd.d]# ll /usr/local/var/openldap-data/
total 980
-rw-r--r--. 1 root root     2048 Nov 14 09:46 alock
-rw-------. 1 root root    24576 Nov 14 09:46 __db.001
-rw-------. 1 root root   188416 Nov 14 09:46 __db.002
-rw-------. 1 root root   270336 Nov 14 09:46 __db.003
-rw-------. 1 root root    98304 Nov 14 09:46 __db.004
-rw-------. 1 root root   753664 Nov 14 09:46 __db.005
-rw-------. 1 root root    32768 Nov 14 09:46 __db.006
-rw-------. 1 root root     8192 Nov 14 09:46 dn2id.bdb
-rw-------. 1 root root    32768 Nov 14 09:46 id2entry.bdb
-rw-------. 1 root root 10485760 Nov 14 09:46 log.0000000001
在服务未启动之前就添加或转换,这样当服务启动后,会在此ldif所定义的目录中生成以下文件
[root@localhost slapd.d]# ll /usr/local/var/openldap-data/
total 16
-rw-------. 1 root root 12288 Nov 14 10:08 data.mdb
-rw-------. 1 root root  8192 Nov 14 10:08 lock.mdb

2.将现成的进行转换
slaptest -f /usr/local/etc/openldap/slapd.conf -F /usr/local/etc/openldap/slapd.d

kill -INT `cat /usr/local/var/run/slapd.pid`
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
ldapsearch -x -b 'dc=fgy,dc=com' '(objectclass=*)'
ldapsearch -x -D cn=config -w VerySecret -b cn=config
ldapsearch -x -D cn=config -w secret -b cn=config
ldapadd -x -D "cn=Manager,dc=fgy,dc=com" -W -f a.ldif
ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif
ldapwhoami
slaptest -f slapd.conf -F slapd.d
slapindex -b 'dc=fgy,dc=com'
slappasswd -s wo

10:39:45 16 ~/packages/openldap-2.4.42:#slaptest -u -f /usr/local/etc/openldap/slapd.conf
config file testing succeeded

15:08:25 62 /usr/local/etc/openldap/schema:#/usr/local/libexec/slapd -d ?
Installed log subsystems:

Any                            (-1, 0xffffffff)
Trace                          (1, 0x1)
Packets                        (2, 0x2)
Args                           (4, 0x4)
Conns                          (8, 0x8)
BER                            (16, 0x10)
Filter                         (32, 0x20)
Config                         (64, 0x40)
ACL                            (128, 0x80)
Stats                          (256, 0x100)
Stats2                         (512, 0x200)
Shell                          (1024, 0x400)
Parse                          (2048, 0x800)
Sync                           (16384, 0x4000)
None                           (32768, 0x8000)

NOTE: custom log subsystems may be later installed by specific code

控制台查看日志
14:01:20 122 /usr/local/etc/openldap:#/usr/local/libexec/slapd -d 256
56457cb5 @(#) $OpenLDAP: slapd 2.4.42 (Nov  2 2015 17:08:40) $
root@localhost.localdomain:/root/packages/openldap-2.4.42/servers/slapd
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/openldap-data: (2).
Expect poor performance for suffix "dc=fgy,dc=com".
56457cb5 bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/open: (2).
Expect poor performance for suffix "dc=fgy1,dc=com".
56457cb5 bdb_db_open: warning - no DB_CONFIG file found in directory /usr/local/var/myhome: (2).
Expect poor performance for suffix "dc=myhome,dc=com".
56457cb5 slapd starting

15:08:48 63 /usr/local/etc/openldap/schema:#ps -ef|grep slapd
root      6932     1  0 Nov02 ?        00:00:00 /usr/local/libexec/slapd
root     25258 19416  0 15:09 pts/0    00:00:00 grep slapd

停止服务
15:14:01 76 /usr/local/etc/openldap:#kill -INT `cat /usr/local/var/run/slapd.pid`
15:14:21 77 /usr/local/etc/openldap:#ps -ef|grep slapd
root     25383 19416  0 15:14 pts/0    00:00:00 grep slapd

启动服务
15:14:27 78 /usr/local/etc/openldap:#/usr/local/libexec/slapd
15:14:52 79 /usr/local/etc/openldap:#ps -ef|grep slapd
root     25385     1  0 15:14 ?        00:00:00 /usr/local/libexec/slapd
root     25388 19416  0 15:14 pts/0    00:00:00 grep slapd

15:23:19 85 /usr/local/etc/openldap:#man slapd.conf
15:23:19 85 /usr/local/etc/openldap:#man slapd.backends

15:33:29 91 /usr/local/etc/openldap:#man slapd-bdb
15:40:51 92 /usr/local/etc/openldap:#man slapd-mdb

10:32:01 11 ~/packages/openldap-2.4.42:#slappasswd
New password:
Re-enter new password:
{SSHA}J/PnUzwhAju1gn6hqUzktwhZKOHpEzuU

15:50:34 102 /usr/local/etc/openldap:#slappasswd -s wo
{SSHA}FxVQwKTQrn0vwIJ2KUmPwy2aJkk0wl+F

16:08:11 14 ~:#cat b.ldif
dn: dc=fgy1,dc=com
objectclass: dcObject
objectclass: organization
o: woei
dc: fgy1

dn: cn=wo,dc=fgy1,dc=com
objectclass: organizationalRole
cn: wo
下面这个密码是fgy1.com的密码,每个suffix的密码由rootpw指定
16:08:15 15 ~:#ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
16:08:44 16 ~:#ldapadd -x -D "cn=wo,dc=fgy1,dc=com" -W -f b.ldif
Enter LDAP Password:
adding new entry "dc=fgy1,dc=com"

adding new entry "cn=wo,dc=fgy1,dc=com"

vi /usr/local/etc/openldap/slapd.conf
加入下面部分,定义了两个数据库,目录要在启动服务之前先建立,权限一般700,否则不能启动服务

database        bdb
suffix          "dc=fgy,dc=com"
rootdn          "cn=Manager,dc=fgy,dc=com"
rootpw          secret
directory       /usr/local/var/openldap-data
index   objectClass     eq

database bdb
suffix "dc=fgy1,dc=com"
rootdn "cn=wo,dc=fgy1,dc=com"
rootpw {SSHA}FxVQwKTQrn0vwIJ2KUmPwy2aJkk0wl+F
directory  /usr/local/var/open
index objectClass eq


添加项(entry)的过程是:不管是slapd.conf,还是slapd-config方式,

slapd.conf方式

先添加这些内容
database        bdb
suffix          "dc=fgy,dc=com"
rootdn          "cn=Manager,dc=fgy,dc=com"
rootpw          secret
directory       /usr/local/var/openldap-data
index           objectClass     eq

再书写一个a.ldif,其实是书写两个entry,就是suffix与rootdn
dn: dc=fgy,dc=com
objectclass: dcObject
objectclass: organization
o: example company
dc: fgy

dn: cn=Manager,dc=fgy,dc=com
objectclass: organizationalRole
cn: Manager

然后再导入,然后再添加其它的entry
ldapadd -x -D "cn=Manager,dc=fgy1,dc=com" -W -f a.ldif


slapd-config方式

先书写一个2.ldif,
再初始化slapadd -F /usr/local/etc/openldap/slapd.d -n 0 -l 2.ldif,再启动服务
如下:
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /usr/local/var/run/slapd.args
olcPidFile: /usr/local/var/run/slapd.pid

dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

include: file:///usr/local/etc/openldap/schema/core.ldif

dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend

dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcSuffix: dc=flt,dc=com
olcRootDN: cn=wo,dc=flt,dc=com
olcRootPW: secret
olcDbDirectory: /usr/local/var/open2
olcDbIndex: objectClass eq

然后再添加entry,olcsuffix与olcrootdn是必添加项,与sldap.conf方式一样,每一项完成之后,要空格。
15:05:46 26 /usr/local/etc/openldap/slapd.d:#ldapadd -x -D "cn=wo,dc=flt,dc=com" -W
Enter LDAP Password:
dn:dc=flt,dc=com
objectclass:dcObject
objectclass:organization
o:fltdz
dc:flt

adding new entry "dc=flt,dc=com"

dn:cn=wo,dc=flt,dc=com
objectclass:organizationalRole
cn:wo

adding new entry "cn=wo,dc=flt,dc=com"

dn:cn=Barbara Jensen,dc=flt,dc=com
objectClass:person
cn:Barbara Jensen
cn:Babs Jensen
sn:Jensen

adding new entry "cn=Barbara Jensen,dc=flt,dc=com"

dn:cn=wxy,ou=members,dc=flt,dc=com
cn:wxy
sn:WXY
objectclass:person

adding new entry "cn=wxy,ou=members,dc=flt,dc=com"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: