LDAP用于管理和组织网络中的用户身份、权限和资源信息。
LDAP在比赛中主要用于对samba和apache用户进行认证。想要完成上面这一点需要先对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>:指定要返回的属性列表,多个属性可以使用逗号分隔。
例子:
- 搜索指定 DN 下的所有目录项:
ldapsearch -x -D cn=admin,dc=example,dc=com -w password -h 192.168.1.100 -b dc=example,dc=com
- 搜索指定 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
- 搜索指定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"