目的

通过以下步骤最终可使用ldap server中的用户登录一台ldap client,并允许有sudo权限。平常公司中所用的域账号以及服务器账号也许就是使用如下方式,但是应该没有这么简陋,只是借机了解一波ldap


环境信息

[root@suhw ~]# hostnamectl Static hostname: suhwIcon name: computer-vmChassis: vmMachine ID: c9006a74a3674913a1e2bf3f582ec2a3Boot ID: 1421443538404e6aa9c26cebe889446cVirtualization: kvmOperating System: CentOS Linux 7 (Core)CPE OS Name: cpe:/o:centos:centos:7Kernel: Linux 3.10.0-957.el7.x86_64Architecture: x86-64

名词解释

LDAP(Light Directory Access Portocol)轻量级目录访问协议。现在许多产品都加入了对LDAP的支持,可以通过简单的配置与服务器做认证服务。用户只需要使用一个密码登录众多个支持LDAP协议的应用,由应用自己去LDAP Server去认证用户信息,不仅做到了用户信息的统一管理,对于应用认证也十分方便。接下来了解一些基本概念

目录树概念

  1. 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
  2. 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
  3. 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
  4. 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

关键字解释

关键字 英文全称 含义
dc Domain Component 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
ou Organization Unit 组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)
cn Common Name 公共名称,如“Thomas Johansson”(一条记录的名称)
dn Distinguished Name “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)

服务端安装

[root@suhw ~]# yum -y install openldap-servers openldap-clients

启动

生成密钥

记住输出结果,后续会将加密后的结果设置为初始用户的密码

[root@suhw ~]# slappasswd -s 123456
{SSHA}naG35hsGaMHojVoOoZQvjinkza4XUSBr

修改所属用户与组

[root@suhw ~]# chown ldap:ldap /var/lib/ldap/*

启动 LDAP 服务

[root@suhw ~]# systemctl start slapd
[root@suhw ~]# systemctl enable slapd

配置

添加基础模块

[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

导入生效

[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"[root@suhw ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

配置域信息

创建/etc/openldap/schema/changes.ldif文件,将要替换的部分更改为自己的数据。

# 修改域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
# 注意修改
olcSuffix: dc=suhw,dc=com# 修改管理员用户
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
# 注意修改
olcRootDN: cn=admin,dc=suhw,dc=com# 修改管理员密码
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
# 替换为 slappasswd 生成后的结果
olcRootPW: {SSHA}naG35hsGaMHojVoOoZQvjinkza4XUSBr# 修改访问权限
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
dn.base="cn=admin,dc=suhw,dc=com" read by * none

导入配置

[root@suhw ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/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 "olcDatabase={1}monitor,cn=config"

创建域和组织

[root@suhw ~]# vi /etc/openldap/schema/basedomain.ldif

dn,dc的地方修改为自己对应的内容

dn: dc=suhw,dc=com
dc: suhw
objectClass: top
objectClass: domaindn: ou=People,dc=suhw,dc=com
ou: People
objectClass: top
objectClass: organizationalUnitdn: ou=Group,dc=suhw,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

导入配置,回车后输入之前创建用户未加密之前的密码

[root@suhw ~]# ldapadd -x -D cn=admin,dc=suhw,dc=com -W -f /etc/openldap/base.ldif
Enter LDAP Password:
adding new entry "dc=suhw,dc=com"adding new entry "ou=People,dc=suhw,dc=com"adding new entry "ou=Group,dc=suhw,dc=com"

查看用户列表

[root@suhw ~]# ldapsearch -x -b "ou=People,dc=suhw,dc=com" | grep dn

安装图形化界面

了解到的两种图像化界面,一种是LDAP Admin,另外一种是PHPLDAPAdmin。通过这两个工具,可以方便的进行用户的增删查改等操作。

PHPLDAPAdmin安装

直接采用docker安装方便。首先记得放开ldapserver的389端口或关闭防火墙,否则登录会出错

[root@suhw openldap]# firewall-cmd --zone=public --add-port=389/tcp --permanent
success
[root@suhw openldap]# systemctl restart firewalld

执行docker安装命令

docker run -d --privileged -p 10004:80 --name myphpldapadmin \--env PHPLDAPADMIN_HTTPS=false --env PHPLDAPADMIN_LDAP_HOSTS=10.91.156.198  \--detach osixia/phpldapadmin

配置的Ldap地址:--env PHPLDAPADMIN_LDAP_HOSTS=10.91.156.198

配置不开启HTTPS--env PHPLDAPADMIN_HTTPS=false(默认是true)

容器运行以后访问http://host:10004即可。


LDAP Admin安装

Ldap Admin是一个用于LDAP目录管理的免费Windows LDAP客户端和管理工具。此应用程序允许您在LDAP服务器上浏览,搜索,修改,创建和删除对象。它还支持更复杂的操作,例如目录复制和在远程服务器之间移动,并扩展常用编辑功能以支持特定对象类型(例如组和帐户)。

下载地址:http://www.ldapadmin.org/

安装成功后登录界面如下:


客户端配置

安装

在任意一台机器上首先安装nss-pam-ldapd

[root@node ~]# yum install openldap-client nss-pam-ldapd -y

使用authconfig进行ldap认证的相关设置

[root@node ~]# authconfig --enableldap --enableldapauth --enablemkhomedir --enableforcelegacy --disablesssd --disablesssdauth --disableldaptls --enablelocauthorize --ldapserver=10.91.156.205 --ldapbasedn="dc=suhw,dc=com" --enableshadow --update

--ldapserver填写对应ldapserver的地址,basedn填写基础的域信息。

假设我在10.91.156.209上进行完成上述操作,那以后就可以通过test01@10.91.156.209进行登录,209机器会拿用户信息去找ldapserver进行验证。

添加用户

  1. 新建sudoers组织

  1. 新建 cloud 组

查看 group 属性

LDAP server上添加id为7958的group与之对应

[root@server ~]# groupadd -g 7958 cloud[root@server ~]# tail /etc/group -n 1
cloud:x:7958:
  1. 新建test用户并放置在cloud组下

设置user相关属性

右键用户设置密码123456

保存后将test01用户挪至cloud组下,并修改用户gid为之前的7958

此时通过test01@10.91.156.205访问ldap client,即可访问成功,并会在ldap client中新建/home/test01作为家目录

注:添加用户和组时id注意别和ldapserver中的重复。

配置sudo

要向给test01用户sudo权限,可以直接通过visudo编辑/etc/sudoers配置文件,将cloud组加置对应位置即可

    106 ## Allows people in group wheel to run all commands107 %wheel  ALL=(ALL)       ALL108 %cloud  ALL=(ALL)       ALL

此时再去重新连接就可拥有sudo权限。更详细的权限控制自行搜索


参考

https://www.cnblogs.com/wilburxu/p/9174353.html

https://blog.mylitboy.com/article/operation/docker-install-openldap.html

https://www.cnblogs.com/xiaomifeng0510/p/9564688.html

https://cloud.tencent.com/developer/article/1563031

https://www.runoob.com/linux/linux-user-manage.html

Linux - 搭建LDAP统一认证服务相关推荐

  1. Linux下LDAP统一认证解决方案

    企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患.笔者目前工作的企业就是如此,每一个新员工的到来管理员都要初始化很多密码,而这些密码都被设置 ...

  2. Linux搭建LDAP Account Manager(LAM)

    搭建 ldap account manager LAM一直更新的很快,所以有很多版本供选择 因为这边的网络环境不是特别的好,进LAM的官网去下载最新的比较慢,所以没有配置最新的版本 这是我自己找的一个 ...

  3. linux搭建ldap服务器详细步骤,linux环境搭建ldap服务器

    首先保证linux正常联网 yum install openldap-servers -y 拷贝配置文件 cd /usr/share/openldap-servers/ cp slapd.conf.o ...

  4. Linux服务器ldap启动,linux搭建ldap服务器详细步骤

    ldap这种原始的服务器搭建起来比较复杂,同时它也是CE必考的(客户端的搭建). 1.安装openldap-servers软件包 2.查看ldap模板文件的存放位置: 3.拷贝ldap模板文件到配置文 ...

  5. linux搭建ldap服务器搭建,Linux下安装配置OpenLDAP服务器

    东西多了,为了好管理,我们会将它们别类:服务器中信息.资源多了,不言而喻也是这个道理,而目录服务器是这个原理.那么支持IPV6协议的OpenLDAP如何在Linux服务器上安装配置? 一.安装Open ...

  6. ldap基本dn_2020年,手把手教你如何在CentOS7上一步一步搭建LDAP服务器的最新教程...

    1. 什么是LDAP 1.1 什么是LDAP? 要想知道一个概念,最简单的办法就是wikipedia,当然也可以百科. LDAP全称是轻型目录访问协议(Lightweight Directory Ac ...

  7. ldap 统一认证 java_如何在你的系统里集成LDAP统一认证

    一.为什么需要统一认证 日常办公经常会有多套系统,如果各个系统各自维护一套用户认证,用户需要记住多个用户名密码. 系统各自管理用户认证的方式,不但会有重复建设的问题,用户体验也会差,经常会有用户忘记密 ...

  8. Linux 搭建SVN 服务器

    一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中 ...

  9. 统一认证服务CAS 5安装

    2019独角兽企业重金招聘Python工程师标准>>> 简要介绍统一认证服务(CAS,Central Authentication Service,注:常称为单点登录系统)5.2.X ...

  10. Linux 搭建SVN server

    一. SVN 简单介绍 Subversion(SVN) 是一个开源的版本号控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository ...

最新文章

  1. 关于Nikon Ai AF 28mm F1.4D遮光罩的问题
  2. linux 网络编程学习
  3. struts2+extjs文件上传完整实现(攻克了上传中的各种问题)
  4. Spring Boot工作笔记-RabbitMQ中Unsupported major.minor version 52.0问题
  5. 02_线性表的顺序表示和实现
  6. leetcode64. 最小路径和
  7. activemq之Windows安装
  8. Java基础语法面试题汇总
  9. led背光板的作用是什么呢?
  10. java实现阿里云接口发送短信验证码
  11. 北邮C++——破解简单密码
  12. Java——获取上传的pdf页数
  13. 哪个牌子的运动耳机比较好、运动蓝牙耳机排行榜
  14. EOS智能合约开发系列(一)
  15. WWW相关概念的学习
  16. cad在线转换_手绘稿画好后我熬了一个通宵描图,结果组长给我说可以一键生成CAD!...
  17. c++画直线、矩形、圆、椭圆
  18. 使用WireMock快速伪造RESTful服务
  19. Bilateral Filtering(双边滤波)算法研究
  20. 北京内推 | 微软亚洲研究院机器学习组招聘研究型实习生

热门文章

  1. 5G UPF与MEC
  2. 虚幻4 - ARPG实战教程(第一季)
  3. forge是用java装吗_我的世界forge怎么安装 forge使用方法
  4. java weka 分类_Weka开发[48]——用Weka文本分类
  5. 图解机器学习—算法原理与Python语言实现(文末留言送书)
  6. 华硕aura完全卸载_更快,更信仰,华硕RTX 2070电竞显卡
  7. 【Godot】对 Godot 节点设计的思考
  8. 【电子发票】电子发票OFD如何打开?OFD版式阅读器
  9. Java 用两个队列实现一个栈
  10. Spring学习-入门