Linux就该这么学—Eighteen 使用OpenLDAP部署目录服务

了解目录服务

目录服务是由目录数据库和一套能够访问和处理数据库信息的协议组成的服务协议,用于集中的管理主机帐号密码,员工名字等数据,大大的提升了管理工作效率。轻量级目录访问协议LDAP(Lightweight Directory Access Protocol)是在目录访问协议X.500的基础上研发的,主要的优势是:

X.500目录协议功能非常臃肿,消耗大量资源,无法做到快速查询且不支持TCP/IP协议网络。

LDAP采用树状结构存储数据(类似于DNS服务程序),用于在IP网络层面实现对分布式目录的访问和管理操作,条目是LDAP协议中最基本的元素,可以想象成字典中的单词或者数据库中的记录,通常对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已经为运维人员对常见的对象定义了属性,其中有:

属性名称属性别名语法描述值(举例)
commonNamecnDirectory String名字sean
surnamesnDirectory String姓氏Chow
organizationalUnitNameouDirectory String单位(部门)名称IT_SECTION
organizationoDirectory String组织(公司)名称linuxprobe
telephoneNumberTelephone Number电话号码911
objectClass内置属性organizationalPerson

目录服务实验

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

主机名称操作系统IP地址
LDAP服务端(instructor.linuxprobe.com)红帽RHEL7操作系统192.168.10.10
LDAP客户端红帽RHEL7操作系统192.168.10.20

1.安装openldap服务端相关的软件包。

openldap:openldap主程序
openldap-clients:openldap客户端程序
openldap-servers:openldap服务端程序
migrationtools:迁移工具(手工编写的配置文件,openldap是读不懂的,需要用迁移工具把自行编写的配置文件转换成openldap能读懂的格式)

yum install -y openldap openldap-clients openldap-servers migrationtools

2.设置LDAP服务器全局连接密码(记住生成的密码字符串,后面有用),写入一条主机与IP地址的解析记录。(此步骤客户端也要做。实际工作中,这本应该要配置DNS服务去解析,但此实验主要目的是检验配置openldap服务端的效果,因此怎么简单怎么来。)

slappasswd -s kamin -n > /etc/openldap/passwd           #生成明文密码kamin的密文密码
cat /etc/openldap/passwd                                #查看生成的文件内容(每重新执行一次命令,生成的值都是不同的)
echo "192.168.10.10 fuckwjm.kamin.com" >> /etc/hosts    #往/etc/hosts文件追加一条主机与IP地址的解析记录

3.使用openssl工具生成X509格式的证书文件(公钥和私钥),并修改生成的证书的所属与权限。因为LDAP目录服务是以明文的方式在网络中传输数据的(包括密码),安全性很低,因此采用TLS加密机制提高安全性。

openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365    #生成X509格式的证书文件,有效期365天。-out公钥,-keyout私钥,-days有效天数
...
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 hostname) []:    #输入服务器主机名,键入fuckwjm.kamin.com(要跟上面/etc/hosts新增的主机名一样),回车
Email Address []:                                          #输入邮件地址回车
cd /etc/openldap/certs/    #进入生成密钥对的所在目录
chown ldap:ldap *          #更改密钥对所在目录的文件的所有者和所属组为ldap(该用户在安装好openldap服务后自动生成)
chmod 600 priv.pem         #降低私钥的文件权限为仅root用户可读写
ls -al                     #查看密钥对所在目录所有文件的权限情况

4.生成LDAP数据库文件并启用slapd服务程序。先复制一份LDAP的数据库配置文件的模板,再生成LDAP数据库文件(可以忽略报错信息),并修改LDAP数据库的所有者和所有组,最后启动slapd服务并加入开机启动项。

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG    #复制一份LDAP的数据库配置文件的模板
slaptest                                                                    #生成LDAP数据库文件(可以忽略报错信息)
chown ldap:ldap /var/lib/ldap/*                                             #修改LDAP数据库的所有者和所有组
systemctl restart slapd                                                     #启动slapd服务并加入开机启动项
systemctl enable slapd

5.在日志记录服务的配置文件中追加设置LDAP日志文件的配置,以保存LDAP日志信息,并重启日志服务。

vim /etc/rsyslog.conf         #编辑日志记录服务的配置文件
...
local4.* /var/log/ldap.log    #追加设置LDAP日志文件的配置
...
systemctl restart rsyslog     #重启日志服务

在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模块,配置基础用户认证结构。

cd /etc/openldap/schema/                                          #该目录有很多ldif结尾的模版文件
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif    #添加cosine模块
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif       #添加nis模块

配置LDAP本地服务器域。

配置LDAP的顶级域(base DN)。创建/etc/openldap/changes.ldif文件,按一定格式输入配置信息,并将其更新到slapd服务程序。

vim /etc/openldap/changes.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=kamin,dc=com(主机名为fuckwjm.kamin.com,则域为kamin.com)

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=kamin,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: 此处输入之前生成的密码({SSHA}3SUlqsjHGbPjFiviFKuGanqZhMSExOs7)

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
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif    #将changes.ldif配置文件更新到slapd服务程序

配置LDAP的组织单位(OU)。创建/etc/openldap/base.ldif文件,按一定格式输入配置信息,并导入该文件,按该文件的配置来创建目录的结构服务。

vim /etc/openldap/base.ldif    #编辑/etc/openldap/base.ldif文件
dn: dc=kamin,dc=com
dc: kamin
objectClass: top
objectClass: domain

dn: ou=People,dc=kamin,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=kamin,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f /etc/openldap/base.ldif    #导入base.ldif文件,根据该文件的配置创建目录的结构服务

创建若干个测试用户,设置用户的迁移,把用于测试的用户以及对应的用户组信息迁移至目录服务。

用户和用户组信息分别存放在/etc/passwd和/etc/group文件中,创建好测试用户后,可以读取这两个文件把测试用户的信息抽出来保存。通过migrationtools迁移工具将其转换为LDAP能读懂的格式,再将转换好的ldif文件导入ldap。

useradd test1    #创建测试用户(创建用户后相关信息会默认生成与用户名同名的用户组,)
useradd test2
vim /usr/share/migrationtools/migrate_common.ph    #配置用户的迁移
...
$DEFAULT_MAIL_DOMAIN = "kamin.com";
...
$DEFAULT_BASE = "dc=kamin,dc=com";
...
cd /usr/share/migrationtools/                                       #进入migrationtools迁移工具的目录
grep ":10[0-9][0-9]" /etc/passwd > passwd                           #抽取出测试用户的信息另存为passwd文件
./migrate_passwd.pl passwd users.ldif                               #通过migrationtools迁移工具将passwd文件转换为LDAP能读懂的ldif格式
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f users.ldif     #把转换好格式的users.ldif文件导入到openldap数据库中
grep ":10[0-9][0-9]" /etc/group > group                             #抽取出测试用户对应用户组的信息另存为group文件         
./migrate_group.pl group groups.ldif                                #通过迁移工具将group文件转换成LDAP能读懂的ldif格式
ldapadd -x -w kamin -D cn=Manager,dc=kamin,dc=com -f groups.ldif    #把转换好格式的groups.ldif文件导入到openldap数据库中    
ldapsearch -x cn=test1 -b dc=kamin,dc=com                           #检索测试用户test1,查看openldap中用户test1的配置信息

安装httpd服务程序,将第3步生成的公钥文件复制到网站目录,供客户端下载。(这一步主要是要让服务端为客户端提供下载公钥文件的途径。)

yum install -y httpd
cp /etc/openldap/certs/cert.pem /var/www/html    #将公钥文件上传至网站目录
systemctl restart httpd    #重启httpd服务并加入开机启动项
systemctl enable httpd 
iptables -F              #清空防火墙规则并保存状态
service iptables save

配置NFS服务,共享openldap用户的家目录。(如果不做这一步,则在客户端切换登录到openldap用户时,会提示没有该用户的家目录。另外,该步骤可以采用很多方式,samba、autofs都可以。)

vim /etc/exports
/home/test1 *(rw,sync,root_squash)    #共享/home/test1目录,*代表任何主机都可以使用本机NFS共享的/home目录
/home/test2 *(rw,sync,root_squash)    #
systemctl restart rpcbind       #先重启rpcbind服务程序并加入启动项,通过RPC把FNS服务器的ip地址和端口号等信息发送给客户端
systemctl enable rpcbind
systemctl restart nfs-server    #再重启nfs服务并加入开机启动项
systemctl enable nfs-server

配置LDAP客户端(192.168.10.20)

1.把服务端的NFS服务共享的openldap用户家目录挂载到客户端上。 虽然可以直接在客户机的/etc/fstab文件中直接追加服务端的nfs共享目录挂载信息,但是假如有100个openldap用户,则要挂载很多个用户家目录(经验证,是不能以/home/*这样的格式去批量挂载的)。考虑这一点,建议在客户端安装并配置autofs自动挂载服务。该服务可以灵活配置参数,而不需要往/etc/fstab文件追加多条挂载信息这么麻烦。

注意:因为服务端中用ldapsearch命令检索并查看测试用户信息时,家目录为/home/*(*泛指测试用户名),所以在客户端的挂载目录也必须是在/home/下(像/home/ldap/,中间又新建了一个ldap目录都不行)!

yum install -y autofs    #安装autofs服务程序
vim /etc/auto.master     #编辑autofs主配置文件
...
/home /etc/ldap.misc     #指定设备挂载位置的上一级目录和对应的子配置文件    
...
vim /etc/ldap.misc      
* -fstype=nfs,rw,vers=3 fuckwjm.kamin.com:/home/&    #主机名也可用ip地址代替,当访问本机/home/*的资源时,自动挂载上服务端NFS共享的/home/&(&代表任意名称的目录)
systemctl restart autofs                             #重启autofs服务并加入开机启动项
systemctl enable autofs
cd /home/test2            #尝试访问本不存在的/home/test2,提示Permission denied(共享目录的权限为700),但说明autofs服务已配置成功。

2.写入LDAP服务端主机名与IP地址的解析记录,并安装openldap客户端相关软件包。各安装包作用:

echo "192.168.10.10 fuckwjm.kamin.com" >> /etc/hosts                     #往/etc/hosts追加LDAP服务端的解析记录
yum install -y openldap-clients nss-pam-ldapd authconfig-gtk pam_krb5    #安装openldap客户端相关软件包

3.运行界面化的系统认证工具,填好相应的LDAP服务信息。

运行系统认证工具的方法:

命令方式进入:执行authconfing-gtk或者system-config-authentication都可以
桌面方式进入:(RHEL7系统桌面)左上角Application -> Sundry -> Authentication

authconfig-gtk    #运行系统认证工具

输入openldap的顶级域和openldap服务器地址,勾选上“Use TLS to encrypte connections”表示采用TLS验证openldap连接。
在这里插入图片描述
点击 Download CA Certificate… ,输入公钥的下载地址(服务端配置了httpd服务):http://fuckwjm.kamin.com/cert.pem
在这里插入图片描述
配置好后,再切换openldap的用户,就能正常登陆使用,且不会因找不到家目录以及无权创建家目录而报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值