目录:
(一)了解网络用户的概念
(二)搭建实验环境
(三)使用LDAP客户端
(四)配置freeIPA
(五)补充:搭建openLDAP服务器
(一)了解网络用户的概念
(1.1)假设公司内部有200台服务器,我们没有提前做相关的规划,均是统一对外提供web服务,如果现在web服务中有一个tom用户,那么对应/etc/passwd文件中存放的是帐户信息,在/etc/shadow文件中存放的是用户的密码信息,且每一台web服务器中都是此配置。如果此时我们管理用户,需要对tom用户重置密码,那么我们便需要登录每一台服务器进行操作,重复操作200次,对系统管理员来说非常的耗时费力。为了解决这种灾难性的问题,我们便需要使用目录服务即网络用户来解决问题,首先我们会有一台为独立的账户服务器,用来管理我们的系统账户信息,接着其他web服务器都作为成员服务器接受账户服务器的统一管理,此时成员服务器上并没有任何的账户信息,账户服务器上假设有tom、bob等用户,此时外部客户端使用tom用户尝试在A服务器上登录web服务的时候,A服务器将接收到的用户名和密码信息发送到账户服务器进行验证,如果验证通过则允许外部的客户端登录A服务器上的web服务,如果验证失败,则不允许外部的客户端登录A服务器上的web服务。这样我们就只需要在账户服务器上创建一套账户信息即可,而不需要在成员服务器上重复性的创建登录用户了。其中我们使用账户服务器管理成员服务器所使用的协议称为LDAP协议,而我们管理账户的服务器称之为目录服务器。同时为了安全起见,我们通常都会搭建一个kerberos服务器管理密码,这样便可以实现目录服务器用来管理系统的账户信息,而kerberos服务器则对安全性要求更高的密码进行独立管理。
(1.2)我们发现其实目录可以被理解成一种为查询、浏览或搜索的数据库,但数据库又分为目录数据库和关系型数据库。目录数据库主要是用于存储较轻量的信息,如姓名、电话、主机名等,同时具有很好的可读性能,但在写性能方面比较差,所以不适合存放那些需要经常修改的数据。
(1.3)目录服务是由目录数据库和一套能够访问和处理数据库信息的协议组成的服务协议,用于集中的管理主机账号密码,员工名字等数据,大大的提升了管理工作效率。轻量级目录访问协议LDAP(Lightweight Directory Access Protocol)是在目录访问的协议X.500的基础上研发的,主要的优势是:X.500目录协议功能非常臃肿,消耗大量资源,无法做到快速查询且不支持TCP/IP协议网络。LDAP采用树状结构存储数据,用于在IP网络层面实现对分布式目录的访问和管理操作,条目是LDAP协议中最基本的元素,可以想象成字典中的单词或者数据库的记录,通常对LDAP服务程序的添加、删除、更改、搜索都是以条目为基本对象的。
dn:每个条目的唯一标识符,如上图中rhce的dn值是:cn=rhce,ou=marketing,ou=people,dc=org
rdn:一般为dn值最最侧的部分,如上图中rhce的rdn值是:cn=rhce
base DN:此为基准DN值,表示顶层的根部,上图中的base DN值是:dc=mydomain,dc=org
(1.4)我们想实现网络用户的统一管理,可以使用openldap软件来实现,也可以使用Windows系统中的AD活动目录来实现,还可以使用freeIPA也可以实现,或者使用redhat的rhds目录服务也可以实现,此处我们使用开源的产品openLDAP和freeIPA来实现。
(二)搭建实验环境
(2.1)我们在vms001主机上进入到/root/images/rhcsa目录中,然后我们会发现有一个install.sh脚本以及host.img、station.img两个虚拟机的镜像,接着我们执行install.sh脚本文件创建两台虚拟机(图2-1),其中创建的host虚拟机作为服务器端使用,而创建的station虚拟机是作为客户端使用的,我们可以先进入救援模式更改两台虚拟机的root用户密码(去除rhgb quiet并添加init=/bin/sh)。
# mout -o remount,rw /
# echo redhat | passwd --stdin root
# touch /.autorelabel
# exec /sbin/init
(2.2)经验总结,命令行设置IP地址、命令设置IP、字符设置IP,然后分别设置host虚拟机的IP地址是192.168.122.10同时设置station虚拟机的IP地址是192.168.122.100,同时设置好station虚拟机的dns指向host主机,并给station虚拟机设置主机名为station.rhce.cc
# nmcli connection---查看网卡的设置情况
# nmcli connection add type ethernet con-name eth0 ifname eth0---设置一台网卡连接名为eth0同时设置硬件名为eth0
# nmcli connection modify eth0 ipv4.addresses 192.168.122.100/24 ipv4.dns 192.168.122.10---修改eth0网卡的IP地址为192.168.122.100,设置dns的地址为192.168.122.10
# nmcli connection modify eth0 ipv4.method manual---修改eth0网卡为手动设置
# hostnamectl set-hostname station.rhce.cc---设置主机名
# systemctl restart network---重启网络服务
(2.3)我们使用vms001主机ssh远程连接到host虚拟机和station虚拟机上,由于host虚拟机作为LDAP的服务器端,且已经配置好了,所以不需要做任何的设置,而station作为客户端,我们发现此时并没有查询到ldapuser1、ldapuser2等网络用户(图2-4),此时我们需要将station虚拟机加入到域中,首先我们给vms001主机添加一个光驱(图2-5),然后将光驱关联rhel7.0的镜像(图2-6),然后我们查询到光驱的UUID信息,并填写到/etc/fstab文件中,同时由于vms001主机已经配置了ftp服务,所以我们在/var/ftp目录下创建一个rhel7-0的目录(图2-7),并在/etc/fstab文件中填写对应的挂载信息,最后将vms001主机的vsftpd服务重启一下,确保当前系统的FTP是正常提供服务的(图2-9)。
# cat /etc/redhat-release---查询当前系统的版本
# blkid---查询设备的UUID信息
# vim /etc/fstab
# mount -a
# systemctl restart vsftpd.service
(2.4)接着我们在station虚拟机上配置YUM源,由于host和station虚拟机都是运行在vms001主机上的,同时vms001是在192.168.26.0网段的,而两台KVM虚拟机都是在192.168.122.0网段,其中KVM虚拟机主要是通过192.168.122.1地址和外部vms001主机进行通信。我们在station虚拟机中创建一个aa.repo的YUM源,填写如下的信息(图2-10),然后我们在LDAP客户端station虚拟机上安装“authconfig-gtk”软件包,用来运行图形化界面(图2-11)。然后我们需要使用vms001主机重新ssh远程连接station虚拟机,并且需要加上“-X”的选项,此时便可以打开了openLDAP客户端的图形化界面了(图2-13)。
# yum install authconfig-gtk.x86_64 -y
# ssh [email protected] -X---使用图形化界面,注意使用大写的“X”
(三)使用LDAP客户端
(3.1)打开LDAP客户端后,我们在“身份&验证”-->“用户账户数据库”部分选择“LDAP”,在“认证配置”部分选择LDAP密码(图2-14),同时还要安装nss-pam-ldapd软件包(图2-15),然后重新打开LDAP客户端即可。此时我们在“LDAP搜索基础DN”处填写“dc=rhce,dc=cc”,而“LDAP服务器”处则填写“host.rhce.cc”,我们在vms001主机的host虚拟机上的/var/www/html/pub目录下找到example-ca.crt证书文件填写到“证书URL”处(图2-17)。此时我们在station虚拟机上便可以查看到host虚拟机服务器上创建的ldapuser1、ldapuser2、ldapuser3网络用户了。
# authconfig-gtk &---打开LDAP客户端
# yum install nss-pam-ldapd -y
(3.2)接着我们尝试从station虚拟机客户端上的本地用户切换到LDAP网络用户上,发现切换并不成功。这是由于网络用户ldapuser1在station虚拟机本地并没有家目录,我们可以使用getent命令获取网络用户的账户信息,类似于本地用户存放在/etc/passwd文件中的信息,同时将/etc/skel框架中的家目录信息复制到ldapuser1用户的家目录中,并修改网络用户ldapuser1在本地的家目录的属主和属组信息均为ldapuser1,此时我们便可以从station虚拟机上正常的登录网络用户ldapuser1了。
注意:此处我们通过在本地创建网络用户的家目录实现了用户的正常切换,当然我们后续还有通过autofs自动挂载以及漫游用户的方式也可以实现用户的切换
# getent passwd ldapuser1---查看网路用户的账户信息
# mkdir -p /home/guests/ldapuser1
# cp -rf /etc/skel/.[!.]* /home/guests/ldapuser1/
# chown -R ldapuser1.ldapuser1 /home/guests/ldapuser1/---修改属主和属组的信息
(四)配置freeIPA
(4.1)接着我们使用freeIPA的配置方式来实现目录服务的需求,我们使用vms001主机作为LDAP服务器,使用vms002主机作为LDAP的客户端,当我们在vms001主机上创建一个tom001用户的时候,vms002主机加入到域后便可以学习到tom001网络用户的信息。我们首先需要在/etc/hosts文件中添加相应的IP地址、长主机名、短主机名信息,然后还需要安装“bind.x86_64”、“bind-dyndb-ldap.x86_64”、“bind-libs.i686”、“ipa-server”4个软件包(图4-3)。
# yum info ipa-server---查看ipa-server的相关介绍信息
# yum list bind*
# yum install bind.x86_64 bind-dyndb-ldap.x86_64 bind-libs.i686 ipa-server -y---需要安装这4个软件包
(4.2)然后我们在vms001主机上查询ipa-server的相关命令,我们使用setup-dns命令设置ipa-server的DNS相关配置。
# ipa-server-install --help | grep dns---查询ipa-server中关于dns的帮助信息
# ipa-server-install --setup-dns---设置DNS相关配置
(4.3)故障排错,经验总结,无法开机,救援模式:我们在重启系统后发现系统无法正常开机,出现了如下报错信息:“[sda] Assuming drive cache: write through”“Host SMBus controller not enabled”“intel_rapl:no valid rapl domains found in package 0”其中我们对于第一条报错,应该查看系统日志journalctl查找具体的原因(图4-11),然后我们在键盘上操作“Shift+G”跳转到最后一行,向上查找问题的原因,在日志中查看到以下的报错信息,初步判断是由于系统挂载/var/ftp/dvd的时候出现了错误。我们便进入到/etc/fstab文件中将开机挂载到/var/ftp/dvd的一行删除(图4-13),此时发现重新开机便可以正常的进入到系统了。
其中“Host SMBus controller not enabled”对应如下的操作:
# lsmod | grep i2c_piix4
# vi /etc/modprobe.d/blacklist.conf
配置文件写入blacklist i2c_piix4
其中“intel_rapl:no valid rapl domains found in package 0”对应如下的操作:
# vi /etc/modprobe.d/blacklist.conf
配置文件加入blacklist intel_rapl
(4.4)此时由于我们设置了在vms001主机作为DNS服务器,所以我们也需要将vms002主机的DNS地址指向vms001主机,并将vms002主机的网络重启一下。然后我们在vms001主机上设置防火墙允许所有的数据包通过,同时执行重新获取证书操作,需要注意:在kerberos环境里,主机名就是主机名,IP地址就是IP地址,长主机名就是长主机名,短主机名就是短主机名,不可混用。接着我们在本机Windows 7(win7)系统中找到C:\Windows\System32\drivers\etc目录下的hosts文件(图4-17),并填写相关的地址配置信息(图4-18)。
# nmcli connection show eno16777728 | grep ipv4---查询系统的dns设置的相关信息
# nmcli connection modify eno16777728 ipv4.dns 192.168.26.101---设置vms002指向的DNS为vms001
# systemctl restart network---将vms002主机的网络重启一下
# firewall-cmd --get-default-zone
# kinit admin---重新获取证书
(4.5)此时我们在win7主机的浏览器中输入https://192.168.26.101 便会出现如下的提示信息,我们选择“高级”后继续前进,我们输入admin用户和对应的密码信息(图4-20和图4-21),此时我们便登录到了vms001主机的LDAP服务器端管理界面了,我们创建一个tom001的网络用户(图4-22至图4-24),我们创建好用户后,在密码策略中是要求用户首次登录的时候必须要重新修改密码,所以我们在vms001主机上重置tom001的密码(图4-25),
# kinit tom001---重置tom001用户的密码
(4.6)接着我们将vms002主机加入到活动目录的域中,我们在vms002上安装一个ipa-client的软件包,然后执行“ipa-client-install --mkhomedir”命令,并进行相关的配置,此时我们在vms002主机上查询网络用户tom001便可以正常的查询出来了(图4-28)。
# yum install ipa-client.x86_64 -y
# ipa-client-install --mkhomedir---在vms002主机上安装客户端,并且创建家目录
# id tom001---查询tom001网络用户
(五)补充:搭建openLDAP服务器
(5.1)我们使用vms002主机作为openLDAP服务器端,首先安装openLDAP以及相关的软件包。openLDAP是基于LDAP协议的开源软件,它的程序名叫做slapd服务。我们设置vms002主机的主机名为vms002.rhce.cc,并在/etc/hosts文件中进行IP地址和主机名对应的设置。
# yum install openldap openldap-clients openldap-servers migrationtools -y
(5.2)接着我们生成密钥文件,记录下生成的值,同时在/etc/hosts文件中添加一条主机与IP地址的解析记录。需要记住密钥密码的值后面会用到
# slappasswd -s rhce -n > /etc/openldap/passwd
{SSHA}82niJDeI6XUIcN2KdoA5G2Ue15BTOCD3
(5.3)因为LDAP目录服务是以明文的方式在网络中传输数据的(包括密码),这样非常的不安全,所以我们采用TLS加密机制来解决这个问题,使用openssl工具生成x509格式的证书文件,有效期为365天。
# openssl req -new -x509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/priv.pem -days 365
(5.4)接着我们修改证书的所属和权限,进入到/etc/openldap/certs目录中,修改当前目录下所有文件的属主和属组都为ldap,修改priv.pem文件的权限为600
# cd /etc/openldap/certs/
# chown ldap:ldap *
# chmod 600 priv.pem
(5.5)接着我们复制一份LDAP的配置模板文件到/var/lib/ldap目录下,然后再生成数据库文件。
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG---复制一份LDAP的配置模板
# slaptest---生成数据库文件
(5.6)接着修改LDAP数据库的属主与属组信息,并重启LDAP服务,设置开机自动启动LDAP服务。
# chown ldap.ldap /var/lib/ldap/*---修改LDAP数据库的属主与属组信息
# systemctl restart slapd---重启LDAP服务
# systemctl enable slapd---设置开机自动启动
(5.7)在LDAP目录服务中使用LDIF(LDAP Interchange Format)格式来保存信息,而LDIF是一种标准的文本文件且可以随意导入导出,所以我们需要有一种格式标准化LDIF的写法,这种格式叫做“schema”,schema用于指定一个目录中包含对象的类型以及每一个类型中的可选属性,我们可以将schema理解为面向对象程序设计中的“类”,通过类定义出具体的对象,因此LDIF数据条目都是通过schema数据模型创建出来的具体对象。
# ldapadd --help
(5.8)接着我们添加cosine和nis模块,创建/etc/openldap/changes.ldif文件,并将之前生成的密钥密码信息填写进去(图5-10和图5-11),并将新的配置文件模块也添加到LDAP服务中(图5-12)。
# cd /etc/openldap/schema/
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif---添加cosine模块
# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif---添加nis模块
# vim /etc/openldap/changes.ldif
# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif
(5.9)接着创建一个/etc/openldap/base.idif文件,并填写如下的信息,同时将base.ldif配置文件的模块添加到LDAP服务中,创建目录的结构服务。并创建一个测试用户ldapuser1
# vim /etc/openldap/base.ldif
# ldapadd -x -w rhce -D cn=Manager,dc=rhce,dc=cc -f /etc/openldap/base.ldif---创建目录的结构服务
# useradd -d /home/ldapuser1 ldapuser1---创建一个测试用户ldapuser1
故障排错,经验总结,网络用户家目录修改:
# userdel -r ldapuser1---由于创建家目录时指定的是ldap错误的,首先删除ldapuser1用户及其家目录
# usermod -md /home/ldapuser1 -u 1001 ldapuser1---修改ldapuser1用户的家目录为/home/ldapuser1,指明ldapuser1的UID为1001
# getent passwd ldapuser1---查询网络用户的家目录信息
(5.10)接着设置账户的迁移,设置“$DEFAULT_MAIL_DOMAIN”和“$DEFAULT_BASE”参数。
# vim /usr/share/migrationtools/migrate_common.ph
(5.11)接着将当前系统中的用户迁移至目录服务。
# cd /usr/share/migrationtools/
# grep ':10[0-9][0-9]' /etc/passwd > passwd---提取UID大于1000的普通用户
# ./migrate_passwd.pl passwd users.ldif---创建users.ldif模块
# ldapadd -x -w rhce -D cn=Manager,dc=rhce,dc=cc -f users.ldif
(5.12)将当前系统中的用户组也迁移至目录服务。
# grep ':10[0-9][0-9]' /etc/group > group---将用户组中ID大于1000的组写入到group文件中
# ./migrate_group.pl group groups.ldif---创建groups.ldif模块
# ldapadd -x -w rhce -D cn=Manager,dc=rhce,dc=cc -f groups.ldif
(5.13)测试ldapuser1网路用户的配置信息是否正确,主要查看loginShell、homeDirectory等参数。
# ldapsearch -x cn=ldapuser1 -b dc=rhce,dc=cc---测试ldapuser1网路用户的配置信息是否正确
(5.14)接着安装httpd服务程序,并将密钥文件上传至网站目录,启动http服务,并设置防火墙默认允许所有的软件包通过。
# yum install httpd -y
# cp /etc/openldap/certs/cert.pem /var/www/html/---将密钥文件上传至网站目录
# systemctl start httpd
# systemctl enable httpd
# firewall-cmd --set-default-zone=trusted
(5.15)还要在日志服务的配置文件中追加下面的信息,并重启日志服务器。
# vim /etc/rsyslog.conf---编辑日志服务的配置文件
# systemctl restart rsyslog.service
(5.16)接着我们在vms001主机上安装LDAP的客户端,并安装相关的软件包,便可以打开图形化的配置界面。
# yum install openldap-client nss-pam-ldapd authconfig-gtk.x86_64 pam_krb5 -y
# system-config-authentication---打开图形化界面
# authconfig-gtk &---打开图形化界面
(5.17)然后我们在认证配置的界面做如下的配置,点击应用稍等片刻后,此时我们发现在客户端vms001主机上便可以查看到网络用户ldapuser1了(图5-29)。
—————— 本文至此结束,感谢阅读 ——————