mogdb openssl 兼容性问题分析
原作者:李华
1. 结论
MogDB是云和恩墨基于openGauss开源数据库进行定制、推出的企业发行版。此次XX生产上线的版本为mogdb 3.0.2,该版本目前我方兼容并且长期稳定运行的操作系统版本为Kylin V10 (x86_64) SP1 (基础版本),并且XXX前期的一系列的数据库测试都是基于Kylin V10 (x86_64)SP1基础版本上完成,此次生产环境上线前进行最新补丁升级给数据库稳定运行带来不确定性风险建议生产环境操作系统回退至Kylin V10 (x86_64) SP1基础版本。
Mogdb 麒麟版本汇总:
Kylin V10 SP1.0 推荐版本;
Kylin V10 SP 1.0+update推荐版本;
Kylin V10 SP 1.1推荐版本(相当于sp1.0+update);此次回退版本
Kylin V10 SP 1.1+update不推荐版本(sp2.0补丁回合1.1)。
2. 问题描述
操作系统由Kylin V10 (x86_64)SP1.1升级至最新补丁基之后部署后mogdb 发现ssh 命令无法使用,具体表现如下:
[root@kylin-n1-LH ~]# su - omm Last login: Sun Dec 11 18:39:02 CST 2022 on pts/0 [omm@kylin-n1-LH ~]$ ssh -V ssh: /data/mogdb/app/lib/libcrypto.so.1.1: version `OPENSSL_1_1_1f' not found (required by ssh)
复制
使用omm用户运行ssh 命令发现报错openssl 1_1_1f不存在,由于mogdb 发行版中存在大量的自由lib文件需要修改omm用户环境变量达到mogdb使用自带lib,而自带的lib libcrypto.so.1.1中没有包含ssh 所需要的1_1_1f版本。
[omm@kylin-n1-LH ~]$ ldd /usr/bin/ssh /usr/bin/ssh: /data/mogdb/app/lib/libcrypto.so.1.1: version `OPENSSL_1_1_1f' not found (required by /usr/bin/ssh) linux-vdso.so.1 (0x00007ffd4ebc3000) libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x000015078d364000) libcrypto.so.1.1 => /data/mogdb/app/lib/libcrypto.so.1.1 (0x000015078d09c000) libdl.so.2 => /lib64/libdl.so.2 (0x000015078d097000) libutil.so.1 => /lib64/libutil.so.1 (0x000015078d092000) libz.so.1 => /data/mogdb/app/lib/libz.so.1 (0x000015078d078000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000015078d03d000) libresolv.so.2 => /lib64/libresolv.so.2 (0x000015078d022000) libselinux.so.1 => /lib64/libselinux.so.1 (0x000015078cff6000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000015078cfa0000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x000015078ceba000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x000015078cea1000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000015078ce9b000) libc.so.6 => /lib64/libc.so.6 (0x000015078cce1000) libpthread.so.0 => /lib64/libpthread.so.0 (0x000015078ccc0000) /lib64/ld-linux-x86-64.so.2 (0x000015078d42c000) libsecurity.so.0 => /lib64/libsecurity.so.0 (0x000015078ccbb000) libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x000015078cc26000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x000015078cc14000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x000015078cc0d000)
复制
从ssh 依赖的Lib中可以看到目前调用的为mogdb自带的/data/mogdb/app/lib/libcrypto.so.1.1 文件。
通过分析Kylin V10 (x86_64)SP2升级之后的补丁包
[root@kylin-n1-LH ~]# rpm -qa | grep openssl openssl-pkcs11-0.4.10-1.ky10.x86_64 openssl-libs-1.1.1f-4.p09.ky10.x86_64 openssl-1.1.1f-4.p09.ky10.x86_64 [root@kylin-n1-LH ~]# rpm -qa | grep openssh openssh-8.2p1-9.p09.ky10.x86_64 openssh-server-8.2p1-9.p09.ky10.x86_64 openssh-clients-8.2p1-9.p09.ky10.x86_64
复制
升级后系统引入的为openssh openssl p09的补丁,而该补丁中ssh 依赖openssl 1_1_1f从如下信息可以看到:
[root@kylin-n1-LH ~]# strings /usr/bin/ssh | grep 1_1_1 OPENSSL_1_1_1 OPENSSL_1_1_1f-----升级后的ssh 依赖
复制
未升级的系统中openssh openssl 版本为p03
openssh-clients-8.2p1-9.p03.ky10.x86_64 openssh-server-8.2p1-9.p03.ky10.x86_64 openssh-8.2p1-9.p03.ky10.x86_64 openssl-pkcs11-0.4.10-1.ky10.x86_64 openssl-1.1.1f-4.p01.ky10.x86_64 openssl-libs-1.1.1f-4.p01.ky10.x86_64 也不依赖openssl 1_1_1f strings /usr/bin/ssh | grep 1_1 OPENSSL_1_1_0—未升级
复制
3. 风险
关于openssh openssl为系统比较基础的包,大量的工具以及功能会依赖该包,比如yum NetworkManager ssh 等命令,mogdb 自带的libcrypto.so.1.1基于 OpenSSL 1.1.1k版本增加了国密支持,麒麟openssh-8.2p1-9.p09.ky10.x86_64 openssl-1.1.1f-4.p09.ky10.x86_64 两个补丁的升级给数据库带来一些未知的风险,比如数据库调用ssl 的函数或者运维命令的调用都会依赖这两个包。根据客户对MogDB的POC和项目开发测试情况,对现在的操作系统版本没有经历严格测试,上线可能存在不确定性。而且上线部署还出现了部署依赖问题,并且还可能存在未识别的风险。
MogDB 是云和恩墨基于opengauss 企业级数据库