使用OpenLDAP部署目录服务

  • 内容
  • 评论
  • 相关

一般企业里服务器很多,如果每个服务器都要创建一堆账户那管理员要sb了,所以都用目录服务器,在上面创建好账户,其他服务器加入就可以使用上面的账户了。当然一般都是用windows域控的,等我研究好了在写个windows的域控的。

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

目录服务实验

OpenLdap是基于LDAP协议的开源程序,它的程序名称叫做slapd,本次实验需要用到两台主机:

主机名称

操作系统

IP地址

LDAP服务端
(ldap.linux.com)

RHEL7操作系统

192.168.38.10

LDAP客户端

RHEL7.4操作系统

192.168.38.20

配置LDAP服务端

安装openldap与相关的软件包

[root@rhel7 ~]# yum install -y openldap openldap-clients openldap-servers migrationtools

生成密钥文件(记下生成出的值,后面要用):

[root@rhel7 ~]# slappasswd -s linux -n > /etc/openldap/passwd

[root@rhel7 ~]# cat /etc/openldap/passwd

{SSHA}EB3hkzmhPDq08cqfy+lojG7ouFw4vvQm

写入一条主机与IP地址的解析记录:

[root@rhel7 ~]# echo “192.168.38.10 ldap.linux.com” >> /etc/hosts

因为LDAP目录服务是以明文的方式在网络中传输数据的(包括密码),这样真的很不安全,所以我们采用TLS加密机制来解决这个问题,使用openssl工具生成X509格式的证书文件(有效期为365天):

[root@rhel7 ~]# openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365

Generating a 2048 bit RSA private key

…….+++

……………..+++

writing new private key to ‘/etc/openldap/certs/priv.pem’

—–

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [XX]:回车

State or Province Name (full name) []:回车

Locality Name (eg, city) [Default City]: 回车

Organization Name (eg, company) [Default Company Ltd]: 回车

Organizational Unit Name (eg, section) []:回车

Common Name (eg, your name or your server’s hostname) []:ldap.linux.com

Email Address []:回车

修改证书的所属与权限:

[root@rhel7 ~]# cd /etc/openldap/certs/

[root@rhel7 certs]# chown ldap:ldap *

[root@rhel7 certs]# chmod 600 priv.pem

[root@rhel7 certs]# ls -al

复制一份LDAP的配置模板:

[root@rhel7 certs]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

生成数据库文件(不用担心报错信息):

[root@rhel7 certs]# slaptest

修改LDAP数据库的所属主与组:

[root@rhel7 certs]# chown ldap:ldap /var/lib/ldap/*

启动slapd服务程序并设置为开机启动:

[root@rhel7 certs]# systemctl restart slapd

[root@rhel7 certs]# systemctl enable slapd

在LDAP目录服务中使用LDIF(LDAP Interchange Format)格式来保存信息,而LDIF是一种标准的文本文件且可以随意的导入导出,所以我们需要有一种”格式“标准化LDIF文件的写法,这中格式叫做”schema“,schema用于指定一个目录中所包含对象的类型,以及每一个类型中的可选属性,我们可以将schema理解为面向对象程序设计中的”类”,通过”类”定义出具体的对象,因此其实LDIF数据条目则都是通过schema数据模型创建出来的具体对象:

ldapadd命令用于将LDIF文件导入到目录服务数据库中,格式为:”ldapadd [参数] LDIF文件”。

参数

作用

-x

进行简单认证。

-D

用于绑定服务器的dn。

-h:

目录服务的地址。

-w:

绑定dn的密码。

-f:

使用LDIF文件进行条目添加的文件。

添加cosine和nis模块:

[root@rhel7 certs]# cd /etc/openldap/schema/

[root@rhel7 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -D “cn=config” -f cosine.ldif

[root@rhel7 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -D “cn=config” -f nis.ldif

创建/etc/openldap/changes.ldif文件,并将下面的信息复制进去(注意有一处要修改的地方):

[root@rhel7 schema]# vim /etc/openldap/changes.ldif

dn: olcDatabase={2}hdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=linux,dc=com

 

dn: olcDatabase={2}hdb,cn=config

changetype: modify

replace: olcRootDN

olcRootDN: cn=Manager,dc=linux,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=linux,dc=com” read by * none


将新的配置文件更新到slapd服务程序:

[root@rhel7 schema]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif

创建/etc/openldap/base.ldif文件,并将下面的信息复制进去:

[root@rhel7 schema]# vim /etc/openldap/base.ldif

dn: dc=linux,dc=com

dc: linux

objectClass: top

objectClass: domain

 

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

ou: People

objectClass: top

objectClass: organizationalUnit

 

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

ou: Group

objectClass: top

objectClass: organizationalUnit

创建目录的结构服务:

[root@rhel7 schema]# ldapadd -x -w linux -D cn=Manager,dc=linux,dc=com -f /etc/openldap/base.ldif


创建测试用的用户:

[root@rhel7 schema]# useradd -d /home/ldap ldapuser

设置帐户的迁移(修改第71与74行):

[root@rhel7 schema]# vim /usr/share/migrationtools/migrate_common.ph

70 # Default DNS domain

71 $DEFAULT_MAIL_DOMAIN = “linux.com”;

72

73 # Default base

74 $DEFAULT_BASE = “dc=linux,dc=com”;


将当前系统中的用户迁移至目录服务:

[root@rhel7 schema]# cd /usr/share/migrationtools/

[root@rhel7 migrationtools]# grep :10[0-9][0-9] /etc/passwd > passwd

[root@rhel7 migrationtools]# ./migrate_passwd.pl passwd users.ldif

[root@rhel7 migrationtools]# ldapadd -x -w linux -D cn=Manager,dc=linux,dc=com -f users.ldif


将当前系统中的用户组迁移至目录服务:

[root@rhel7 migrationtools]# grep “:10[0-9][0-9]” /etc/group > group

[root@rhel7 migrationtools]# ./migrate_group.pl group groups.ldif

[root@rhel7 migrationtools]# ldapadd -x -w linux -D cn=Manager,dc=linux,dc=com -f groups.ldif


测试linux用户的配置文件:

[root@rhel7 migrationtools]# ldapsearch -x cn=ldapuser -b dc=linux,dc=com


安装httpd服务程序:

[root@rhel7 migrationtools]# yum -y install httpd


将密钥文件上传至网站目录:

[root@rhel7 migrationtools]# cp /etc/openldap/certs/cert.pem /var/www/html

将httpd服务程序重启,并添加到开机启动项:

[root@rhel7 migrationtools]# systemctl restart httpd

[root@rhel7 migrationtools]# systemctl enable httpd

清空防火墙的规则并保存状态:

[root@rhel7 migrationtools]# iptables -F

[root@rhel7 migrationtools]# service iptables save

[root@rhel7 migrationtools]# systemctl stop firewalld

[root@rhel7 migrationtools]# systemctl disable firewalld

在日志记录服务的配置文件中追加下面语句,并重启日志服务:

[root@rhel7 migrationtools]# vim /etc/rsyslog.conf

local4.* /var/log/ldap.log


[root@rhel7 migrationtools]# systemctl restart rsyslog