Ubuntu(14.04)Kerberos LDAP配置

原文地址:https://help.ubuntu.com/14.04/serverguide/kerberos-ldap.html

大多數情況下,我們不會光使用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.6kdb5_ldap_util man page
  3. 另一個有用的鏈接是krb5.conf man page
  4. 另外,請看Kerberos and LDAP Ubuntu wiki頁面。

轉載請註明出處:
http://blog.csdn.net/m1213642578/article/details/52413426

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章