新手刚接触 OpenSSH 源码编译安装,使用了最新的 OpenSSL 1.1.1d ,应该算是顺利完成编译吧。现在想把编译好的 OpenSSH 打个压缩包发给别人使用(操作系统发行版相同),但别人的机子上并没有安装 OpenSSL 1.1.1d ( libcrypto.so.1.1 ),所以不能解压即用。百度谷歌了一番大概说是动态库 so、静态库 a 的问题,但在操作上还是很多不明白,请教一下如何才能把 OpenSSL 1.1.1d ( libcrypto.a )“固化”到 OpenSSH 程序里,实现别人机子上也能直接使用?
编译 OpenSSL 的参数:
./config \
--prefix=/usr/local/openssl-1.1.1d \
--openssldir=/usr/local/openssl-1.1.1d/ssl -fPIC
编译 OpenSSH 的参数:
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl-1.1.1d \
--with-zlib=/usr/local/zlib-1.2.11 \
--with-pam \
--with-md5-passwords
编译后的 OpenSSH 在本机可以正常运行,版本如下:
[[email protected] ~]# ssh -V
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
[[email protected] ~]# ldd /usr/bin/ssh
linux-vdso.so.1 => (0x00007fff2e1e7000)
libcrypto.so.1.1 => /usr/local/openssl-1.1.1d/lib/libcrypto.so.1.1 (0x00007f05288f7000)
librt.so.1 => /lib64/librt.so.1 (0x00007f05286ee000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f05284ea000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f05282e7000)
libz.so.1 => /usr/local/zlib-1.2.11/lib/libz.so.1 (0x00007f05280cf000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f0527e97000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f0527c7d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f05278e9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f05276cb000)
/lib64/ld-linux-x86-64.so.2 (0x000055568f294000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f05274c8000)
又见编译安装大法。。。。
0202 年了,什么发行版没有 openssh
应该都有发行版吧,把这个依赖写上去,通过 repo 直接拉依赖啊
请教 RHEL6/CentOS6 下的 OpenSSH 8.1p1 最新版的 rpm 在哪里获取,非常感谢。我暂时只看到官方在更新 5.3 版本,就是小版本号在升级。
之前研究过类似问题,当时想在 CentOS 7 上升级 OpenSSH 和 OpenSSL,看到下面链接里的回复,强烈不建议大版本升级,于是作罢。
https://forums.centos.org/viewtopic.php?t=54967
谢谢分享。我情况是这样的,来单位检查安全的人就是一根筋难沟通,就是要看到 ssh -V 后,显示最新版本的 OpenSSH、OpenSSL 版本,我已经解释过官方在维护 5.3 这个大版本号。
那就很麻烦了。不过能不能做个“假的” ssh -V 临时应付一下?
我们是除非有重大安全问题爆出来,当然软件马上会有通知,否则生产环境动都不给动。
我编译过大版本,有两个方法,可以修改版本信息欺骗过去
只看 SSH -V 的版本,你可以编译的时候修改 ssh 为高版本,省事儿反正 5.3 的 ssh 也在维护,不怕有洞子什么的
试试:
OpenSSH 的二进制文件,用 ldd 命令看一下依赖,然后把对应的所有依赖库都复制过去(印象中和二进制文件放在一起就可以优先加载?还是需要配个启动参数?不太记得了)
注意的是,部分依赖是虚拟的,找不到的话应该可以跳过……
还有就是依赖的动态库大部分都写的是个软链接的路径,记得找到原始文件……
静态编译+二进制发布。
只要对面发行版一致一般没问题。
https://gist.github.com/Hconk/a3632f79f2c6db6a9d4c9a26856236c9
Docker 吧,给自己多留几根头发
在有些情况下,只能通过编译源代码安装,比如服务器严禁了解外网,或者没有安装权限,这时候就只能选择编译安装。
如果希望直接在另一台设备上使用,那么编译的时候--prefix 就不要选到系统相关的目录了,直接选一个自己用的目录比如~/test,安装完成后把 test 目录一起打包,拷贝到另一台设备后在另一台设备上设置一下环境变量。
关于用到的动态库的问题,参考 10 楼的方法吧,能不能用看运气。
我就是想了解静态编译是怎么做,请大神解惑。OpenSSL 1.1.1d 编译出来的静态库是 libcrypto.a,不知道怎么才能把它“固化”到 ssh 和 sshd 这两个程序里。
你的作法是对的 只是不要指定 prefix
了解越多越知道预设永远不够 不够极限
严禁外网也是可以离线编译后再安装的,了解一下 RPM 包的编译吧,会把 buildrequire 和 installrequire 写的很清楚.
@ maxwel1 严禁外网也是可以离线编译后再安装的,了解一下 RPM 包的编译吧,会把 buildrequire 和 installrequire 写的很清楚.
不清楚你有没有在离线服务器上安装过软件 。服务器跟你本地环境都不一样,rpm 的依赖不一样,根本不是执行几个命令就可以的,除了 home 其他目录都没有写权限,怎么装?
俺觉得这不是一个编译问题,而是一个 sshd 版本安全度的扯皮问题。问题如下:
1 centos6 中,最新的 openssl,openssh-server 包,是否已经不安全?是的话,哪里不安全?
2 1 centos6 中,最新的 openssl,openssh-server 包,对比 ssh-server 8.1p1 ,是否更不安全?即这两个哪个更安全?
我建议楼主把这两个问题,贴到 centos 官方,让官方人员解答下。有了结论后,再进行更新与否。
============================
阶段 2:
假设得到的结论是应该更新到最新版。
但你自己编译更新后,出现漏洞咋办?没经过大规模测试,出现问题咋办?谁负责?
这里我主要说的呃是:
自定义的新软件,和旧系统,隐藏的不匹配。
比如构造一个错误,就可以绕过 sshd。
即便没有这个错误,新软件用了后,很卡顿,咋办?谁负责?
============================
额外想和大家讨论这个问题:
1 排除发行版自带的 sshd 包不谈,只说 openssh 官方的包。
2 用啥版本才能让 sshd 更安全?一般来讲大版本落后 1---2 个版本。小版本最新。这个策略对 openssh 管用么?
我看貌似 openssh 官方只更新大版本,而不更新小版本。
也就是说,openssh 官方的版本升级只有 1 条路线。而不是多版本同时维护。
你没办法这样用“大版本落后 1---2 个版本。小版本最新”,对不?
朋友说到点子上了!!!我的情况是这样,单位又请了所谓的安全团队过来检查,这些人一过来就用绿盟漏洞扫描,SSH 5.3 我已经升级到官方最新的小版本,绿盟还是扫出了 SSH 漏洞。随后我就问怎样才算通过,他们就来一句 ssh -V,只要 SSH 版本和 SSL 版本是当前官网最新,就算通过(即便绿盟也扫到漏洞)!最后没办法,先去官方找 RPM 包,官方又没有,自己做 RPM 包的话,还不如自己编译,然后拷贝到别的机子上运行。瞎折腾了半天,算是全部通过检查了。
谢谢指导。不研究了,直接拷贝动态库过去对方机子算了。本想着把静态库加到 SSH 程序里,谷歌了一圈还是不懂怎么实现,放弃了。
SSH5.3 已经升级到官方最新的小版本,绿盟还是扫出了 SSH 漏洞。---------------都扫出了什么洞? cve 是多少?拿着这个到官方去问,你只需要带节奏;)让他俩去 pk。
随着 linux 被挂马,被挖矿,被勒索增多。快过年之前,广大 it 安全督察人员(信息部锦衣卫)行动起来了,我很欣慰。还有人讨厌 win 每月更新补丁么?
新手不要编译安装
新手不要用旧版 centos6
新手不要接历史遗留系统
楼主。。。。你这样编译,丢失了一个功能,就是 hosts.deny 和 hosts.allow 的二个功能。
所以,吧 5.3 升级最新的小版本吧。没什么漏洞的,绿盟那些,都是看大版本的。。。
又见被各种检查折磨的运维。
pci、央行、四大、等保。