OpenLDAP的安装与基本使用方法(三)
在上篇文章里,我们查询了dc=my-domain,dc=com
这个数据库。从查询结果来看,这个数据库里还没有任何数据,因此我们需要首先往数据库里添加数据。
在添加数据之前,我们首先要将相关的schema添加进slapd的配置目录当中。在slapd.d
中可以看到OpenLDAP默认提供了很多schema:
$ pwd
/etc/openldap
$ ls schema/
collective.ldif corba.schema cosine.ldif duaconf.schema inetorgperson.ldif java.schema nis.ldif openldap.schema ppolicy.ldif
collective.schema core.ldif cosine.schema dyngroup.ldif inetorgperson.schema misc.ldif nis.schema pmi.ldif ppolicy.schema
corba.ldif core.schema duaconf.ldif dyngroup.schema java.ldif misc.schema openldap.ldif pmi.schema
$
slapd
默认只使用core
这一个schema:
[root@f64 cn=schema]# pwd
/etc/openldap/slapd.d/cn=config/cn=schema
[root@f64 cn=schema]# ls
'cn={0}core.ldif'
可以看一下这个ldif里面的内容:
[root@f64 cn=schema]# head cn\=\{0\}core.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 0acd7455
dn: cn={0}core
objectClass: olcSchemaConfig
cn: {0}core
olcAttributeTypes: {0}( 2.5.4.2 NAME 'knowledgeInformation' DESC 'RFC2256: k
nowledge information' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.
121.1.15{32768} )
olcAttributeTypes: {1}( 2.5.4.4 NAME ( 'sn' 'surname' ) DESC 'RFC2256: last
(family) name(s) for which the entity is known by' SUP name )
[root@f64 cn=schema]#
这篇文章里不展开讲解ldif文件的格式。此时为了创建用户的基本数据类型,我们还需要引入两个schema:
cosine.schema
inetorgperson.schema
这两个schema文件位于openldap的schema
目录:
[root@f64 schema]# pwd
/etc/openldap/schema
[root@f64 schema]# ls cosine.schema
cosine.schema
[root@f64 schema]# ls inetorgperson.schema
inetorgperson.schema
[root@f64 schema]#
上面这两个schema文件里面定义了我们后续要用到的数据类型。但为了导入这两个schema,我们需要把它们转化成ldif格式。openldap在2.4及后续版本中可以使用slaptest
命令将2.3中使用的conf文件转换成所需的新的ldif格式。因此,为了将两个schema转换成配置文件的ldif格式,我们首先需要写一个conf文件。以下是所需的conf文件及其内容:
[root@f64 schema]# pwd
/etc/openldap/schema
[root@f64 schema]# cat import.conf
include core.schema
include cosine.schema
include inetorgperson.schema
[root@f64 schema]#
如上所示,我将conf文件命名为import.conf
,并将其放在了schema所在目录。在这个文件中引入了所需的所有的schema文件。然后使用slaptest
命令完成转换:
[root@f64 schema]# mkdir -p /tmp/import
[root@f64 schema]# slaptest -f import.conf -F /tmp/import/
config file testing succeeded
这样,转换后的配置文件就存到了/tmp/import
目录中。我们可以查看转换后的内容:
[root@f64 schema]# ls /tmp/import
'cn=config' 'cn=config.ldif'
完整内容如下:
[root@f64 schema]# tree /tmp/import/
/tmp/import/
├── cn=config
│ ├── cn=schema
│ │ ├── cn={0}core.ldif
│ │ ├── cn={1}cosine.ldif
│ │ └── cn={2}inetorgperson.ldif
│ ├── cn=schema.ldif
│ ├── olcDatabase={0}config.ldif
│ └── olcDatabase={-1}frontend.ldif
└── cn=config.ldif
2 directories, 7 files
可以看到相关的schema已经被转化成ldif格式。接下来只需把这几个ldif文件拷贝到slapd的目录中:
[root@f64 cn=schema]# pwd
/etc/openldap/slapd.d/cn=config/cn=schema
[root@f64 cn=schema]# cp /tmp/import/cn\=config/cn\=schema/* .
cp: overwrite './cn={0}core.ldif'? y
上面的命令过程当中,我选择覆盖已有的core.ldif
,这个没关系的,因为都是同一个openldap里面带的文件,所以从core.schema
生成的ldif
文件也是一样的。
这里要同时使用core.ldif
,cosine.ldif
和inetorgperson.ldif
,是因为inetorgperson.ldif
同时依赖前两者。而我们主要要用的是最后这个inetorgperson.ldif
,用来创建一些用户信息。可以把这些ldif文件,也就是schema文件,理解为数据规范,约定数据的结构和类型,这一点有点类似于关系型数据库里面的tables。
因为我们在上面一直使用root权限来操作数据,要调整一下上面的ldif文件的owner才能让slapd来正常访问这些文件:
[root@f64 cn=schema]# ls -l
total 32
-rw------- 1 ldap ldap 15546 Dec 28 22:39 'cn={0}core.ldif'
-rw------- 1 root root 11363 Dec 28 22:39 'cn={1}cosine.ldif'
-rw------- 1 root root 2857 Dec 28 22:39 'cn={2}inetorgperson.ldif'
[root@f64 cn=schema]# chown ldap:ldap *
[root@f64 cn=schema]# ls -l
total 32
-rw------- 1 ldap ldap 15546 Dec 28 22:39 'cn={0}core.ldif'
-rw------- 1 ldap ldap 11363 Dec 28 22:39 'cn={1}cosine.ldif'
-rw------- 1 ldap ldap 2857 Dec 28 22:39 'cn={2}inetorgperson.ldif'
添加了所需的ldif文件并调整好权限以后,我们可以重启slapd服务以使其生效:
[root@f64 cn=schema]# service slapd restart
Redirecting to /bin/systemctl restart slapd.service
[root@f64 cn=schema]# ps -ef | grep slapd
ldap 27488 1 0 23:04 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:/// ldapi:///
接下来我们就可以往数据库里面添加用户数据了,这个任务留给下一篇文章去做。