ldap使用,ldap使用场景

http://www.itjxue.com  2023-01-20 17:32  来源:未知  点击次数: 

LDAP和AD域的介绍及使用

1 LDAP入门

1.1 定义

LDAP是轻量目录访问协议(LightweightDirectory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本。

1.2 目录结构

LDAP也可以说成是一种数据库,也有client端和server端。server端是用来存放数据,client端用于操作增删改查等操作,通常说的LDAP是指运行这个数据库的服务器。只不过,LDAP数据库结构为树结构,数据存储在叶子节点上。

因此,在LDAP中,位置可以描述如下

因此,苹果redApple的位置为

dn标识一条记录,描述了数据的详细路径。因此,LDAP树形数据库如下

因此,LDAP树形结构在存储大量数据时,查询效率更高,实现迅速查找,可以应用于域验证等。

1.3 命名格式

LDAP协议中采用的命名格式常用的有如下两种:LDAP URL 和X.500。

任何一个支持LDAP 的客户都可以利用LDAP名通过LDAP协议访问活动目录,LDAP名不像普通的Internet URL名字那么直观,但是LDAP名往往隐藏在应用系统的内部,最终用户很少直接使用LDAP 名。LDAP 名使用X.500 命名规 范,也称为属性化命名法,包括活动目录服务所在的服务器以及对象的属性信息。

2 AD入门

2.1 AD定义

AD是Active Directory的缩写,AD是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,只是AD顺便还提供了用户接口,也可以利用ActiveDirectory当做LDAP服务器存放一些自己的东西而已。比如LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。然后微软将LDAP做了一些封装接口,用户可以利用这些接口写程序操作LDAP,使得ActiveDirectory也成了一个LDAP服务器。

2.2 作用

2.2.1 用户服务

管理用户的域账号、用户信息、企业通信录(与电子邮箱系统集成)、用户组管理、用户身份认证、用户授权管理、按需实施组管理策略等。这里不单单指某些线上的应用更多的是指真实的计算机,服务器等。

2.2.2 计算机管理

管理服务器及客户端计算机账户、所有服务器及客户端计算机加入域管理并按需实施组策略。

2.2.3 资源管理

管理打印机、文件共享服务、网络资源等实施组策略。

2.2.4 应用系统的支持

对于电子邮件(Exchange)、在线及时通讯(Lync)、企业信息管理(SharePoint)、微软CRMERP等业务系统提供数据认证(身份认证、数据集成、组织规则等)。这里不单是微软产品的集成,其它的业务系统根据公用接口的方式一样可以嵌入进来。

2.2.5 客户端桌面管理

系统管理员可以集中的配置各种桌面配置策略,如:用户适用域中资源权限限制、界面功能的限制、应用程序执行特征的限制、网络连接限制、安全配置限制等。

2.3 AD域结构常用对象

2.3.1 域(Domain)

域是AD的根,是AD的管理单位。域中包含着大量的域对象,如:组织单位(Organizational Unit),组(Group),用户(User),计算机(Computer),联系人(Contact),打印机,安全策略等。

可简单理解为:公司总部。

2.3.2 组织单位(Organization Unit)

组织单位简称为OU是一个容器对象,可以把域中的对象组织成逻辑组,帮助网络管理员简化管理组。组织单位可以包含下列类型的对象:用户,计算机,工作组,打印机,安全策略,其他组织单位等。可以在组织单位基础上部署组策略,统一管理组织单位中的域对象。

可以简单理解为:分公司。

2.3.3 群组(Group)

群组是一批具有相同管理任务的用户账户,计算机账户或者其他域对象的一个集合。例如公司的开发组,产品组,运维组等等。可以简单理解为分公司的某事业部。

群组类型分为两类:

2.3.4 用户(User)

AD中域用户是最小的管理单位,域用户最容易管理又最难管理,如果赋予域用户的权限过大,将带来安全隐患,如果权限过小域用户无法正常工作。可简单理解成为某个工作人员。

域用户的类型,域中常见用户类型分为:

一个大致的AD如下所示:

总之:Active Directory =LDAP服务器 LDAP应用(Windows域控)。ActiveDirectory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)。

3 使用LDAP操作AD域

特别注意:Java操作查询域用户信息获取到的数据和域管理员在电脑上操作查询的数据可能会存在差异(同一个意思的表示字段,两者可能不同)。

连接ad域有两个地址:ldap://XXXXX.com:389 和 ldap://XXXXX.com:636(SSL)。

端口389用于一般的连接,例如登录,查询等非密码操作,端口636安全性较高,用户密码相关操作,例如修改密码等。

域控可能有多台服务器,之间数据同步不及时,可能会导致已经修改的数据被覆盖掉,这个要么域控缩短同步的时间差,要么同时修改每一台服务器的数据。

3.1 389登录

3.2 636登录验证(需要导入证书)

3.3 查询域用户信息

3.4 重置用户密码

3.5 域账号解锁

总结

nginx ldap模块使用

1. 安装windows openldap服务

2. 通过ldap admin连接

3.? 添加新的OU和uid

nginx配置如下

ldap_server testldap {

#url ldap://192.168.137.1:389/dc=micmiu,dc=com?uid?sub?((objectClass=*));

? ? ? ? url ldap://192.168.137.1:389/dc=micmiu,dc=com?uid?sub?(objectClass=*);

? ? ? ? binddn "uid=Miumiu,ou=Tester,dc=micmiu,dc=com";

? ? ? ? binddn_passwd "111111";

? ? ? ? group_attribute memberuid;

? ? ? ? group_attribute_is_dn on;

? ? ? ? require valid_user;

? ? }?

? ? server {

? ? ? ? listen 8000;

? ? ? ? server_name testldap_server;

? ? ? ? location / {

? ? ? ? ? ? root html;

? ? ? ? ? ? index index.html index.htm;

? ? ? ? ? ? auth_ldap "Forbidden";

? ? ? ? ? ? auth_ldap_servers testldap;

? ? ? ? }?

? ? }

之后再浏览器中输入用户名和密码:

LDAP集成配置需要启用ssl才能修改密码

需要。

使用非加密的ldap时,只能对AD域账号信息查询。如果要对AD域用户信息进行修改和新增操作,必须使用(SSL)加密方式连接AD,需满足如下几个条件:① AD上需要安装证书服务。② 连接AD的主机上使用打开浏览器申请证书。③ 如果连接AD的主机是Linux,需要安装openssl包,制作CA证书

微软官方给出的ldap修改密码方案:密码存储在 Active Directory 用户中的对象的 unicodePwd属性。可以在有限的情况下,写入此属性,但无法读取。该特性只能修改 ;不能将添加的对象的创建日期或通过搜索查询。 若要修改此属性 ,则客户端必须 128 位安全套接字层 (SSL) 连接到服务器 。为此连接成为可能,服务器必须拥有一个 128 位的 RSA 连接的服务器证书,客户端必须信任生成服务器证书的证书颁发机构 (CA) 和客户端和服务器必须能够使用 128 位加密。

配置linux主机使用ldap用户

目的:linux系统默认使用自己的Unix用户,我们有时需要多台主机都使用同一个用户,这样的还用户管理就比较麻烦。比较简单的解决方法是配置这些linux主机都使用同一个ldap的用户,这样只需要在ldap中进行用户更改即可,不再需要所有主机都进行更改了。

配置客户端:

a、安装ldap客户端:

yum install nss-pam-ldapd pam_ldap -y?

b、图形化配置:

LANG=C authconfig-tui

或者用命令修改:

authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap://110.1.236.51 --ldapbasedn='dc=yinkp,dc=com' --update

cat /etc/sysconfig/authconfig |grep yes?

1、增加/etc/openldap/ldap.conf

2、修改 /etc/nsswitch.conf中sss为ldap

3、 修改/etc/pam.d/system-auth,/etc/pam.d/password-auth

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth

sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth

4、修改sssd配置文件:

vi /etc/sssd/sssd.conf

5、修改nslcd配置文件:

vi /etc/nslcd.conf

6、重启nslcd/sssd

service nslcd restart

service sssd restart

验证:

切换为系统中没有,ldap中有的用户。如果OK,则成功。

ldapsearch -x -b 'ou=people,dc=yinkp,dc=com'

批量修改主机使用ldap用户:

分发上面已经配置好的主机上的文件到其它linux主机

注:如果没有分发脚本,也可以一个一个文件scp

deploy.sh /etc/sysconfig/authconfig /etc/sysconfig/ all

deploy.sh /etc/openldap/ldap.conf /etc/openldap/ all

deploy.sh /etc/nsswitch.conf /etc/ all

deploy.sh /etc/pam.d/system-auth /etc/pam.d/ all

deploy.sh /etc/sssd/sssd.conf /etc/sssd/ all

deploy.sh /etc/nslcd.conf /etc/ all

重启nslcd/sssd服务

runRemoteCmd.sh "/bin/systemctl restart ?nslcd.service /bin/systemctl restart ?sssd.service" ldap_client

LDAP使用

这样都不需要去配置很多配置

如果是需要做登录验证的话:

ldap如果密码是不可见的话, Attributes attributes = sr.getAttributes();是拿不到的。

要叫给ldap server来进行验证,我们只能得到一个true或者false;

通过true 或者false来判断

k8s接入ldap

为了对接上 LDAP,可谓是煞费苦心。网上能找到的对接上 LDAP 的方案,都得在 LDAP 上自定义一个 token 的 schema,然后将在 k8s 集群上已创建好的 service account 的 token 跟 LDAP 绑定起来。这样,在进行 webhook 认证时,便能带着 token 去 LDAP 上进行认证。例如这里所描述的: Kubernetes-LDAP-Authentication 。另外,还有些是对接上 OpenID connect token,然后再这些服务提供系统那里对接上 LDAP,例如: Step by step guide to integrate LDAP with Kubernetes 。这种办法又觉得太复杂,麻烦了。

使用 webhook 进行 LDAP 认证,平常的用户名密码认证行不通的主要原因是 k8s apiserver 进行认证请求时,带过来只有用户名和 bearer token,没有密码。为了能够使用用户名密码和 bearer token 去 ldap 进行认证,这里做了些 trick 的东西。

如下图所示,客户端通过 nginx 访问 apiserver,在 nginx 一层里,配置了 auth-request,将 basic auth 的请求发送给后端的 ldap 认证代理,ldap 认证代理认证通过后,会随机生成一段 bearer token,并通过相应头部告诉给 nginx。nginx 收到这个响应头部后,就配置使用 bearer token 访问 apiserver。也就是说,请求到达 apiserver 的时候,使用的是 bearer token 这种方式进行认证。apiserver 收到请求后,会同时出发内部认证机制和 webhook 认证机制,webhook 认证在这里同样配置了 nginx 的 ldap 认证代理。由于 ldap 认证代理保存了所有经过 ldap 认证的用户的 bearer token,因此便可以通过 apiserver 带过来的 bearer token 成功认证用户!

如果需要更细粒度的权限控制,可以在 ldap 认证代理那里,接入公司的一些内部系统,根据不同的用户,返回不同的用户组即可。

(责任编辑:IT教学网)

更多

推荐网络创业文章