简述
主要介绍Openldap简要概念、部署过程、基础命令以及同步ldap用户到linux主机。
一、部署环境说明
机器版本:CentOS Linux release 7.6.1810
ldap版本: 2.4.44-25.el7_9
二、Ldap基础概念
目录树概念
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。
DC、UID、OU、CN、SN、DN、RDN概念
关键字 | 英文全称 | 含义 |
---|---|---|
dc | Domain Component | 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置) |
uid | User Id | 用户ID songtao.xu(一条记录的ID) |
ou | Organization Unit | 组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织) |
cn | Common Name | 公共名称,如“Thomas Johansson”(一条记录的名称) |
sn | Surname | 姓,如“许” |
dn | Distinguished Name | “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一) |
rdn | Relative dn | 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson” |
三、OpenLdap搭建步骤
1、安装openladp
yum -y install openldap openldap-servers openldap-clients compat-openldap
查看验证
yum list installed|grep ldap
2、配置数据库(复制数据库模板)
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
chmod 700 -R /var/lib/ldap
3、设置开机启动并启动服务(可选)
systemctl enable slapd
systemctl start slapd
查看服务启动情况
#ldap服务端进程为slapd,端口389,默认情况下数据为明文传输,添加ssl配置后为密文数据传输,端口636
netstat -tunlp |grep slapd
4、生成openldap管理员密码
[root@cm118 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}cWqVfoS+Tzpix6DwRWyyX/z2/VNv8Rrx
说明:这里要手动输入密码,我这里输入123456
5、编写 LDIF(一种LDAP 专用的数据交换格式)文件
[root@cm118 ldapd]# more chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}cWqVfoS+Tzpix6DwRWyyX/z2/VNv8Rrx
通过ldapadd命令将管理员密码导入到 LDAP配置文件中
[root@cm118 ldapd]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
6、向 LDAP 中导入一些基本的 Schema
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
说明:这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性
7、配置 LDAP 的根域(以 dc=test,dc=com 为例)及其管理域
编辑配置文件vim chdomain.ldif
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=admin,dc=test,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=test,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=test,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}x9JDKqBOhYvh9MUWD68jnmBJWxd06WNw
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=test,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=test,dc=com" write by * read
导入到ldap 配置中
[root@cm118 ldapd]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
8、在上述基础上,创建组织以及角色
我们来创建一个叫做 wbigdata company 的组织,并在其下创建一个 admin 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元
编辑配置文件
[root@cm118 ldapd]# more basedomain.ldif
dn: dc=test,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: wbigdata Company
dc: test
dn: cn=admin,dc=test,dc=com
objectClass: organizationalRole
cn: admin
dn: ou=People,dc=test,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=test,dc=com
objectClass: organizationalRole
cn: Group
将其导入到ldap配置中
[root@cm118 ldapd]# ldapadd -x -D cn=admin,dc=test,dc=com -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=test,dc=com"
adding new entry "cn=admin,dc=test,dc=com"
adding new entry "ou=People,dc=test,dc=com"
adding new entry "ou=Group,dc=test,dc=com"
通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:
其中基准 dc=test,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=test,dc=com
和两个组织单元 ou=People,dc=test,dc=com 及 ou=Group,dc=test,dc=com。
至此ldap1服务器端已配置完成。
可以使用下面命令查看所有条目
ldapsearch -x -b "dc=test,dc=com" -H ldap://127.0.0.1
四、Ldap管理工具安装
1、phpldapadming管理工具
1)安装httpd 服务
yum install httpd -y
2) 修改httpd服务配置
vim /etc/httpd/conf/httpd.conf 修改102行
<Directory />
AllowOverride none
Require all denied
</Directory>
AllowOverride none 改为 AllowOverride all
3)启动httpd服务
systemctl start httpd
4)安装配置phpldapadmin
yum install phpldapadmin -y
注:若无此安装包则执行yum -y install epel-release 后再执行上述命令安装
5)配置phpldapadmin
vim /etc/phpldapadmin/config.php
#取消下面配置的注释
$servers->setValue('server','host','127.0.0.1'); #298行
$servers->setValue('login','attr','dn'); #397行
#注释下面的配置
//$servers->setValue('login','attr','uid'); #398行
其他设置说明
其他设置:
# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
$servers->setValue('login','anon_bind',false);
# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
温馨提示:进入命令行模式 可以输出:行号 直接跳转到当前行 set nu显示行号
6)配置http相关访问权限
vim /etc/httpd/conf.d/phpldapadmin.conf
<IfModule mod_authz_core.c>
# Apache 2.4
Require local
</IfModule>
修改部分为
Require local 修改为 Require all granted
7)重启httpd服务
systemctl restart httpd
8)打开页面并登录
http://192.168.242.118/phpldapadmin/
提示:这里需要http协议打开 不是https。点击登录即可进行认证登录,注意用户是全路径
当然还有其他管理工具,比如 ldap-account-management 、Ldap ADMIN等,感兴趣的可以自行了解。
五、Ldap基础命令
1、ldapadd
-x 进行简单认证
-D 用来绑定服务器的DN
-h 目录服务的地址
-w 绑定DN的密码
-f 使用ldif文件进行条目添加的文件
示例
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (这样写就是在命令行添加条目)
2、ldapsearch
-x 进行简单认证 -x:简单认证模式,不使用默认的SASL认证方法。
-D 用来绑定服务器的DN
-w 绑定DN的密码
-b 指定要查询的根节点 -b:指定查找的basedn
-H 制定要查询的服务器
-LLL:禁止输出与查找范围不匹配的信息。
-s:指定本次要搜索的属性对应的值。
ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com"
使用简单认证,用 "cn=root,dc=starxing,dc=com" 进行绑定,
要查询的根是 "dc=starxing,dc=com"。这样会把绑定的用户能访问"dc=starxing,dc=com"下的
所有数据显示出来。
ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn
ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636
3、ldapdelete
ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com"
ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com'
这样就可以删除'uid=zyx,dc=it,dc=com'记录了,应该注意一点,如果o或ou中有成员是不能删除的。
4、ldappasswd
-x 进行简单认证
-D 用来绑定服务器的DN
-w 绑定DN的密码
-S 提示的输入密码
-s pass 把密码设置为pass
-a pass 设置old passwd为pass
-A 提示的设置old passwd
-H 是指要绑定的服务器
-I 使用sasl会话方式
#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S
New password:
Re-enter new password:
就可以更改密码了,如果原来记录中没有密码,将会自动生成一个userPassword。
5、ldapmodify
-a 添加新的条目.缺省的是修改存在的条目.
-C 自动追踪引用.
-c 出错后继续执行程序并不中止.缺省情况下出错的立即停止.比如如果你的ldif 文
件内的某个条目在数据库内并不存在,缺省情况下程序立即退出,但如果使用了该参数,程
序忽略该错误继续执行.
-n 用于调试到服务器的通讯.但并不实际执行搜索.服务器关闭时,返回错误;服务器
打开时,常和-v 参数一起测试到服务器是否是一条通路.
-v 运行在详细模块.在标准输出中打出一些比较详细的信息.比如:连接到服务器的
ip 地址和端口号等.
-M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的.
-f file 从文件内读取条目的修改信息而不是从标准输入读取.
-x 使用简单认证.
-D binddn 指定搜索的用户名(一般为一dn 值).
-W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用.
-w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用.
-H ldapuri 指定连接到服务器uri(ip 地址和端口号,常见格式为
ldap://hostname:port).如果使用了-H 就不能使用-h 和-p 参数.
-h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用.
-p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用.
如果使用了-h 和-p 参数就不能使用-H 参数.
-Z[Z] 使用StartTLS 扩展操作.如果使用-ZZ,命令强制使用StartTLS 握手成功.
-V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用
TLS 方式配合使用,并且匿名绑定到目录服务器.
-e 设置客户端证书文件,例: -e cert/client.crt
-E 设置客户端证书私钥文件,例: -E cert/client.key
#ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
将modify.ldif中的记录更新原有的记录。
6、其他命令
slapd -VV #查看ldap版本
六、LDAP实操
1、新增CN(公共名称),可以理解为Linux系统上的用户组
在Group组织单元中,增加名称为tom的公共名称,配置文件如下
[root@cm118 ldapd]# more add_group_tom.ldif
dn: cn=tom,ou=Group,dc=test,dc=com
objectClass: posixGroup
objectClass: top
cn: tom
gidNumber: 1000
执行命令向ldap中添加tom cn条目
[root@cm118 ldapd]# ldapadd -h 192.168.242.118 -w 123456 -x -D "cn=admin,dc=test,dc=com" -f add_group_tom.ldif
adding new entry "cn=tom,ou=Group,dc=test,dc=com"
2、添加用户ID即uid ,理解为linux上的用户
编辑配置文件,功能是增加一个名称为tom 的uid
[root@cm118 ldapd]# more add_user_tom.ldif
dn: uid=tom,ou=Group,dc=test,dc=com
uid: tom
cn: tom
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginshell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/tom
userpassword: tom123456
执行命令向ldap中添加tom uid条目
[root@cm118 ldapd]# ldapadd -h 192.168.242.118 -w 123456 -x -D "cn=admin,dc=test,dc=com" -f add_user_tom.ldif
adding new entry "uid=tom,ou=Group,dc=test,dc=com"
3、查找CN或者UID
查看cnldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=tom))"
查找uidldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=tom))"
查找所有uidldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=*))"
查看所有组idldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=*))"|grep gidNumber |sort -t " " -k2
查看所有uid ldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixAccount)(uid=*))" |grep uidNumber|sort -t " " -k2
限制返回两条displayName值 相当于限制了查询 -z 2 displayNameldapsearch -x -LLL -h localhost -b "dc=test,dc=com" -D "cn=admin,dc=test,dc=com" -w 123456 "(&(objectClass=posixGroup)(cn=*))" -z 2 displayName
4、删除uid和cn
删除uidldapdelete -h localhost -x -D 'cn=admin,dc=test,dc=com' -w 123456 'uid=tom,ou=People,dc=test,dc=com'
删除cnldapdelete -h localhost -x -D 'cn=admin,dc=test,dc=com' -w 123456 'cn=tom,ou=People,dc=test,dc=com'
5、修改LDAP用户密码
示例中修改的新密码是testww45678
ldappasswd -x -h localhost -D 'cn=admin,dc=test,dc=com' -w 123456 'uid=tom,ou=Group,dc=test,dc=com' -s testww45678
注:密码不可以查看只能校验。因此忘记密码只能重置。
七、配置Ldap用户同步至Linux
实现目的:当在ldap中创建一个用户,可以在linux 中通过id 用户查看,但是linux /etc/passwd无此用户。
此操作是基于Ldap搭建完成情况下进行。
1、安装sssd相关服务
yum -y install openldap-clients sssd sssd-client sssd-ldap sssd-tools authconfig nss-pam-ldapd oddjob-mkhomedir
说明:此时sssd服务是启动不成功的,因为还没有/etc/sssd/sssd.conf配置文件
2、通过authconfig对sssd进行配置
authconfig --enableldap --enableldapauth --ldapserver="192.168.242.118" --ldapbasedn="dc=test,dc=com" --update
此时会生成/etc/sssd/sssd.conf 配置文件,启动sssd服务。
systemctl start sssd
扩展
authconfig是Linux系统上一个对各种认证资源进行统一配置的工具,我们将通过它完成一部分的SSSD配置
3、查看上面创建的tom用户
id tom
说明已配置同步完成
此篇文档为后续ranger同步ldap用户做铺垫。
本人旨在分享工作中一些用到的知识技能
如有感兴趣欢迎关注Wbigdata微信公众号,也可私信留下你的联系方式交流大数据相关以及之外的技术。