9.2 用户认证

平台用户认证体系通过 ldap + kerberos 实现对系统中访问用户的身份认证。

ldap介绍

Lightweight Directory Access Protocol,即“轻量级目录访问协议”。能够通过server + client(服务端+客户端)的方式,帮助我们进行集中的用户(账号)管理。

相关概念

schema 用于控制目录中各种条目所拥有的对象类以及各种属性的定义,可以理解成是一个数据模型

objectClass 对象类

person

posixAccount

posixGroup

shadowAccount

uidObject

organizationalRole

organizationalUnit

organizationalPerson

inetOrgPerson

属性

dn 唯一标志名

uid 通常指一个用户的登陆名称

sn 通常指一个人的姓氏

objectClass 特殊的属性

dc 通常指定一个域名

ou 指定一个组织单元的名称

LDIF文件 交换数据格式的简称,是存储LDAP配置信息及目录内容的标准文本文件格式,通常用来完成openldap数据的导入、导出、修改。

数据结构

Generated

kerberos介绍

Kerberos是一套安全的认证系统。通过Kerberos我们可以实现对系统中访问用户的身份的认证,防止用户伪造身份而得到不属于自己的权限。

相关概念

principal:认证的主体,简单来说就是用户名。

realm:realm有点像编程语言中的namespace。在编程语言中,变量名只有在某个namespace里才有意义。同样的,一个principal只有在某个realm下才有意义,所以realm可以看成是principal的一个容器或者空间。相对应的,principal的命名规则是what_name_you_like@realm。在Kerberos中大家都约定俗成用大写来命名realm, 例如EXAMPLE.COM。

password:某个用户的密码,对应于Kerberos中的master_key。password可以存在一个keytab文件中,所以kerberos中需要使用密码的场景都可以用一个keytab作为输入。

credential:是证明某个人确定是自己/某一种行为的确可以发生的凭据。 在不同的使用场景下, credential的具体含义也略有不同:

对于某个principal个体而言,credential就是principal的password。

在Kerberos认证的环节中,credential就意味着各种各样的ticket。

认证原理

Kerberos是一种基于对称密钥技术的身份认证协议,它作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持 SSO (即客户端身份认证后,可以访问多个服务如 HBase/HDFS 等)。

Kerberos协议过程主要有两个阶段,第一个阶段是KDC对Client身份认证,第二个阶段是Service对Client 身份认证。

Generated

KDC:Kerberos的服务端程序。

Client:需要访问服务的用户(principal),KDC和Service会对用户的身份进行认证。

Service:集成了Kerberos的服务,如HDFS/YARN/HBase等。

KDC对Client身份认证

当客户端用户(principal)访问一个集成了Kerberos的服务之前,需要先通过KDC的身份认证。

若身份认证通过,则客户端会获取到一个TGT(Ticket Granting Ticket),后续就可以使用该TGT去访问集成了Kerberos的服务。

Service对Client身份认证

当用户获取TGT后,就可以继续访问Service服务。它会使用TGT以及需要访问的服务名称(如 HDFS)去KDC获取SGT(Service Granting Ticket),然后使用SGT去访问 Service,Service会利用相关信息对Client进行身份认证,认证通过后就可以正常访问Service服务。