千家信息网

Kerberos学习(四)

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Mac下安装配置Kerberos了解一下。公司强迫开发人员全部使用mbp,我很不爽,因为mac下面使用mit的kerberos简直是灾难,申请用普通笔记本装linux也不批。MacOSX是闭源系统,安
千家信息网最后更新 2026年10月31日Kerberos学习(四)

Mac下安装配置Kerberos了解一下。


公司强迫开发人员全部使用mbp,我很不爽,因为mac下面使用mit的kerberos简直是灾难,申请用普通笔记本装linux也不批。


MacOSX是闭源系统,安装配置开源的东西都很麻烦。是的,port和brew很方便,但是有些需要的C语言开发头文件貌似是不软链的,而且源码编译还有一堆的依赖要编译,比如kerberos源码依赖openssl头文件,而openssl头文件也得编译安装。当然用sudo硬拷过去也行,但是你知道拷哪些吗?我是已经烦透了。


这里面有两说,如果只是单纯用kadmin, kinit,当然homebrew就够了,不过我是要用kerberos头文件来编译python的某个kerberos库,这就讨厌了,brew安装其实是有头文件源码的,但是没有做软链到/usr/local/include,所以编译的时候是找不到头文件的。只能手工软链到/usr/local/include

brew install krb5cd /usr/local/includeln -sf ../Cellar/krb5/1.16.1/include/* ./cd /usr/local/libln -sf ../Cellar/krb5/1.16.1/lib/* ./

这是准备开发环境的过程


然后配置,由于没什么人在mac上做kerberos相关的开发和使用,所以怎么在mac上配置kerberos我是直接科学上网,搜到MIT的官方文档,MIT Kerberos MAC配置,配置文件与Linux不同,是放置在/User/xianglei/Library/Preferences/edu.mit.Kerberos 里面,搞这么复杂,其实就是人家 linux 的 /etc/krb5.conf 。

[libdefaults]default_realm = EXAMPLE.COMdns_lookup_kdc = falsedns_lookup_realm = falseticket_lifetime = 1296000renew_lifetime =  2592000forwardable = truedefault_tgs_enctypes = rc4-hmacdefault_tkt_enctypes = rc4-hmacpermitted_enctypes = rc4-hmacudp_preference_limit = 1kdc_timeout = 3000[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms] EXAMPLE.COM = {  kdc = 192.168.130.128  admin_server = 192.168.130.128  #master_key_type = aes256-cts  acl_file = /var/kerberos/krb5kdc/kadm5.acl  dict_file = /usr/share/dict/words  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal  max_renewable_life = 30d }

这段是 /User/xianglei/Library/Preferences/edu.mit.Kerberos 的内容,kdc server和 kadmin server的IP地址是我本机的虚机。

kinitxianglei/admin@EXAMPLE.COM's password: Encryption type arcfour-hmac-md5(23) used for authentication is weak and will be deprecated

kinit登录验证没有出现问题,报了一个废弃警告,rc4-hmac太弱鸡了,将会被废弃。


然而,mac下的 kadmin 登录出问题了

kadminkadmin: kadm5_init_with_password: init_sec_context failed with 851968/-1765328377

只会报这种segment fault,经过科学引擎搜索(百度就别想了,中文我就没见过几篇写Kerberos的。)最后结论是Mac上实现的Kerberos与MIT的Kerberos中间传输数据的协议格式不一致导致的。解决方法是这样。用kinit -S参数直接从kdc获取ticket,替代使用krbtgt/EXAMPLE.COM的中间方式。

kinit -S kadmin/admin xianglei/admin@EXAMPLE.COMxianglei/admin@EXAMPLE.COM's password: Encryption type arcfour-hmac-md5(23) used for authentication is weak and will be deprecatedkadminkadmin> ?stash, kstash        stashdump        dump [dump-file]od-dump        od-dump [dump-file]init        init realm...load        load filemerge        merge fileadd, ank, add_new_key        add principal...passwd, cpw, change_password        passwd principal...delete, del, del_entry        delete principal...del_enctype        del_enctype principal enctype...add_enctype        add_enctype principal enctype...ext_keytab        ext_keytab principal...get, get_entry        get principal...rename        rename from tomodify        modify principalprivileges, privs        privilegeslist        list principal...verify-password-quality, pwq        verify-password-quality principal passwordcheck        check [realm]lock        lock unlock        unlock help, ?        help [command]exit, quit        exit

然后直接可以进kadmin了,相当于直接用kadmin.local方式。


然后聊一下在Mac下做Kerberos相关C语言开发。起因是因为甲方爸爸购买的Cloudera 企业版快到期了,爸爸说:儿子你技术实力这么强,加上中美贸易战,爸爸兜里没钱买不起CDH企业版了,儿子要不你自己先维护吧。我们乙方儿子能说啥,咬咬牙,好吧。

不过爸爸那边的企业版里面有Kerberos,到期以后维护Hadoop倒还没啥,Kerberos keytab管理和分发功能企业版到期就不能用了,所以得尽快开发一套Kerberos的管理替代原来Cloudera Manager的这个功能。所以我打算用Python写了一个界面来自动化创建管理所有Hadoop相关的Keytab,但是Python虽然有不少kerberos的使用库,却没有admin管理的的库,最后终于找到了一个 PyPI 上的包,结果bug太多,好几年前发布的,也不维护了,编译各种报错,7装不了,ubuntu装不了。只好先用调用命令行的方式对付着,昨天有空把admin的C代码好好阅读修改了一下,重新发布了一个包。所以昨天就用到了Kerberos的C开发,所以我才吐槽Mac垃圾,啥源码都没有,然后还他妈不兼容MIT。gcc还得单装,默认是clang。


好吧,前面已经把brew安装的动态库和include头文件做了软链到/usr/local/lib和/usr/local/include了,然后修改过的源码直接就可以编译了,但是由于调取Mac本身的动态库,所以管理员认证协议仍然不一样,所以在Mac下虽然可以编译通过,但使用时仍然会报Segment Fault,不过unbuntu,centos7等等其他linux发行版下的编译算是修好了。


对我这种码农来说,最好的开发环境不是Mac,也不是Windows,就给一破笔记本,装个ubuntu或者arch就太好了,软件开发得保证POSIX可移植性和兼容性啊。对于随便升级个什么系统补丁都能宕机的服务,我表示强烈鄙视。


扩展功能并修复bug后开源的 python-kadmV 代码放在github上面,相比于几年前发布的原版,除了修复了不少编译error,还增加了 principal 改名的功能和创建 keytab 的功能,完全使用C语言编写的Python包,使用kerberos原生库编译安装,再也无需subprocess调用命令行了。


我自己觉得改完了,相对原版功能还是比较强大的,可以直接在python里addprinc, delprinc, listprincs, renprinc, ktadd, 对于principal可以get和set各种属性,比如重置密码,设置随机密码,设置过期时间等等,基本跟直接用kadmin命令行差不多了。我原来封装的调用命令行的kadmin类已经完全用这个包替代了,毫无压力。


同时也发布在了pypi上,需要的小朋友可以直接

pip install python-kadmv


不过这篇博客里的经验可能除了python库,对于绝大多数人可能没什么用。绝大多数人都不会用到kerberos,甚至更不会去基于kerberos做开发,甚至更不会在Mac上做Kerberos开发。



Fuck Apple

开发 编译 文件 功能 配置 源码 管理 企业 命令 爸爸 儿子 方式 语言 没什么 代码 动态 原版 密码 年前 环境 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网科技未来 壹账通互联网科技 长亮科技互联网金融 互联网金融科技委员会 北京三清互联网科技 互联网科技寓意 南山科技园互联网公司有哪些 互联网科技产业特征 呼和浩特新华互联网科技学院 天津腾达互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 深圳艾果互联网通讯科技 卓翼科技产业互联网合作 中国互联网有什么科技 电子商务与互联网科技的关系 互联网营销推广黑科技 互联网领先科技成果宣传视频 互联网科技企业文化 科技发展第三阶段互联网时代 互联网科技工作委员会副主任毛军 互联网科技公司华为 互联网科技巨头监管 上海万想互联网科技 团飞科技与伯堂互联网服务平台 世界互联网科技公司市值排名 浙江互联网科技研学营 无锡工业互联网科技有限公司 上海科技产业互联网平台 陕西彩京云互联网科技有限公司
0