zoukankan      html  css  js  c++  java
  • Kerberos+SSH安装配置使用教程

    一、背景说明

    最早听说KDC和Kerberos应该是大三的《应用密码学》,当时感觉这套对称密钥分发机制比非对称密钥的PKI分发机制要好理解。但几年下来由于现实中使用SSL的场景比较比(主要是https)接触得也就比较多所以对PKI的认识反倒超过了KDC。

    Kerberos的接触印象中只有某运营商大数据平台一主机要ssh到其他主机时需要先kinit申请票据一把,具体原理不是很清楚,也没有深入探究。这几天一是比较有空二是感觉以后用得上所以来探究一番,本文可以认为是本链接文档的一次实现。

    另外,首先要明确Kerberos是KDC思想的一个具体实现,正如当下的数字签名证书是PKI思想的一个具体实现一样;只是他们都实现得都比较好,以至于与各自的思想基本成为同义词。

    二、Kerberos+SSH安装配置

    2.1 安装配置Kerberos

    2.1.1 前置操作

    将当前用户设置成sudo免密码。编缉/etc/sudoers文件追加以下内容(ls是我当前用户,操作时请改成自己的):

    ls ALL=(ALL) NOPASSWD: ALL

    将后续要使用的域名/主机名指向本地。编缉/etc/hosts写入以下内容(192.168.220.143是我电脑当前的IP,改成自己的;最后的ls-virtual-machine是我电脑当前的主机名,改成自己的;另外如果/etc/hosts存在有将主机名解析到127.0.0.1的条目,则应将其删除)

    127.0.0.1  localhost
    192.168.220.143 monarch.example.com monarch krb1.example.com krb1 ls-virtual-machine

    2.1.2 安装Kerberos服务

    sudo apt install krb5-admin-server krb5-kdc -y
    

    安装krb5-admin-server时要确认几个问题(不同操作系统用Kerberos形式可能有些许差别,但意思都差不多),如下输入直接回车即可。

    指定默认领域,使用EXAMPLE.COM:

    Default Kerberos version 5 realm? EXAMPLE.COM

    默认领域使用的Kerberos服务器,使用krb1.example.com(前边2.1我们已将krb1.example.com也指向本地)

    Kerberos servers for your realm: krb1.example.com

    默认领域使用的管理服务器,一样使用krb1.example.com:

    Administrative server for your Kerberos realm: krb1.example.com

    2.1.3 初始化配置

    使用以下命令初始化前边配置的EXAMPLE.COM领域对应的数据库,并设置该领域的密码:

    sudo krb5_newrealm

    编缉/etc/krb5.conf,定位到[domain_realm]节区,追回以下内容:

    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

    继续编缉/etc/krb5.conf,在文件末尾追加以下内容,设置其日志文件目录:

    [logging]
        kdc = FILE:/var/log/kerberos/krb5kdc.log
        admin_server = FILE:/var/log/kerberos/kadmin.log
        default = FILE:/var/log/kerberos/krb5lib.log

    由于/var/log/kerberos目录是不存在的,所以我们还要把这日志目录和文件创建出来:

    sudo mkdir /var/log/kerberos
    sudo touch /var/log/kerberos/{krb5kdc,kadmin,krb5lib}.log
    sudo chmod -R 750  /var/log/kerberos

    最后为使以上配置生效,我们需要重启服务:

    sudo invoke-rc.d krb5-admin-server restart
    sudo invoke-rc.d krb5-kdc restart

    2.1.4 创建策略集

    策略集就是规则的集合,我们这里创建admin/host/service/user四个策略集(minlength是策略集的密码长度,minclasses是密码的元素种类),过程如下:

    ls@ls-virtual-machine:~$ sudo kadmin.local
    Authenticating as principal root/admin@EXAMPLE.COM with password.
    kadmin.local:  add_policy -minlength 8 -minclasses 3 admin
    kadmin.local:  add_policy -minlength 8 -minclasses 4 host
    kadmin.local:  add_policy -minlength 8 -minclasses 4 service
    kadmin.local:  add_policy -minlength 8 -minclasses 2 user
    kadmin.local:  
    kadmin.local:  quit

    2.1.5 在规则集下创建具体账号

    其中的user表示隶属user策略集,ls是用户名(ls是我当前用户名,改成自己的);设置的密码一定要记住,因为该账号要获取票据时要使用该密码:

    ls@ls-virtual-machine:~$ sudo kadmin.local
    Authenticating as principal root/admin@EXAMPLE.COM with password.
    kadmin.local:  addprinc -policy user ls
    Enter password for principal "ls@EXAMPLE.COM": 
    Re-enter password for principal "ls@EXAMPLE.COM": 
    Principal "ls@EXAMPLE.COM" created.
    kadmin.local:  
    kadmin.local:  quit

    2.2 ssh集成Kerberos

    经过以上步骤,我们已经安装好了Kerberos,现在来演示如何使用kerberos完成ssh认证和登录。

    2.2.1 安装ssh

    sudo apt install openssh-server openssh-client

    2.2.2 配置ssh支持Kerberos认证

    编缉/etc/ssh/sshd_config,启用以下项(其中最后的“UsePAM yes”一般已启用):

    GSSAPIAuthentication yes
    GSSAPICleanupCredentials yes
    GSSAPIKeyExchange yes
    UsePAM yes

    重启ssh使配置生效:

    sudo invoke-rc.d ssh restart

    2.2.3 创建ssh登录相关规则

    service仍然是我们前面添加的service策略集;host是telnet/rsh/ssh等服务在kerberos中的统称,monarch.example.com是规则适用的主机名:

    ls@ls-virtual-machine:~$ sudo kadmin.local
    Authenticating as principal root/admin@EXAMPLE.COM with password.
    kadmin.local:  addprinc -policy service -randkey host/monarch.example.com
    Principal "host/monarch.example.com@EXAMPLE.COM" created.
    kadmin.local:  ktadd -k /etc/krb5.keytab -norandkey host/monarch.example.com
    Entry for principal host/monarch.example.com with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
    Entry for principal host/monarch.example.com with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
    Entry for principal host/monarch.example.com with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
    Entry for principal host/monarch.example.com with kvno 1, encryption type des-cbc-crc added to keytab WRFILE:/etc/krb5.keytab.
    kadmin.local:
    kadmin.local:  quit

    2.2.4 获取用户票据

    ls是我当前的用户名,改成自己的;获取票据的密码是2.5中创建规则时设的密码(klist -f用于查看当前存在的票据):

    ls@ls-virtual-machine:~$ kinit ls
    Password for ls@EXAMPLE.COM: 
    ls@ls-virtual-machine:~$ 
    ls@ls-virtual-machine:~$ klist -f
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: ls@EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    2019-08-06T15:56:52  2019-08-07T01:56:52  krbtgt/EXAMPLE.COM@EXAMPLE.COM
            renew until 2019-08-07T15:54:39, Flags: FPRIA

    2.2.5 登录测试

    使用使用获取票据的用户(ls)及可通过票据登录的主机(monarch.example.com),如下不需要密码即可直接登录:

    三、原理分析

    因为有不少概念自己也不太确定,理解可能有偏差甚至错误,所以在阅读时需要自行斟酌。

    3.1 KDC原理

    角色:密钥分发中心KDC、用户A、用户B。KDC保存有与用户A、用户B通信的对称密钥,用户A、用户B保存有与KDC通信的对称密钥。

    期望操作:用户A想和用户B进行通信。

    实现过程:用户A向KDC,使用Ka-kdc加密,发送想与用户B通信的请求。

                      KDC接收到请求后,使用Ka-kdc解密,生成Ka-b,并将其使用Ka-kdc加密发送给A、使用Kb-kdc加密发送给B。

                      A和B接收到后,分别使用Ka-kdc和Kb-kdc解密出Ka-b

                      A使用Ka-b向B发送加密消息。

    说明:可以看到,在此模式中KDC需要存储与所有用户通信的Key,而所有用户只需要存储与KDC通信的Key,用户与用户之间的Key是动态生成和分发的。

    3.2 Kerberos过程

    角色:认证服务器AS、票据认可服务器TGS、服务器端DS、客户端A;前两者相当于KDC,前三者是Kerberos所指的三个服务器。前三者存放有相互通信所用的对称密钥,客户端A不存放任何对称密钥。

    期望操作:客户端A想和服务器端DS进行通信。

    实现过程:客户端A向AS,以明文形式,索取访问TGS的票据。

                      AS收到请求后,验证A发来的用户名密码,如果正确则生成Ka-tgs,并将其使用借助密码生成的Ka-as加密发送给A、使用Kas-tgs加密发送给TGS。

                      A收到后根据也根据密码生成Ka-as解密,TGS也使用Kas-tgs解密。

                      A使用得到的Ka-tgs,加密,向TGS请求与B进行通信。

                      TGS接收到请求后,使用Ka-tgs解密,根据其意向,生成Ka-b,并将其分别使用Ka-tgs加密发送给A、使用Kb-tgs加密发送给B。

                      A和B接收到后,分别使用Ka-tgs和Kb-tgs解密出Ka-b

                      A使用Ka-b向B发送加密消息。

    说明:Kerberos将KDC拆分为AS和TGS两个服务,这样的好处是,Ka-tgs是有有效期的不再像前边Ka-kdc一样长期有效,当Ka-tgs过期之后用户可以通过输入密码获取新的Ka-tgs

    3.3 SSH中的Kerberos过程

    角色对应:Kerberos启了哪些进程/服务还没有分析哪个是AS哪个是TGS就先不懂,SSH服务端相当于DS,SSH客户端相当于客户端A。

    操作对应:2.1.5的创建账号,就是在AS数据库中导入账号信息。

                     2.2.4中kinit ls,就是向AS申请访问TGS的票据。

                     2.2.5中登录时,SSH客户端才向TGS请求访问SSH服务端。

    3.4 KDC与PKI的优劣分析

    从最终效果上看,KDC和PKI都完成了对称密钥的分发,即效果是一样的。

    从前置条件上看,首先KDC在仍意环境中都需要一个专门的服务(器),其次其要存储的用户数据(用户名、密码或对称密钥)会随用户的增长而增长,最后由于用户和KDC之间使用的是对称密钥所以非否性可能会有问题。

    总的而言,感觉KDC适用于内部网络服务之间的通信,PKI适用于外部网络客户端与服务器之间的通信。

    参考:

    http://techpubs.spinlocksolutions.com/dklar/kerberos.html#krb-install

  • 相关阅读:
    Knockout应用开发指南 第八章:简单应用举例(2)
    微软ASP.NET站点部署指南(7):生产环境部署
    Knockout应用开发指南 第七章:Mapping插件
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(6)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(5)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(3)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(9)
    《Microsoft Sql server 2008 Internals》读书笔记第九章Plan Caching and Recompilation(8)
    Microsoft Visual Studio .NET 2003 引导程序插件下载地址(非官方)
    Vs2010在没有安装SQL Server 2005/2008 Express时如何连接MDF数据文件?
  • 原文地址:https://www.cnblogs.com/lsdb/p/11309245.html
Copyright © 2011-2022 走看看