前篇<Kerberos+LDAP+NFSv4 實現單點登陸(續1)--dns+dhcp>的krb5 + ldap + bind9 + bind9-dyndb-ldap 全面升級到debian 10,出現bind9-dyndb-ldap的GSSAPI+krb5_keytab認證機制沒法鏈接ldap數據庫.
查看日誌:
SASL/GSSAPI authentication started
Error: Local error
Additional info: SASL(-1): generic failure: GSSAPI Error: Miscellaneous failure (see text) (Did not find a plugin for ccache_ops)linux
網上搜索有關GSSAPI+ccache_ops未果,不得不本身動手調試.
思路:從bind9-dyndb-ldap軟件包開始及其各依賴包逐個手動降級;或者從正常debian 9開始,修改軟件源爲debian 10,逐個升級.即降級/升級一個,測試一次.
說明:debian系統是沒法自動降級的,可修改軟件源爲低版或手動下載低版deb包重裝軟件包數據庫
實際整個調試過程仍是盲人摸象.krb五、ldap、sasl都是複雜的東西,問題有可能在服務端,也有可能在客戶端,也有可能配置上漏缺.
本人能力有限,也但願從源碼定位到問題位置,按日誌出現的關鍵詞'plugin for ccache_ops'搜索上面三者源代碼,也僅僅搜到片言隻語,不知所然.後端
功夫不負有心人,從各個依賴包逐個降級,很幸運定爲到libsasl2-modules-gssapi-heimdal軟件包,也就是說,其它相關的軟件包都用debian 10最新版,配置文件不需更改,
只要將libsasl2-modules-gssapi-heimdal軟件包降級,bind9-dyndb-ldap就正常鏈接到ldap數據庫.
debian 10 版本是2.1.27+dfsg-1
debian 9 版本是2.1.27~101-g0780600+dfsg-3
實際就一個文件/usr/lib/x86_64-linux-gnu/sasl2/libgssapiv2.so.2.0.25,用debian 9 版本解包直接替換掉就可.api
sasl/gssapi也算比較經常使用的應用,但問題是libsasl2-modules-gssapi-heimdal的2.1.27+dfsg-1版至今到debian 11還一直未更新,採用2.1.27+dfsg-1版的其它sasl/gssapi應用都正常.
如openldap客戶端工具在2.1.27+dfsg-1版下正常,以下命令
ldapwhoami -Y GSSAPI -h 192.168.1.11
所以也肯定不了2.1.27+dfsg-1版這個出錯到底是BUG仍是這個升級版需sasl/gssapi客/服進一步配置?
或者如個人需求bind9-dyndb-ldap+SASL/GSSAPI就比較少見了,因此網上幾乎搜不到相關問題,也肯定不了是否是bind9-dyndb-ldap問題.
該問題很平靜,因此可能深藏着.要調試bind9-dyndb-ldap很麻煩,轉個思路,本身編寫最簡單的ldap/sasl/gssapi/krb5客戶端程序測試,果不其然,發現是使用內存票據會出現該問題.
krb5客戶端能夠指定票據的位置,以下
"MEMORY:krb5cc_1000" 存放在進程內存裏
"FILE:/tmp/krb5cc_1000" 存放在臨時目錄下服務器
krb5的票據一般是放在臨時目錄下,即如/tmp/krb5cc_1000的票據文件,openldap客戶端工具就是讀取臨時目錄下的票據.
經測試,libsasl2-modules-gssapi-heimdal 2.1.27+dfsg-1版對內存票據有BUG,對文件票據正常.
在前篇 <Kerberos+LDAP+NFSv4 實現單點登陸> SSSD客戶機安裝提到libsasl2-modules-gssapi-mit和libsasl2-modules-gssapi-heimdal二者可互相替換.
所以安裝debian 10的libsasl2-modules-gssapi-mit,對內存票據已徹底正常.mit版更主流,或許正由於有mit版可代替heimdal版,因此heimdal版問題很平靜.ide
小結:
對於sasl/gssapi應用,請安裝libsasl2-modules-gssapi-mit工具
後記:
1.對於krb5客戶端,儘可能使用mit版,Kerberos本就是mit發明,更活躍.
2.個人Kerberos服務器爲何要採用heimdal版?
由於個人目標Kerberos+LDAP一體,兩套密碼同步.測試
mit heimdal ----------------------------------------------------------------------------------------------------- krb5服務器經過EXTERNAL鏈接ldap 不支持 支持 經過slapd-smbk5pwd同步密碼 不支持 支持
3.debian 10的bind9-dyndb-ldap配置格式有新的變化
客/服配置請先參考前篇<Kerberos+LDAP+NFSv4 實現單點登陸(續1)--dns+dhcp>,而後按下面:ui
但請按Kerberos使用本身本地數據庫來理解下面的配置,由於使用ldap做爲Kerberos後端數據庫後來理解krb5主體和ldap條目很混淆調試
1)bind9-dyndb-ldap配置
/etc/bind/named.conf.ldap
//其它略
...
//不一樣體系路徑如/usr/lib/i386-linux-gnu/bind/ldap.so
dyndb "my_db_name" "/usr/lib/bind/ldap.so" {
server_id "";
directory "/var/cache/bind";
uri "ldap://127.0.0.1";
base "ou=dns,dc=ctp,dc=net";
//認證機制
auth_method "sasl";
sasl_mech "GSSAPI";
//--v-- 添加krb5主體
krb5_principal "dnsadmin@CTP.NET";
krb5_keytab "FILE:/etc/bind/krb5.keytab";
//--^--
timeout 50;
reconnect_interval 100;
};
2)ldap配置
/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
#其它略
...
olcAccess: {3}to dn.subtree="ou=dns,dc=ctp,dc=net" by dn="uid=dnsadmin,cn=gssapi,cn=auth" write by * read
...
說明:
配置krb5主體dnsadmin寫ldap數據庫權限,若是隻需讀權限,應該不需配置;
"cn=gssapi,cn=auth"是固定格式的,用來表示是krb5條目(此處krb5條目不是指使用ldap做爲Kerberos後端存放在ldap數據庫裏所體現的條目,你可按Kerberos使用本身數據庫來理解),ldap數據庫不需建立存儲"uid=dnsadmin,cn=gssapi,cn=auth" krb5條目;
其它的名字"dnsadmin"、"dns"、"ctp"、"net"按你實際名稱填寫.
3)運行如下命令
kadmin -l add -r --use-defaults dnsadmin
kadmin -l ext -k /etc/bind/krb5.keytab dnsadmin
使用ldap做爲Kerberos後端,add命令自動在ldap數據庫裏添加krb5主體dnsadmin的條目"krb5PrincipalName=dnsadmin@CTP.NET,ou=hdkrb5,dc=ctp,dc=net"
chown bind:bind /etc/bind/krb5.keytab
chmod o-r /etc/bind/krb5.keytab
chmod g-r /etc/bind/krb5.keytab
4.其它注意事項
個人 krb5 + ldap + bind9 + bind9-dyndb-ldap 一體機kdc服務器(192.168.1.11)
1)
當/etc/resolv.conf爲空
或設nameserver 127.0.0.1
或設nameserver 192.168.1.11
或設nameserver 192.168.1.xx 同kdc服務器網段隨便不存在的地址
bind9啓動失敗,提示超時
假如以上述resolv.conf配置,將/etc/bind/named.conf.ldap的sasl/gssapi認證機制改成匿名
auth_method "none";
bind9啓動能成功,雖然匿名沒法寫入ldap,但dig讀取成功;說明多是sasl/gssapi機制的緣故.
2)
必須往/etc/resolv.conf添加和kdc服務器不一樣網段不存在的地址
如nameserver 127.0.0.2
或nameserver 192.168.2.22
sasl/gssapi認證機制,bind9啓動才成功,原因不明.