Linux新手随手笔记2.8-使用OpenLDAP部署目录服务
了解目录服务
回忆前面所学的章节,我们发现其实目录可以被理解成是一种为查询、浏览或搜索的数据库,但数据库又分为了目录数据库和关系数据库,目录数据库主要用于存储较小的信息(如姓名、电话、主机名等),同时具有很好的读性能,但在写性能方面比较差,所以不适合存放那些需要经常修改的数据。
目录服务则是由目录数据库和一套能够访问和处理数据库信息的协议组成的服务协议,用于集中的管理主机帐号密码,员工名字等数据,大大的提升了管理工作效率。轻量级目录访问协议LDAP(Lightweight Directory Access Protocol)是在目录访问协议X.500的基础上研发的,主要的优势是:
X.500目录协议功能非常臃肿,消耗大量资源,无法做到快速查询且不支持TCP/IP协议网络。
LDAP采用树状结构存储数据(类似于前面学习的DNS服务程序),用于在IP网络层面实现对分布式目录的访问和管理操作,条目是LDAP协议中最基本的元素,可以想象成字典中的单词或者数据库中的记录,通常对LDAP服务程序的添加、删除、更改、搜索都是以条目为基本对象的。
dn:每个条目的唯一标识符,如上图中linuxprobe的dn值是:
cn=linuxprobe,ou=marketing,ou=people,dc=mydomain,dc=org
rdn:一般为dn值中最左侧的部分,如上图中linuxprobe的rdn值是:
cn=linuxprobe
base DN:此为基准DN值,表示顶层的根部,上图中的base DN值是:
dc=mydomain,dc=org
而每个条目可以有多个属性(如姓名、地址、电话等),每个属性中会保存着对象名称与对应值,LDAP已经为运维人员对常见的对象定义了属性,其中有:
属性名称 | 属性别名 | 语法 | 描述 | 值(举例) |
commonName | cn | Directory String | 名字 | sean |
surname | sn | Directory String | 姓氏 | Chow |
organizationalUnitName | ou | Directory String | 单位(部门)名称 | IT_SECTION |
organization | o | Directory String | 组织(公司)名称 | linuxprobe |
telephoneNumber | Telephone Number | 电话号码 | 911 | |
objectClass | 内置属性 | organizationalPerson |
X.500 他有个致命的缺点,就是不支持tcp/ip协议,这就好比说我们买了个手机,但是这个手机不能联网。所以他就被替代掉了,就是我们的openldap 目录服务,什么是目录服务呢,我们可以把他比作一个数据库,他可以保存我们的文件,图片等等。
openldap保存的文件有两个特点
1:短小 (姓名、性别、电话号码等短小的)
2:读取次数多
优势就是我们使用openldap有两个好处。
1.我们只要在一台服务器上设置好账户和密码,马上我们就可以在1000多台机器都可以来登录了。
2.第二个就是我们要修改一下这个账户和密码的话也只需要修改服务器上的就可以了,马上就会做同步。
但是我们会遇到重名的情况,所以我们有一个标识,是这样的,就像上面树状图,我们把最上面比作中国,就是中国北京市海淀区永泰中路XXX,这样描述的话就不会重了,就是一个人了。至于另一支的话比如说你既然后海淀区那么就有朝阳区,或者说比如公司里面分为技术部财务部后勤等等来具体限定信息。
那么这么多东西是不需要我们自己写的,系统已经有模板了,我们使用两个命令就可以了。
第一个叫做idapadd命令,就是导入模板的意思,将我们某个模板的内容导入添加到系统的操作
第二个是ldapmodify,用来修改模板,将刚才添加的模板修改为合适你的。
目录服务实验
OpenLdap是基于LDAP协议的开源程序,它的程序名称叫做slapd,本次实验需要用到两台主机
主机名称 | 操作系统 | IP地址 |
LDAP服务端 (instructor.linuxprobe.com) |
红帽RHEL7操作系统 | 192.168.10.10 |
LDAP客户端 | 红帽RHEL7操作系统 | 192.168.10.20 |
配置LDAP服务端
安装openldap与相关的软件包
openldap-clients就是我们客户端的程序,openldap-servers就是我们服务,最后一个migrationtools是迁移工具,它是由两部分组成,migration是迁移的意思,tools工具的意思。
我们先生成出来一串秘钥文件,-n是输出的意思,将我们加密后的信息发送到passwd文件中,输出重定向。
然后我们编辑一下我们主机的解析信息。
然后我们将我们的域名解析到我们服务端地址上面。
然后再修改一下当前我们主机名称,hostname
我们保证这个域名能改有ping通,待会是要去做秘钥文件的。
然后我们生成秘钥文件,因为我们openldap是需要一个验证的,我们生成公钥和私钥。我们对用的命令叫做openssl。req就是我们注册一个新的秘钥文件的意思。-new新的文件。-x509就是我们的加密协议为x509,-nodes把它变为一个节点,他是节点服务器的意思。-out就是输出我们秘钥文件的一个路径他在/etc/openldap/certs/cert.pem,这个路径我们记住,待会我们要使用到。-keyout就是我们生成一个私钥文件,路径是/etc/openldap/certs/priv.pem。-days 365是我们公钥和私钥的有效期是365天。
然后我们执行可以看到,第一个是让我们输入国家名称,我们不用写,直接回车。第二个是国家省份,也回车,第三个是城市的名称,也回车。第四个是我们公司的名称,也回车。第五个是公司部门的名称,没必要,也回车。第六个是我们主机的名称,这个不能回车,把我们刚才改的主机名称写上。最后一个输入邮箱的地址,这个没有必要,回车。
这样的话我们进入/etc/openldap/certs目录里面就会看到两个文件,公钥和私钥。
然后我们把这两个文件的所有者和所有组都修改成ldap,权限都修改成600.
我们为了不要让别人看到,被这样做和配置openldap没关系,就是为了安全。*代表这个目录下所有文件。
接下来我们复制一个文件,这个文件是在/usr/share/openldap-servers,这个目录一般保存的是我们的帮助文档。这个文件名称叫做DB_CONFIG.example,我们给他复制一下,复制到/var/lib/ldap,然后名字叫做DB_CONFIG。
我们做好之后就可以进入到我们/var/lib/ldap了,里面有我们刚才复制的DB_CONFIG,这个文件就是我们openldap默认配置文件,如果没有配置文件,这个数据库肯定起不来,那么我们复制过来一个模板先来启动一下,那么我们复制过来的配置文件肯定和我们工作需要的不一样,那么我们要进行修改。然后我们用slaptest命令生成一下数据库的测试文件,然后我们看到报错了,说启动或生成失败什么的。这个没有关系,我们继续
然后我们看到这个目录里面会多出来3个文件,我们把他的所有者和所属组也给他修改成ldap
重启服务并且加入开机启动项,那么都设置好之后我们数据库现在是一个空白的。我们先给他有这么一个树状对的结构。
然后我们先进入这个目录/etc/openldap/schema/,这个目录就是保存我们模板文件的。我们做的就是需要导入,我们导入两个文件,刚才上面提到的两个命令,ldapadd导入命令和ldapmodify修改命令。
导入两个文件,第一个是cosine.ldif,第二个是nis.ldif
我们可以看一下这些文件的后缀,ldif结尾的。
然后我们修改文件。这个文件是不存在的,我们自己创建。
就是整段代码,这里复制一下。
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=linuxprobe,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=linuxprobe,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: 此处输入之前生成的密码(如{SSHA}v/GJvGG8SbIuCxhfTDVhkmWEuz2afNIR) dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/cert.pem dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/priv.pem dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: -1 dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=linuxprobe,dc=com" read by * none
接下来我们进行修改。
给他修改到我们的系统里面。
dn: dc=linuxprobe,dc=com dc: linuxprobe objectClass: top objectClass: domain dn: ou=People,dc=linuxprobe,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=linuxprobe,dc=com ou: Group objectClass: top objectClass: organizationalUnit
我们新建出来两个用户,一个叫people,一个叫group
创建目录的结构服务
然后我们新建一个用户,我们现在有了就不用了。
然后我们进入这个目录下编辑一个文件,这个文件叫做migrate_common.ph,这个是一个通用的配置文件,现在我们想迁移的话有一些标准的格式,避免重复性的填写。
这个文件里面是保存账户的信息的,我们复制一下linuxprobe的用户信息。
然后我们给他复制到一个新建的passwd文件中。
然后我们还要有一个用户组,在/etc/group中复制linuxprobe组的信息
我们给他复制到创建的group文件。
现在的话我们就有两个文件了,第一个就是我们用户的信息,第二个是我们用户组的信息。
然后我们看一下这个目录下的文件,迁移工具,
下面我们执行他,就是迁移用户和用户组的信息。
那么我们进行迁移转换之后到底有什么用呢。
首先他多出来两个文件,然后
我们对比一下之前和转换之后的,那就是从看得懂变成了看不懂了。
然后我们进行导入。
导入之后我们怎么查询我们导入成功没,这样过:
提示这个用户不存在,那么我们看一下linuxprobe.