阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu 14.04 – Kerberos LDAP配置

156次阅读
没有评论

共计 6540 个字符,预计需要花费 17 分钟才能阅读完成。

大多数情况下,我们不会光使用 Kerberos;一旦用户被 Kerberos 认证,我们需要指出用户可以做什么(认证哪些服务)。这将会是一些程序的工作比如:LDAP。

在两个服务器之间复制一个 kerberos 实体数据库,或者将一个附加的用户数据库添加到您的网络中可能会比较麻烦。幸运的是,MIT Kerberos 可以被配置成使用一个 LDAP 目录作为主数据库。本节包括配置主从 Kerberos 服务器使用 OpenLDAP 作为实体数据库。

tips: 这里介绍的例子假定是 MIT Kerberos 和 OpenLDAP。

配置 OpenLDAP

首先,必要的 schema(模式)需要被加载在 OpenLDAP 服务器上,并且这个 OpenLDAP 服务器和主从 KDC 是网络连通的。本节假设的 LDAP 复制至少配置在两台以上的服务器。配置 OpenLDAP 查看 OpenLDAP 服务器。

同时要求配置 OpenLDAP 的 TLS 和 SSL 连接,这使得 KDC 和 LDAP 服务器之间的传输是加密的。具体配置查看 TLS

tips:cn=admin,cn=config 是我们使用权限编辑 ldap 数据库创建的用户。大多数时候,它是 RootDN。根据自己的需求进行修改。

  1. 在 LDAP 服务器上安装 krb5-kdc-ldap 包,用来加载 schema。在终端输入:

    sudo apt-get install krb5-kdc-ldap
  2. 解压 kerberos.schema.gz 文件:

    sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz
    sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/
  3. Kerberos 的 schema 需要被添加到 cn=config 树。下面的过程是添加一个新的 schema 到 slapd。同样的,详细资料请查看 Modifying the slapd Configuration Database。

    1. 首先,创建一个名叫 schema_convert.conf 的配置文件,或者其他类似描述的名字,包含以下内容:

      include /etc/ldap/schema/core.schema
      include /etc/ldap/schema/collective.schema
      include /etc/ldap/schema/corba.schema
      include /etc/ldap/schema/cosine.schema
      include /etc/ldap/schema/duaconf.schema
      include /etc/ldap/schema/dyngroup.schema
      include /etc/ldap/schema/inetorgperson.schema
      include /etc/ldap/schema/java.schema
      include /etc/ldap/schema/misc.schema
      include /etc/ldap/schema/nis.schema
      include /etc/ldap/schema/openldap.schema
      include /etc/ldap/schema/ppolicy.schema
      include /etc/ldap/schema/kerberos.schema
    2. 创建一个临时目录来存放 LDIF 文件:

      mkdir /tmp/ldif_output 
    3. 现在使用 slapcat 来转换 schema 文件:

      slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s \
      "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif
    4. 编辑生成的 /tmp/cn\=kerberos.ldif 文件,修改如下的属性:

      dn: cn=kerberos,cn=schema,cn=config
      ...
      cn: kerberos

      并在文件的结尾移除如下的行:

      structuralObjectClass: olcSchemaConfig
      entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
      creatorsName: cn=config
      createTimestamp: 20090111203515Z
      entryCSN: 20090111203515.326445Z#000000#000#000000
      modifiersName: cn=config
      modifyTimestamp: 20090111203515Z

      属性可能不一样,保证它们被移除就行了。

    5. 用 ldapadd 加载新的 schema:

      ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif
    6. 为 krb5principalname 添加一个索引:

      ldapmodify -x -D cn=admin,cn=config -W
      Enter LDAP Password:
      dn: olcDatabase={1}hdb,cn=config
      add: olcDbIndex
      olcDbIndex: krbPrincipalName eq,pres,sub
      
      modifying entry "olcDatabase={1}hdb,cn=config"
    7. 最后, 更新访问控制列表(ACL):

      ldapmodify -x -D cn=admin,cn=config -W
      Enter LDAP Password: 
      dn: olcDatabase={1}hdb,cn=config
      replace: olcAccess
      olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by
      
      dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
      -
      
      add: olcAccess
      
      olcAccess: to dn.base="" by * read
      -
      
      add: olcAccess
      olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read
      
      modifying entry "olcDatabase={1}hdb,cn=config"
      

好了,现在你的 LDAP 目录已经准备好为 Kerberos principal 数据库服务了。

主 KDC 配置

配置完 OpenLDAP 之后,应该配置 KDC 了。

  1. 首先,安装必要的包,在终端输入:

    sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
  2. 编辑 /etc/krb5.conf 添加在合适的位置如下选项:

    [libdefaults]
           default_realm = EXAMPLE.COM
    
    ...
    
    [realms]
           EXAMPLE.COM = {
                   kdc = kdc01.example.com
                   kdc = kdc02.example.com
                   admin_server = kdc01.example.com
                   admin_server = kdc02.example.com
                   default_domain = example.com
                   database_module = openldap_ldapconf
           }
    
    ...
    
    [domain_realm]
           .example.com = EXAMPLE.COM
    
    
    ...
    
    [dbdefaults]
           ldap_kerberos_container_dn = dc=example,dc=com
    
    [dbmodules]
           openldap_ldapconf = {
                   db_library = kldap
                   ldap_kdc_dn = "cn=admin,dc=example,dc=com"
    
                   # this object needs to have read rights on
                   # the realm container, principal container and realm sub-trees
                ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
    
                   # this object needs to have read and write rights on
                   # the realm container, principal container and realm sub-trees
                   ldap_service_password_file = /etc/krb5kdc/service.keyfile
                   ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com
                   ldap_conns_per_server = 5
           }

    tips: 为你的网络修改 example.com, dc=example,dc=com, cn=admin,dc=example,dc=com, 和 ldap01.example.com 在适当的 domain,LDAP object,和 LDAP server。

  3. 接下来使用 kdb5_ldap_util 工具创建 realm:

    sudo kdb5_ldap_util -D  cn=admin,dc=example,dc=com create -subtrees \
    dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.com
  4. 创建一个隐藏的密码用来绑定 LDAP 服务器。这个密码被用于 /etc/krb5.conf 文件中的 ldap_kdc_dn 和 ldap_kadmin_dn 选项:

    sudo kdb5_ldap_util -D  cn=admin,dc=example,dc=com stashsrvpw -f \
    /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
  5. 从 LDAP 服务器复制 CA 证书:

    scp ldap01:/etc/ssl/certs/cacert.pem .
    sudo cp cacert.pem /etc/ssl/certs

    并编辑 /etc/ldap/ldap.conf 来使用证书:

    TLS_CACERT /etc/ssl/certs/cacert.pem

    tips:这个证书同样需要复制到 Secondary KDC,来允许连接到 LDAP 服务器使用 LDAPS。

现在你可以添加 Kerberos 实体到 LDAP 数据库,并且他们会被复制到任何其他被配置过备份的 LDAP 服务器。使用 kadmin.local 工具添加一个 principal,输入:

sudo kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local:  addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve
WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy
Enter password for principal "steve@EXAMPLE.COM": 
Re-enter password for principal "steve@EXAMPLE.COM": 
Principal "steve@EXAMPLE.COM" created.

现在,krbPrincipalName, krbPrincipalKey, krbLastPwdChange 和 krbExtraData 属性将被添加到 uid=steve,ou=people,dc=example,dc=com 用户对象。使用 kinit 和 klist 工具测试是否用户真的被签发了证书。

如果用户对象已经被创建,-x dn=”…”选项需要添加 Kerberos 的属性。否则新的 principal 对象会被创建在 realm 子树。

Secondary KDC 配置

配置 Secondary KDC 使用 LDAP 备份和配置使用普通 Kerberos 数据库差不多。

  1. 首先,安装必要的包,在终端输入:

    sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
  2. 接着,编辑 /etc/krb5.conf 使用 LDAP 备份:

      [libdefaults]
           default_realm = EXAMPLE.COM
    
    ...   
    
    [realms]
           EXAMPLE.COM = {
                   kdc = kdc01.example.com
                   kdc = kdc02.example.com
                   admin_server = kdc01.example.com
                   admin_server = kdc02.example.com
                   default_domain = example.com
                   database_module = openldap_ldapconf
           }
    
    ...
    
    [domain_realm]
           .example.com = EXAMPLE.COM
    
    ...
    
    [dbdefaults]
           ldap_kerberos_container_dn = dc=example,dc=com
    
    [dbmodules]
           openldap_ldapconf = {
                   db_library = kldap
                   ldap_kdc_dn = "cn=admin,dc=example,dc=com"
    
                   # this object needs to have read rights on
                   # the realm container, principal container and realm sub-trees
                   ldap_kadmind_dn = "cn=admin,dc=example,dc=com"
    
                   # this object needs to have read and write rights on
                   # the realm container, principal container and realm sub-trees
                   ldap_service_password_file = /etc/krb5kdc/service.keyfile
                   ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com
                   ldap_conns_per_server = 5
           }
  3. 创建隐藏的 LDAP 绑定的密码:

    sudo kdb5_ldap_util -D  cn=admin,dc=example,dc=com stashsrvpw -f \
    /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
  4. 现在,在主 KDC 复制 /etc/krb5kdc/.k5.EXAMPLE.COM Master Key 保存到 Secondary KDC。保证复制的文件是 = 通过加密的连接,比如 scp 或者物理介质。

    sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~
    sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/

    再次强调:用你自己的 realm 替换 EXAMPLE.COM

  5. 回到 Secondary KDC,启动(或重启)ldap 服务器。

    sudo service slapd restart
  6. 最后,开启 krb5-kdc 守护进程:

    sudo service krb5-kdc start
  7. 核实两 LDAP 服务器(和 Kerberos 扩展)是同步的。

现在,你有了冗余的 KDC 和 LDAP 服务器在你的网络,你应该能够继续进行身份认证,在其中一台 LDAP 服务器,一台 Kerberos 服务器,或者一台 LDAP 和一台 Kerberos 同时挂掉的情况下。

资源

  1. Kerberos Admin Guide 有一些额外的细节。
  2. 更多关于 kdb5_ldap_util 的资料查看 Section 5.6 和 kdb5_ldap_util man page。
  3. 另一个有用的链接是 krb5.conf man page。
  4. 另外,请看 Kerberos and LDAP Ubuntu wiki 页面。

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/134950.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6540字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中