理解ldap - 使用SSSD接入OpenLDAP实现身份验证

Overview SSSD (System Security Services Daemon) 是一套用于远程身份验证的套件服务,为使用SSSD服务的客户端提供了远程访问身份认证服务来获取权限,其后端包括AD, LDAP等,本文将围绕下列方向来阐述SSSD: 为什么需要SSSD,以及使用SSSD来解决什么 使用SSSD的好处 SSSD服务工作原理及架构 如何在Linux上配置SSSD+LDAP 为什么需要SSSD SSSD设计主要是为了传统使用身份认证服务,例如PAM+NSS架构中存在的一些问题: PAM+NSS扩展性差,并配置较为复杂,尽管提供了 authconfig ,通常在大多数教程中以及不同的系统中配置都不相同 PAM+NSS不是真正意义上的离线身份认证,如果当 nslcd 或者 slapd 等服务异常时,无法完成用户认证 以及越来越多的后端,例如LDAP, AD, IPA, IdM,Kerberos等无法做到很好的适配 SSSD就是为了解决上述的问题,对于Linux平台中,SSSD拥有比传统PAM+NSS更好的优势: 符合现代Linux基础架构设计需求,可以适配更多的后端,并降低了操作配置的复杂性 增加了缓存功能,有效的减少了对于后端服务器的负载 因为有了缓存功能,实现了真正的离线认证功能,即使后端服务异常,例如LDAP服务down 了解SSSD架构 了解SSSD架构,其实就是了解前两章的内容,要做到真正的多后端,真脱机,那么服务就有多个组件组成: Monitor:所有SSSD的父进程,即用于管理 Providers 与 Responders Providers:用于感知验证后端的模块,后端就是提供目录树的一端 Responders:为Linux提供与后端交互的功能,这部分通常为 NSS PAM sudo等 图:SSSD架构图 Source:https://sssd.io/docs/architecture.html Providers Local:保存在本地缓存中的账户信息 LDAP, Kerberos, AD, IPA :用于 Linux/UNIX 网络环境中集成身份和身份验证解决方案。 IdM:一种使用本地 Linux 工具在 Linux 系统上创建身份存储、集中身份验证、Kerberos 和 DNS 服务的域控制以及授权策略的目录树后端 sudo,autofs 与LDAP集成的功能 Responders nss:名称解析服务,用于解析组与用户信息 pam:用于用户验证的模块 autofs:自动挂载模块,通常用于与LDAP集成,用于映射LDAP目录树 sudo:linux中用户权限控制,通常也是与LDAP集成 ssh: sssd_be:SSSD的后端进程:其中每一种后端都代表都作为一个sssd_be进程启动 monitor monitor是SSSD的进程,是用于管理(启动,停止,监控服务状态)Provider与Responders的功能...

 ·  · 

Docker运行PostgreSQL

在本文,尝试使用 Docker 运行 PostgreSQL ,为了适配 goalert 项目,因为从来没有尝试过使用 PostgreSQL 了解PostgreSQL数据库 在我们继续运行 PostgreSQL 数据库的 Docker 容器之前,我们先来了解一下 PostgreSQL 数据库。 PostgreSQL 是一个开源 RDMS,类似于 MySQL。 它是一个面向对象的数据库,但我们可以处理结构化和非结构化数据。 PostgreSQL 数据库可以运行在各种平台上,包括 Windows、Mac OS X 和 Linux。它还提供高级数据类型和性能优化功能来存储和扩展复杂的数据库工作负载。 使用公共镜像运行PostgreSQL 要使用 Docker 运行 PostgreSQL,我们首先需要拉取 Docker Hub 上可用的 postgres 公共镜像: bash 1 docker pull postgres 在上面的命令中,我们拉取了 postgres 最新的稳定版镜像。 如果要指定版本的 postgres 镜像,可以使用以下命令 bash 1 docker pull postgres:14.2 这里将使用 postgres:14.2 版本来运行 Postgres 的容器,这里命令主要为 Linux bash 1 docker run -d -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=111111 -p 5432:5432 -v /data:/var/lib/postgresql/data --name postgresql postgres 如果在 window 或 wsl 上运行,可以执行下面命令...

 ·  · 

理解ldap应用 - Linux系统接入OpenLDAP做认证后端

Overview 如果要使Linux账号通过LDAP进行身份认证,就需要配置Linux的 身份验证模块 (Pluggable Authentication Modules) 与 名称服务交换系统 (Name Service Switch) 与LDAP交互。 PAM 和 NSS [3] NSS (name service switch) 通俗理解为是一个数据库系统,他作用是用于如何将操作系统与各种名称的解析机制关联起来,例如主机名,用户名,组名等内容的查找;例如UID查找使用 passwd 库,GID的查找使用 group 库,并且还可以告知查找的来源,如文件,LDAP等 PAM (Pluggable Authentication Modules) 全称是可插拔的认证模块,PAM在Linux中是位于用户数据库与应用之间的认证模块,它本身并不工作,并且本身也不提供或扩展现有数据库系统,当登陆shell时,依赖于由NSS提供的密码库与组库等信息,完成对应的查询 例如下列两张图完整的阐述了PAM与NSS之间,在用户登陆时做了些什么 图:pam和nss工作示意图1 Source:https://medium.com/@fengliplatform/understanding-nss-and-pam-using-a-ssh-example-80512eb0f39e 由图可以看出,当在进行 ping , id 等操作时,会通过nss找到 passwd 库找到用户id,以及通过nss确定是 hosts解析还是dns服务解析对应的域名 如果这张图不明白可以看下一张图 图:pam和nss工作示意图2-1 Source:https://medium.com/@fengliplatform/understanding-nss-and-pam-using-a-ssh-example-80512eb0f39e 图2-1 中使用了tom用户去登录pecan主机,此时在节点 yam 上,将寻找 pecan主机的IP,这是通过 /etc/nsswitch.conf 来确定是通过 hosts 还是 dns服务进行查找。 接下来找到pecan的IP,这里会输入用户名与密码,这里将会被sshd服务接管,此时 pecan 主机的sshd接收到用户端请求连接后,将用户名通过nss进行识别,确定是否为合法用户,如果用户有效,则通过PAM进行认证。认证的源也将由 /etc/nsswitch.conf 中配置的对应 passwd 库来找到,例如ldap,file等。正如下图2-2所示 图:pam和nss工作示意图2-2 Source:https://medium.com/@fengliplatform/understanding-nss-and-pam-using-a-ssh-example-80512eb0f39e Linux with LDAP [1] 在大致了解了Linux登录认证的原理后,知道了要使Linux使用LDAP需要配置两个部分,NSS与PAM,通常有下述几种方案: NSS + PAM SSSD (System Security Services Daemon),SSSD是提供严重的一种工具,可以包含多种源例如LDAP,AD,Kerberos 等,并且提供了缓存功能(当ldap不可用时提供服务) 配置NSS 安装 nss-pam-ldapd...

 ·  · 

理解ldap配置 - openldap中的一些高级配置

memberOf 默认情况下,openldap提供的Posixgroup组,实际上并不能很有效的区分组与用户之间的关系。而 memberOf 则可以有效地检索用户与组的关系 在OpenLDAP配置MemberOf模块 步骤一:可以检查在允许的slapd服务是否已经启用该模块 bash 1 $ slapcat -n 0 | grep olcModuleLoad 对于新部署的服务,可以按照如下方式添加 text 1 2 3 4 dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModuleload: memberof.la 可以在线更改一个正在运行的slapd服务,使其加载 memberOf 模块,需要主义对应的 module{0} 是否正确 bash 1 2 3 4 5 6 cat << EOF | ldapmodify -Q -Y EXTERNAL -H ldapi:/// dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: memberof.la EOF 步骤二:配置overlay 在官方指南中看到olcOverlay 必须要配置到特定数据库的子条目。即此配置段需要在database配置后面。 Overlays must be configured as child entries of a specific database....

 ·  · 

理解ldap配置 - OpenLDAP备份与恢复策略

Overview 本章基于openldap 2.4+版本进行,主要讲解 openldap 的两种备份方法:备份openldap backend-database 文件,另一种方式为导出 LDIF 目录方式 Backup 备份部分将分为两种方式:使用基于 slapcat 导出目录文件方式,与直接备份数据库文件方式。 slapcat 是可用于导出 slapd 数据库中数据为LDAP交换格式的命令行工具,它可以导出 slapd 的配置也可以导出 slapd的数据。 slapcat 使用起来很简单,参数也是与 openldap 其他命令参数类似, 参数 说 明 -a filter 只导出与过滤器声明条件相匹配的数据 例如:slapcat -a "(!(entryDN:dnSubtreeMatch:=ou=People,dc=example,dc=com))" -b suffix 将只导出-b指定DN域内数据,-b 不能与 -n 同时使用 -c 忽略错误 -f -f 后接的文件将替代默认的配置文件,通常情况下备份在slapd本机执行可以不使用该参数 -F 指定配置目录,-F比-f优先级高,同时指定生效为-F,也就是导出的目录 -g 导出时不使用从属关系,仅仅为指定的数据库才会被导出 -H 连接 slapd 服务的地址 -l 输出的文件,默认slapcat是将内容输出到标准输出stdout中 -s subtree-dn 仅导出符合dn子树的条目 例如下列命令用于备份配置文件的 bash 1 $ slapcat -n 0 -l config.ldif Notes:slapd中,配置(0)永远是第一个数据库,跟着的就是在配置中指定的数据库,例如 {0}hdb 将表示1,{1}hdb 则是2...

 ·  ·