LDAP用于管理和组织网络中的用户身份、权限和资源信息。

LDAP在比赛中主要用于对samba和apache用户进行认证。想要完成上面这一点需要先对LDAP有一个初步的了解

LDAP中的域由目录项组成,每个目录项就相当于一个对象。

目录项的结构如下:

LDAP服务器失败 ldap服务器连接失败_搜索


每个目录项有几个属性我们需要关注:

dn:组织名称。可以理解为ldap域中的绝对路径,标识该目录项在整个域中的位置,每个目录项都必须包含该属性。
 	dn由多个rdn组成,每个rdn以","分割
 	可以看到上面的dn值为 dc=chinaskills,dc=cn。由dc=chinaskills和dc=cn两个rdn组成。组合起来就是chinaskills.cn。也就是该域的域名。
 	该域下的所有目录项的dn值结尾都是dc=chinaskills,dc=cn来标识该目录项属于该chinaskills.cn域。
objectClass:这是表示该目录项的对象类型。一下常见的对象类如下:
 	top:	仅仅表示该目录项是一个顶级对象,没有特定的属性和行为
 	DcObject:	表示该目录项是域组件,通常包含dc属性
 	Organization:	表示该目录项是一个组织,通常表示公司或组织的顶层,用于定义组织的全局属性
 	**OrganizationalUnit**:	表示该目录项是一个组织单位,在公司或组织内部形成层次化结构
 	**groupOfUniqueNames**:		表示具有唯一名称的组。apache认证时检查该对象类创建的用户。
 	**Account**:		表示该目录项为用户
 	**PosixAccount**:			用于表示类似于Unix系统上的用户账户
 	**ShadowAccount**:			用户对象类
 	**sambaSamAccount**:		 该目录项专用于存储samba用户账户信息。
 	**PosixGroup**:	用户组,比赛中samba会识别该用户组的成员。
 	上面加粗的对象类就是比赛需要自己写的对象,需要将这些对象的属性记下来。
属性: 属性就是每个对象类的特征和属性,不同的对象就有不同的属性,上图的dc和o就是对象top和Organization的属性。当前比赛需要记住的对象属性如下:
 OrganizationalUnit:	
 		ou属性:		组织单位的名称,该目录项的RDN
 groupOfUniqueNames:	
 		Cn属性:		表示该组的通用名称,在目录中唯一
 		Uniquemember 属性:	唯一成员,可以包含其他目录项的DN
 		Owner 属性:	表示组的拥有者,通常是一个或多个用户或组织单位的DN
 Account:		
 		Uid:		用户唯一标识,通常为用户的登录名或用户名
 		userPassword:	用户密码
 		cn:		用户通用名称
 PosixAccount:	
 		uid: 		用户名或账户名,用于唯一标识一个用户账户 
 		uidNumber: 用户的唯一数字标识符,用于在Unix系统中表示用户的UID 
 		gidNumber: 用户所属的组的唯一数字标识符,用于在Unix系统中表示组的GID 
 		homeDirectory: 	用户的主目录路径,用于指定用户的家目录位置 
 		loginShell: 		用户的登录Shell,用于指定用户登录后使用的Shell程序
 		userPassword: 	用户的密码哈希值或加密密码,用于存储用户的密码信息
 
 下面两个samba的不需要记,samba虽然不能直接认证account用户对象,但是可以通过posixgroup对account用户对象进行认证。完成功能就行了,ldap的截图一般只检查用户名。
 ShadowAccount:
 		uid: 			用户名或账户名,用于唯一标识一个用户账户 
 		userPassword: 	用户的密码哈希值或加密密码,用于存储用户的密码信息 
 		shadowLastChange: 	上次更改密码的日期,通常以天数表示自1970年1月1日以来的天数
 sambaSamAccount: 
 		sambaUserAccount: 		Samba用户账户名称,一般与uid或cn属性相同。  
 		sambaSID: 			用于存储Samba用户账户的安全标识符(SID)。 
 		sambaNTPassword: 	用于存储Samba用户账户的NT密码,用于进行NTLM身份验证

liunx中几个常见的服务使用ldap时认证的目录项:

Samba:	用户:	sambaSamAccount
 			用户组:	posixGroup
 Apache:	用户:	person,posixaccount…
 			用户组:	GroupOfUniqueNames,GroupOfNames
 Postfix,dovecot:	用户:	person,posixaccount
 					用户组:GroupOfNames,GroupOfUniqueNames,PosixGroup

LDAP服务器常使用命令:
一. Ldap:

Ldapadd		添加新目录项:
		-x:使用简单身份验证,即明文传输密码。 
-D <binddn>:指定管理员或绑定用户的 DN,用于进行身份验证。 
-w <password>:指定管理员或绑定用户的密码。 
-h <hostname>:指定 LDAP 服务器的主机名或 IP 地址。 
-f <filename>:从指定的文件中读取 LDIF (LDAP Data Interchange Format) 格式的数据。 
-c:连续操作模式,如果出现错误,继续处理下一个目录项。

例子:
1.使用LDIF文件添加目录项:

ldapadd -x -D cn=admin,dc=example,dc=com -w password -h 192.168.1.100 -f mydata.ldif

这将使用管理员账户 cn=admin,dc=example,dc=com 连接到 LDAP 服务器,使用密码 password,从 mydata.ldif 文件中读取 LDIF 格式的数据,并添加到 LDAP 服务器。

2.使用交互手动输入ldif数据添加目录项:

ldapadd -x -D cn=admin,dc=example,dc=com -w password -h 192.168.1.100

这将使用管理员账户 cn=admin,dc=example,dc=com 连接到 LDAP 服务器,使用密码 password,并进入交互式模式,可以手动输入 LDIF 格式的数据,然后添加到 LDAP 服务器。

二. Ldapsearch:

Ldapsearch		搜索目录项:
			-x:使用简单身份验证,即明文传输密码。 
-D <binddn>:指定管理员或绑定用户的 DN,用于进行身份验证。 
-w <password>:指定管理员或绑定用户的密码。 
-h <hostname>:指定 LDAP 服务器的主机名或 IP 地址。 
-b <basedn>:指定搜索的基础 DN,即搜索的起始点。 
-s <scope>:指定搜索范围,可以是 base(仅搜索基础 DN)、one(搜索一级子目录项)或 sub(搜索所有子目录项)。 
-f <filename>:从指定的文件中读取 LDIF (LDAP Data Interchange Format) 格式的搜索过滤器。 
-l <limit>:限制搜索结果的条数。 
-a <attrlist>:指定要返回的属性列表,多个属性可以使用逗号分隔。

例子:

  1. 搜索指定 DN 下的所有目录项:
ldapsearch -x -D cn=admin,dc=example,dc=com -w password -h 192.168.1.100 -b dc=example,dc=com
  1. 搜索指定 DN 下的目录项,并返回指定属性列表:
ldapsearch -x -D cn=admin,dc=example,dc=com -w password -h 192.168.1.100 -b dc=example,dc=com -a uid,cn,sn
  1. 搜索指定LDAP服务器上所有目录项的数据
ldapsearch -x -h 192.168.100.200

三、ldapdelete

ldapdelete -x -D <管理员DN> -W -r "<目录项的DN>"
	-x:使用简单身份验证。
	-D <管理员DN>:指定管理员(或具有删除权限的用户)的 DN(Distinguished Name)。
	-W:提示输入管理员密码。
	-r "<目录项的DN>":指定要删除的目录项的 DN。

例子:
1.删除 DN 为 "cn=user,ou=people,dc=ldapdelete -x -D

ldapdelete -x -D "cn=admin,dc=example,dc=com" -W -r "cn=user,ou=people,dc=example,dc=com"