红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置
OpenLDAP
服务端与客户端配置
OpenLDAP
是轻型目录访问协议
,利用它可以进行统一的认证服务。如果需求需要配置多个服务器,并且多账号的话,可以考虑用OpenLDAP
进行统一配置,来完成一组计算机之间的认证。
关于LDIF
一个LDIF基本结构一个条目
注:解释的不完整。
dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn
就是数据库中的唯一主键,在LDAP
中唯一标识一个条目ou
就是organizationalUnit
该条目需要有organizationalUnit
而ou
这一行就是设置具体值得objectClass
表示属性,类似于代码中的类的属性
属性
cn:common name,指一个对象的名字。如果指人,需要使用其全名。
o:organizationName,指一个组织的名字。
ou:organizationalUnitName,指一个组织单元的名字。
uid: user id ,唯一的用户id
userPassword:用户密码
uidNumber: 用户ID
gidNumber: 用户组ID
homeDirectory: 用户目录
Object
的类型
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
服务端
安装
[root@rhel2 ~]# yum install openldap openldap-servers migrationtools
生成证书
# 分别生成一个公钥与私钥
openssl req -new -X509 -nodes -out /etc/openldap/certs/cert.pem -keyout /etc/openldap/certs/private.pem -days 365
# 更改两个文件的权限 为ldap
cd /etc/openldap/certs
chown ldap:ldap *.pem
# 查看
ll
total 8
-rw-r--r-- 1 ldap ldap 1273 Nov 14 20:10 cert.pem
-rw-r--r-- 1 ldap ldap 1704 Nov 14 20:10 private.pem
# 将私钥改成只有ldap用户可读写
chmod 600 private.pem
ll
total 8
-rw-r--r-- 1 ldap ldap 1273 Nov 14 20:10 cert.pem
-rw------- 1 ldap ldap 1704 Nov 14 20:10 private.pem
注:生成证书时 Common Name (eg, your name or your server's hostname) []:
这个东西一定要写当前服务器的hostname
,否则证书没法验证
生成默认数据
# 将 示例DB_CONFIG.example复制出来
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/DB_CONFIG
# 到目录下
cd /var/lib/ldap/
# 更改权限
chown ldap:ldap *
# 执行一次 slaptest
修改基本的配置
# 在任意位置增加如下文件,内容如下
# 关于ldif的格式
# 1. 每一个dn都需要有空行
# 2. 每一行末尾都`不能`有空格
# 3. 每一个: 后面都要跟着一个空格
[root@rhel2 openldap]# vim changes.ldif
# 修改 主dn 为 dc=example,dc=com 可以替换成自己的
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
# 修改管理员密码
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}zcesbHdBiGMQbVBCa7W2ZxjWxXGVHeG2
# 指定公钥位置
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFIle: /etc/openldap/certs/cert.pem
# 指定私钥位置
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFIle: /etc/openldap/certs/private.pem
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=example,dc=com" read by * none
# 以上修改的其实就是在修改 /etc/openldap/slapd.d 下的文件,但是文件汇总有提示不让手动更改,通过ldapmodify 更改
# 执行修改
[root@rhel2 openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f changes.ldif
###########################结果#########################
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "cn=config"
modifying entry "cn=config"
modifying entry "olcDatabase={1}monitor,cn=config"
##########################结果#########################
# 测试密码
[root@rhel2 openldap]# ldapwhoami -x -W -D "cn=config"
Enter LDAP Password:
dn:cn=config
导入基础数据
# 增加文件 base.ldif
# 关于ldif的格式
# 1. 每一个dn都需要有空行
# 2. 每一行末尾都`不能`有空格
# 3. 每一个: 后面都要跟着一个空格
[root@rhel2 openldap]# vim base.ldif
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain
dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# 实际上市增加了两个ou People 与 Group 及 用户 与 用户组
# 执行新增
[root@rhel2 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif
#######################结果###########################
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Group,dc=example,dc=com"
########################结果##########################
# 查询数据
[root@rhel2 openldap]# ldapsearch -x ou=Group -b dc=example,dc=com
########################结果##########################
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: ou=Group
# requesting: ALL
#
# Group, example.com
dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
########################结果##########################
关于ldif
的格式
每一个
dn
都需要有空行每一行末尾都
不能
有空格每一个
:
后面都要跟着一个空格
批量创建用户
# 创建一个本地目录存放用户
[root@rhel2 openldap]# mkdir /home/guests
# 使用for 创建20个用户
[root@rhel2 guests]# for i in $(seq 1 20); do useradd -d /home/guests/ldapuser$i ldapuser$i; done
# 利用for设置20个用户的密码
[root@rhel2 guests]# for i in $(seq 1 20); do echo ldapuser$i | passwd --stdin ldapuser$i; done
批量导入用户到LDAP
- 更改
migrationtools
的baseDN
[root@rhel2 openldap] cd /usr/share/migrationtools
[root@rhel2 migrationtools]# vi migrate_common.ph
# 更改下面两行为自己的 base dn
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "example.com";
# Default base
$DEFAULT_BASE = "dc=example,dc=com";
- 导入用户
# 查询所有用户并输出到一个文件
[root@rhel2 migrationtools]# grep ":10[0-9][0-9]" /etc/passwd > > /etc/openldap/passwd
# 如果用户中有部分不想加入的用户直接删除即可
# 将 /etc/openldap/passwd 文件 转成 ldif文件
[root@rhel2 migrationtools]# ./migrate_passwd.pl /etc/openldap/passwd /etc/openldap/passwd.ldif
# 下面是用户ldapuser1 的数据样式
[root@rhel2 migrationtools]# cat /etc/openldap/passwd.ldif
dn: uid=ldapuser1,ou=People,dc=example,dc=com
uid: ldapuser1
cn: ldapuser1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$V1vroanf$NTVsrHIwOTQUpY0Q2CXHM/
shadowLastChange: 18215
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/guests/ldapuser1
- 导入用户组
# 查询所有用户组并输出到一个文件
[root@rhel2 migrationtools]# grep ":10[0-9][0-9]" /etc/group > > /etc/openldap/group
# 如果用户中有部分不想加入的用户直接删除即可
# 将 /etc/openldap/group 文件 转成 ldif文件
[root@rhel2 migrationtools]# ./migrate_group.pl /etc/openldap/group /etc/openldap/group.ldif
# 下面是用户组ldapuser1 的数据样式
[root@rhel2 migrationtools]# cat /etc/openldap/group.ldif
dn: cn=ldapuser1,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser1
userPassword: {crypt}x
gidNumber: 1001
- 查询刚才添加的用户与组
# 会发现用户与用户组都查询出来了
[root@rhel2 migrationtools]# ldapsearch -x cn=ldapuser1 -b dc=example,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: cn=ldapuser1
# requesting: ALL
#
# ldapuser1, People, example.com
dn: uid=ldapuser1,ou=People,dc=example,dc=com
uid: ldapuser1
cn: ldapuser1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJFYxdnJvYW5mJE5UVnNySEl3T1RRVXBZMFEyQ1hITS8=
shadowLastChange: 18215
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/guests/ldapuser1
# ldapuser1, Group, example.com
dn: cn=ldapuser1,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser1
userPassword:: e2NyeXB0fXg=
gidNumber: 1001
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
客户端
安装
[root@rhel1 ~]# yum install openldap-clients nss-pam-ldapd authconfig-gtk
配置ldap
[有问题]
# 图形化配置工具
[root@rhel1 ~]# authconfig-gtk
# 如果使用xshell 时输入上面的命令,需要下载不免费的 Xmanager
# 所以想使用 authconfig-gtk 必须保证客户端安装了图形化界面。
- 将服务端的公钥
cert.pem
复制到 客户端。
scp cert.pem ip:/root/
- 激活图形化配置后按如下进行选择
User Account Database ------- LDAP
LDAP Search Base DN ------- dc=example,dc=com
LDAP Server ------- ldap://ip/
Use TLS to encrypt connnects ------- check
# 此处必须check上否则不让通过
Authentication Method ------- LDAP password
# 点击 Download CA Certificate 输入本地目录
file:///root/cert.pem
- 查看用户
[root@rhel1 ~]# getent passwd ldapuser1
- 问题
此处进行多次尝试还是有问题,一直连接不到LDAP
的Server。最终可以用nslcd
的log中获得如下错误
Nov 18 16:24:30 rhel1.node.com nslcd[35848]: [8b4567] <passwd="ldapuser1"> ldap_start_tls_s() failed (uri=ldap://192.168.245.11/): Connect error: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.
记录下我尝试的方法:
1. 在文件 /etc/openldap/ldap.conf 增加 `TLS_REQCERT never`
2. 在文件 /etc/openldap/ldap.conf 增加 `TLS_REQCERT allow`
3. 在服务的使用公钥、私钥获得自签名证书,复制到客户端使用
4. 在服务端 /etc/sysconfig/slap 文件中 增加`ldaps:///`,监控端口`636`已经在使用了,但是客户端配置ldaps的时候还是不能够正确访问
要是有人尝试成功了麻烦告知一下
不使用SSL进行客户端配置
图形化界面authconfig-gtk
要求必须使用SSL证书,或者使用ldaps
进行连接
authconfig-tui
对此没有要求
[root@rhel1 ~]# authconfig-tui
# 进入一个简易的画面,
# 1. 使用tab 进行切换选择项
# 2. 使用space 进行选择
# 3. 使用F12 直接到下一步
1. 第一个页面左边选中 `Use LDAP`,右边选中 `Use LDAP AUthertication`
2. 第二个页面,不选中 `Use TLS`
Server: `ldap://192.168.245.11/`
Base DN: `dc=example,dc=com`
注: 在这里也尝试了选中 `Use TLS` 还是会报证书那个问题
3. 等待一段时间
4. 验证结果
[root@rhel1 ~]# getent passwd ldapuser1
ldapuser1:x:1001:1001:ldapuser1:/home/guests/ldapuser1:/bin/bash
[root@rhel1 ~]# getent passwd ldapuser20
ldapuser20:x:1020:1020:ldapuser20:/home/guests/ldapuser20:/bin/bash
5. 用户已经同步到改客户端上了。并且认证通过
NFS
共享用户家目录
不配置家目录共享
用户无法正常使用
# 认证通过后我们使用用户会报错
[root@rhel1 ~]# su - ldapuser1
su: warning: cannot change directory to /home/guests/ldapuser1: No such file or directory
mkdir: cannot create directory '/home/guests': Permission denied
-bash-4.2$
# 只能完成登录,但是做不了任何操作
配置服务端的NFS
[root@rhel2 ~]# yum install nfs-utils
[root@rhel2 ~]# systemctl enable nfs-server
[root@rhel2 ~]# systemctl start nfs-server
[root@rhel2 ~]# vim /etc/exports
[root@rhel2 ~]# cat /etc/exports
/home/guests 192.168.245.0/24(rw,sync)
# 配置 共享/home/guests 目录 共享读写到网段 192.168.245.0
[root@rhel2 ~]# exportfs -rv
exporting 192.168.245.0/24:/home/guests
[root@rhel2 ~]# exportfs -v
/home/guests 192.168.245.0/24(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
# 添加防火墙开放
[root@rhel2 ~]# firewall-cmd --add-service=nfs --permanent
[root@rhel2 ~]# firewall-cmd --reload
配置客户端的autofs
[root@rhel1 ~]# yum install autofs nfs-utils
# 添加自定义配置的auto.guests
[root@rhel1 ~]# vim /etc/auto.guests
[root@rhel1 ~]# cat /etc/auto.guests
* -rw,nfs4 rhel2.node.com:/home/guests/&
# 编写主文件
[root@rhel1 ~]# vim /etc/auto.master
/home/guests /etc/auto.guests
# 行末加入
[root@rhel1 ~]# systemctl enable autofs
[root@rhel1 ~]# systemctl start autofs
# 再次切换用户
[root@rhel1 ~]# su - ldapuser1
Last login: Tue Nov 19 10:07:36 CST 2019 on pts/2
[ldapuser1@rhel1 ~]$ pwd
/home/guests/ldapuser1
[ldapuser1@rhel1 ~]$ touch test.txt
[ldapuser1@rhel1 ~]$ ll
total 4
-rw-rw-r--. 1 ldapuser1 ldapuser1 5 Nov 19 10:22 test.txt
查看客户端挂载情况
[ldapuser1@rhel1 ~]$ df -Th
df: ‘/run/user/0/gvfs’: Permission denied
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 18G 3.0G 15G 17% /
devtmpfs devtmpfs 905M 0 905M 0% /dev
tmpfs tmpfs 914M 140K 914M 1% /dev/shm
tmpfs tmpfs 914M 21M 894M 3% /run
tmpfs tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sdb5 ext4 190M 1.6M 175M 1% /third
/dev/sda1 xfs 497M 119M 379M 24% /boot
/dev/sr0 iso9660 3.5G 3.5G 0 100% /mnt
rhel2.node.com:/home/guests/ldapuser1 nfs4 18G 1.3G 17G 8% /home/guests/ldapuser1
[ldapuser1@rhel1 ~]$
红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置的更多相关文章
- Netty学习笔记(二) 实现服务端和客户端
在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...
- seata服务端和客户端配置(使用nacos进行注册发现,使用mysql进行数据持久化),以及过程中可能会出现的问题与解决方案
seata服务端和客户端配置(使用nacos进行注册发现,使用mysql进行数据持久化),以及过程中可能会出现的问题与解决方案 说明: 之所以只用nacos进行了注册与发现,因为seata使用naco ...
- Kafka学习笔记2--Kafka的服务端配置
下载解压 kafka 后,在 kafka/config 下有 3 个配置文件与主题的生产.消费相关. server.properties--服务端配置 producer.properties--生产端 ...
- 《精通并发与Netty》学习笔记(02 - 服务端程序编写)
上节我们介绍了开发netty项目所必需的开发环境及工具的使用,这节我们来写第一个netty项目 开发步骤 第一步:打开https://search.maven.org 找到netty依赖库 第二步:打 ...
- shadow服务端、客户端配置流程
服务端 系统环境 CentOS 7 64位,由于系统自带python,shadowsocks服务端我们选择python版,过程如下 yum install python-setuptools & ...
- react全家桶-服务端与客户端配置
全家桶内装有: react - github react-router - github redux - github react-redux - github react-router-redux ...
- 综合架构之Rsync备份服务,服务端和客户端配置
服务端配置(即备份服务器) ps:客户端配置见下方 配置一个新服务的步骤: 第一步:先将该服务下载 yum install -y rsync 第二步:编写服务配置文件 配置文件:/etc/rsyncd ...
- DHCP服务——服务端 和 客户端 配置
转载注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9520341.html 实验环境 rhel-server-6.4-x86_64-dvd(ED2000 ...
- 红帽学习笔记[RHCE]网络配置与路由转发
目录 网络配置基本的IPV4与IPV6 拓扑图 操作 新加一块网卡 将增加的网卡分别加到两台虚拟机上 在两台虚拟机上配置IPV4与 IPV6 配置域名访问 拓展路由转发 拓扑图 操作 关于网关设置 重 ...
随机推荐
- css中".",",",“~”和“>”符号的意义
css中“~” element1~element2 选择器匹配出现在element1后面的element2.element1和element2这两种元素必须具有相同的父元素,但element2不必紧跟 ...
- 【leetcode】1250. Check If It Is a Good Array
题目如下: Given an array nums of positive integers. Your task is to select some subset of nums, multiply ...
- hdu 2604 Queuing(推推推公式+矩阵快速幂)
Description Queues and Priority Queues are data structures which are known to most computer scientis ...
- Python天天学_01_基础1
Python_day_01 金角大王:http://www.cnblogs.com/alex3714/articles/5465198.html ------Python是一个优雅的大姐姐 学习方式: ...
- Codeforces 622F The Sum of the k-th Powers ( 自然数幂和、拉格朗日插值法 )
题目链接 题意 : 就是让你求个自然数幂和.最高次可达 1e6 .求和上限是 1e9 分析 : 题目给出了最高次 k = 1.2.3 时候的自然数幂和求和公式 可以发现求和公式的最高次都是 k+1 ...
- AngularJS 前端 MVC 的设计与搭建
代码 #未引入MVC框架之前的代码 <!doctype html> <html> <head> <meta charset="UTF-8" ...
- Angular 主从组件
此刻,HeroesComponent 同时显示了英雄列表和所选英雄的详情. 把所有特性都放在同一个组件中,将会使应用“长大”后变得不可维护. 你要把大型组件拆分成小一点的子组件,每个子组件都要集中精力 ...
- Codeforces Round #578 (Div. 2) Solution
Problem A Hotelier 直接模拟即可~~ 复杂度是$O(10 \times n)$ # include<bits/stdc++.h> using namespace std; ...
- 彩色图像--色彩空间 CIELAB、CIELUV
学习DIP第65天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://gi ...
- JavaWeb_ XML文件
百度百科 传送门 W3school 传送门 XML语言(可扩展标记语言):是一种表示数据的格式,按照xml规则编写的文本文件称为xml文件 Learn 一.编写XML文件 二.DTD约束 三.sche ...