kerberos+ldap


基於Kerberos +LDAP的集中用戶認證及授權系統搭建實驗

 

[root@localhost openldap]# kinit ldapadmin
kinit: Cannot resolve network address for KDC in realm "EXAMPLE.COM" while getting initial credentials

問題解決:可能的方法:編輯我的/etc/hosts文件並將以下內容添加到其中:10.0.0.1 example.com(krb5.conf里面的realm設置的域名)

 

 

 

1、安裝ldap

yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y

yum install openldap openldap-clients openldap-servers openldap-devel compat-openldap -y

 

 

查看安裝的版本:

rpm -qa openldap

 

2、 配置ldap

更新配置庫:

rm -rf /var/lib/ldap/*

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

chown -R ldap.ldap /var/lib/ldap

 

注意:在2.4以前的版本中,OpenLDAP 使用 slapd.conf 配置文件來進行服務器的配置,而2.4開始則使用 slapd.d 目錄保存細分后的各種配置,這一點需要注意,其數據存儲位置即目錄 /etc/openldap/slapd.d 。盡管該系統的數據文件是透明格式的,還是建議使用 ldapadd, ldapdelete, ldapmodify 等命令來修改而不是直接編輯。下面所有用戶的添加,配置的修改都是生成.ldif后綴的文件然后使用ldapdelete, ldapmodify等命令是其生效

 

默認配置文件保存在 /etc/openldap/slapd.d,將其備份:

cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak

 

添加一些基本配置,並引入 kerberos 和 openldap 的 schema:

(ldap的schema定義了ldap目錄所應遵循的結構和規則,schema給ldap服務器提供了ldap目錄中的類別,屬性等識別的方式,讓這些可以被ldap服務器識別)

cp  /usr/share/doc/krb5-server-ldap-1.9/kerberos.schema  /etc/openldap/schema/

touch /etc/openldap/slapd.conf

vim /etc/openldap/slapd.conf

 

更新slapd.d

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

 

注明:/etc/openldap/slapd.conf不要添加corba.schama,否則有可能會報錯

啟動slapd  service slapd start

刪除該目錄中的所有文件,否則無法啟動LDAP服務

rm -f  /etc/openldap/slapd.d/cn=config/cn=schema/*

 或者去目錄下面刪除所有的重復項

3、啟動服務

啟動 LDAP 服務:

chkconfig --level 345 slapd on

 service slapd start

 

啟動失敗,重新更新slapd.d

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

再啟動service slapd start

 

 

查看狀態,驗證服務端口:

ps aux | grep slapd | grep -v grep

netstat -tunlp  | grep :389

 

4、LDAP集成Kerberos

先裝上kerberos服務之后再進行集成

1安裝並開啟ntp服務

yum intall -y ntp

 service ntpd start

安裝完成后,

2安裝kerberos服務器

yum install -y krb5-server krb5-libs krb5-workstation krb5- krb5-auth-dialog

查看安裝版本:

rpm -qa krb5-server-ldap

 

修改kerberos配置文件

vim /etc/krb5.conf

[logging]

 default = FILE:/var/log/krb5libs.log

 kdc = FILE:/var/log/krb5kdc.log

 admin_server = FILE:/var/log/kadmind.log

 

[libdefaults]

 default_realm = EXAMPLE.COM

 dns_lookup_realm = false

 dns_lookup_kdc = false

 ticket_lifetime = 24h

 renew_lifetime = 7d

 forwardable = true

 

[realms]

 EXAMPLE.COM = {

  kdc = 192.168.10.130:88 (Kerberos服務器ip)

  admin_server = 192.168.10.130:749

  default_domain = EXAMPLE.COM

 }

 

[domain_realm]

 .example.com = EXAMPLE.COM

 example.com = EXAMPLE.COM

 

其中,EXAMPLE.COM可任取,但需要前后統一。

vim /var/kerberos/krb5kdc/kdc.conf   ,不用改

 

 

創建/初始化kerberos database

(設置數據庫管理密碼是12345678  EXAMPLE.COM是數據庫名[-r 指定 的realm name ])

/usr/sbin/kdb5_util create -s -r EXAMPLE.COM  (-s表示生成stash file 並再其中存儲master server key[ krb5kdc] -r 制定一個 realm name ,當krb5。conf中定義了多個realm時才是必要的)

vim /var/kerberos/krb5kdc/kadm5.acl

 

 

啟動kerberos服務

   service krb5kdc start

service kadmin start

 

當數據庫創建好了 ,/var/Kerberos/krb5kdc/目錄下生成

Kadm5.acl

kdc.conf

principal

principal.adm5

principal.kadmin5.lock

principal.ok

 

為了使Kerberos能夠綁定到OpenLDAP服務器,需要創建一個管理員用戶和一個principal,並生成keytab文件

設置該文件的權限為LDAP服務運行用戶可讀(一般為ldap):

 添加數據庫管理員:

新建一管理用戶 ldapadmin 密碼是12345678

kadmin.local -q "addprinc ldapadmin@EXAMPLE.COM"  (生成指定key的principal

 

新建另一個用戶 ldap/c2bde55 (-randkey 是生成隨機key的principal)

kadmin.local -q "addprinc -randkey ldap/c2bde55@EXAMPLE.COM"

  

 

拓展:

查看principal: listprincs

修改用戶密碼:change_password -pw xxx 用戶

刪除principal :delete_principal 用戶

 

形成ldap.keytab文件

kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/c2bde55@EXAMPLE.COM"2

 chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab

 

使用ldapadmin用戶測試:

kinit ldapadmin

  

 

重啟slapd服務

service slapd restart

 

如果不生效,執行如下命令:

cp /etc/openldap/ldap.keytab /etc/krb5.keytab

chgrp ldap /etc/krb5.keytab && chmod 640 /etc/krb5.keytab

 

5、創建LDAP的數據庫

進入到 /etc/openldap/slapd.d目錄,查看

cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif 可以看到一些默認的配置,例如:

olcSuffix: dc=my-domain,dc=com

olcRootDN: cn=Manager,dc=my-domain,dc=com

 

建立modify.ldif文件,內容如下:

vim /etc/openldap/slapd.d/modify.ldif

 

dn: olcDatabase={2}bdb,cn=config

changetype: modify

replace: olcSuffix

olcSuffix: dc=example,dc=com

 

dn: olcDatabase={2}bdb,cn=config

changetype: modify

replace: olcRootDN

# Temporary lines to allow initial setup

olcRootDN: uid=ldapadmin,ou=people,dc=example,dc=com

 

dn: olcDatabase={2}bdb,cn=config

changetype: modify

add: olcRootPW

olcRootPW: 12345678

 

dn: cn=config

changetype: modify

add: olcAuthzRegexp

olcAuthzRegexp: uid=([^,]*),cn=GSSAPI,cn=auth uid=#1,ou=people,dc=example,dc=com

 

dn: olcDatabase={2}bdb,cn=config

changetype: modify

add: olcAccess

# Everyone can read everything

olcAccess: {0}to dn.base="" by * read

# The ldapadm dn has full write access

olcAccess: {1}to * by dn="uid=ldapadmin,ou=people,dc=example,dc=com" by dn="cn=root,dc=example,dc=com" write by * read

 

使用下面命令導入更新配置:

ldapmodify -Y EXTERNAL -H ldapi:/// -f modify.ldif

 

 

注明:cn=root,dc=example,dc=com授權,以便整合Kerberos使用

更新配置過程中出現錯誤:additional info: modify/add: olcRootPW: no equality matching rule,修改modify.ldif中對應選項的add為replace即可

 

6、導入linux系統用戶

接下來你可以從 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 數據庫,這需要用到 migrationtools 工具。

安裝migrationtools工具:

yum install migrationtools -y

 

利用遷移工具生成模板,先修改默認的配置:

# vim /usr/share/migrationtools/migrate_common.ph

#71行默認的dns域名

DEFAULT_MAIL_DOMAIN = "example.com";

#74行默認的base

DEFAULT_BASE = "dc=example,dc=com";

 

生成模板文件:導入的系統用戶信息,變成ldif格式

/usr/share/migrationtools/migrate_base.pl > /opt/base.ldif

 

然后,可以修改該文件,然后執行導入命令:

 ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 123456 -f /opt/base.ldif

 

將test用戶導入到 ldap 中,可以有選擇的導入指定的用戶:

# 先添加用戶

useradd test

# 查找系統上的 test用戶,將test的用戶信息導入passwd.txt

grep -E "test" /etc/passwd >/opt/passwd.txt

 

使用工具將passwd.txt 變成 ldif格式的文件

/usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif

最后再將passwd.ldif 中的信息導入到 /etc/openslapd/slapd.d中

ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f /opt/passwd.ldif

將用戶組導入到 ldap 中:

# 生成用戶組的 ldif文件,然后導入到

grep -E "test" /etc/group >/opt/group.txt

/usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif

ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f /opt/group.ldif

7、LDAP用戶增刪修改

查詢:查詢新添加的 test 用戶:

# ldapsearch -LLL -x -D 'uid=ldapadmin,ou=people,dc=example,dc=com' -w 12345678 -b 'dc=example,dc=com' 'uid=test'

 

修改

用戶添加好以后,需要給其設定初始密碼,運行命令如下:

ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=example,dc=com' -w 12345678  " uid=test,ou=people,dc=example,dc=com" -S

密碼修改為 123456

 

 

刪除(就不要刪除了,否則還得新建)

刪除用戶

# ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=people,dc=example,dc=com' "uid=test,ou=people,dc=example,dc=com"

 

刪除組條目:

# ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=people,dc=example,dc=com' "cn=test,ou=group,dc=example,dc=com"

 

8、客戶端配置 開啟另外一台虛擬機 ip是192.168.10.131

安裝openldap客戶端:

yum install openldap-clients -y

 

修改 /etc/openldap/ldap.conf 以下兩個配置:

BASE    dc=example,dc=com

URI     ldap://192.168.10.130(服務器IP)

 

vim /etc/krb5.conf

 

然后,運行下面命令測試:

先刪除 ticket

運行kdestroy會報異常

 

運行ldapsearch -x -b 'dc=example,dc=com'

(注意此時應該到服務器端關閉防火牆,不然運行這個命令會報錯)

 

 

# 重新獲取 ticket

kinit ldapadmin  

 

沒有報錯

 

運行 ldapsearch -b 'dc=example,dc=com'  -x

 

# ldapwhoami -x

 

 

#直接輸入 ldapsearch -x 不會報錯

 

 

# ldapsearch   報錯

 

報ldap_sasl_interactive_bind_s錯誤,且發現/etc/krb5.keytab不存在, 執行如下操作:cp /etc/openldap/ldap.keytab (服務器) /etc/krb5.keytab(客戶端)

chgrp ldap /etc/krb5.keytab && chmod 640 /etc/krb5.keytab

要以 root 用戶身份運行 slapd)

如果報錯:SASL(-4): no mechanism available: No worthy mechs found

ldapsearch 加一個 -x 參數,略過sasl認證

  

9、Kerberos整合(共用LDAP數據庫的集成方式)服務器端

1)配置

Kerberos 相關的數據也需要存儲在某個數據庫中,在這里我們選擇使用 LDAP 作為其數據庫,目的是為了數據備份的方便(只需要統一備份 LDAP 數據庫即可)。如果需要使用其自身的數據庫,則需要將下面的 kdb5_ldap_util 命令替換為 kdb5_util。

vim /etc/krb5.conf末尾內容如下:

[dbdefaults]

    ldap_kerberos_container_dn = cn=kerberos,dc=example,dc=com

 

[dbmodules]

    openldap_ldapconf = {

        db_library = kldap

        ldap_servers = ldapi://

        ldap_kerberos_container_dn = cn=kerberos,dc=example,dc=com

        ldap_kdc_dn = cn=root,dc=example,dc=com

        ldap_kadmind_dn = cn=root,dc=example,dc=com

        ldap_service_password_file = /etc/krb5.ldap

        ldap_conns_per_server = 5

    }

 

其中 ldap_kdc_dn 和 ldap_kadmind_dn 分別對應 Kerberos 訪問 LDAP 數據庫時的服務和管理帳號。前者需要有讀權限,后者需要讀寫權限。此處為了簡單方便統一用cn=root,dc=example,dc=com一個進行管理

說明: ldap_kerberos_container_dn must start with a 'cn'

 

2)ldap添加用戶

vim user.ldif內容如下:

dn: cn=kerberos,dc=example,dc=com

cn: kerberos          #這是添加的一個kerberos用戶

objectClass: organizationalRole

 

dn: cn=root,dc=example,dc=com

cn: root                  #這是添加一個root用戶

userPassword:: e1NTSEF9UTg2T1hqeXcreCtzck5yL1JEUzhLbTBGQ2tZeFBzWnI=

objectClass: simpleSecurityObject

objectClass: organizationalRole

  

執行命令:ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f user.ldif

管理員修改普通用戶的密碼:

ldappasswd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 "cn=root,dc=example,dc=com" -s 123456

把密碼修改出123456

 

3)生成訪問ldap的服務密碼文件

因為 Kerberos 需要有 ldap_kdc_dn 和 ldap_kadmind_dn 的密碼才能訪問 LDAP數據庫,執行如個命令:12345678

# kdb5_ldap_util -D uid=ldapadmin,ou=people,dc=example,dc=com  -w 12345678 stashsrvpw -f /etc/krb5.ldap cn=root,dc=example,dc=com

 

這里輸入的是12345678

# cat /etc/krb5.ldap

 

4)創建kerberos數據庫   密碼:12345678  123456   123456

kdb5_ldap_util -D uid=ldapadmin,ou=people,dc=example,dc=com -H ldapi:// create -r EXAMPLE.COM -s

 

5)重啟Kerberos

service krb5kdc restart

 

6)測試:添加用戶

# kadmin.local

kadmin.local:  addprinc test

 

密碼是123456

然后

# slapcat |grep “test”

 

 

使用Kerberos+LDAP進行認證整合,LDAP進行賬號管理,Kerberos進行認證。

1)采用該 LDAP作為用戶認證。

只需要對用戶 (如uid=test,ou=People,dc=example,dc=com)添加 userPassword成員即可。如果通過 命令行添加,需要先准備如下文件(userPassword對應的密碼為123456):

vim  test.ldif

dn: uid=test,ou=People,dc=example,dc=com

changetype: modify

add: userPassword

userPassword:: e1NTSEF9Ym0rZXloV1ExalB1aWNEVU1BaHlNM0hZVHh3REIrWU4K

然后執行命令

# ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 123456 -h 127.0.0.1 -f test.ldif

 

 命令執行成功后,通過

# ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 127.0.0.1 -b 'ou=People,dc=example,dc=com'

確認。

 

 

2)使用 Kerberos 認證。

需要將用戶的密碼域做如下修改(userPassword 對應的密碼由echo -n "{SASL}test@EXAMPLE.COM" | base64生成):

dn: uid=test,ou=People,dc=example,dc=com

changetype: modify

replace: userPassword

userPassword:: e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==

 

執行ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 123456 -h 127.0.0.1 -f test.ldif應用該修改。

 

3)修改配置

# vim /etc/sysconfig/saslauthd

修改值

MECH=kerberos5

 

重啟:service saslauthd restart

 

創建vim /etc/sasl2/slapd.conf文件

內容:pwcheck_method: saslauthd

 

重啟:service slapd restart

 

4)執行命令:service saslauthd status -l查看是否報錯

 不報錯

 執行如下操作:

# kadmin.local -q "ank -clearpolicy -randkey host/c2bde55"

# kadmin.local -q "ktadd host/c2bde55"

 

# service saslauthd restart

 

# ps -aux | grep saslauthd

 

# kadmin.local -q 'ank -pw 123456 test'

配置 test 用戶的密碼為:123456

# testsaslauthd -u test -p 123456

 

報錯執行以下命令

 kadmin.local -q "ank -clearpolicy -randkey host/localhost"

kadmin.local -q "ktadd host/localhost"

  

配置 test 用戶的密碼為:123456 成功

 

 

至此, Kerberos 認證測試成功。

執行 ldapsearch測試LDAP 認證是否成功

ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 -h 127.0.0.1 -b 'ou=People,dc=example,dc=com'

 

 結果成功

如果不成功執行:

kadmin.local -q "ank -clearpolicy -randkey host/localhost"

kadmin.local -q "ktadd host/localhost"

 

客戶端驗證:將服務器端的防火牆關閉

ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 -h 192.168.10.130(服務器ip地址) -b 'ou=People,dc=example,dc=com'

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM