Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
king1688888888
V2EX  ›  Linux

请教在 Linux 下编译安装 OpenSSH 相关问题

  •  
  •   king1688888888 · Jan 11, 2020 · 6341 views
    This topic created in 2338 days ago, the information mentioned may be changed or developed.
    新手刚接触 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 在本机可以正常运行,版本如下:

    [root@node1 ~]# ssh -V
    OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019

    [root@node1 ~]# 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)
    26 replies    2020-01-21 07:11:48 +08:00
    codehz
        1
    codehz  
       Jan 11, 2020
    又见编译安装大法。。。。
    0202 年了,什么发行版没有 openssh
    zhao305149619
        2
    zhao305149619  
       Jan 11, 2020
    应该都有发行版吧,把这个依赖写上去,通过 repo 直接拉依赖啊
    king1688888888
        3
    king1688888888  
    OP
       Jan 11, 2020
    @codehz 请教 RHEL6/CentOS6 下的 OpenSSH 8.1p1 最新版的 rpm 在哪里获取,非常感谢。我暂时只看到官方在更新 5.3 版本,就是小版本号在升级。
    dream4ever
        4
    dream4ever  
       Jan 11, 2020
    @king1688888888 之前研究过类似问题,当时想在 CentOS 7 上升级 OpenSSH 和 OpenSSL,看到下面链接里的回复,强烈不建议大版本升级,于是作罢。

    https://forums.centos.org/viewtopic.php?t=54967
    king1688888888
        5
    king1688888888  
    OP
       Jan 11, 2020
    @dream4ever 谢谢分享。我情况是这样的,来单位检查安全的人就是一根筋难沟通,就是要看到 ssh -V 后,显示最新版本的 OpenSSH、OpenSSL 版本,我已经解释过官方在维护 5.3 这个大版本号。
    dream4ever
        6
    dream4ever  
       Jan 11, 2020
    @king1688888888 那就很麻烦了。不过能不能做个“假的” ssh -V 临时应付一下?
    prondtoo
        7
    prondtoo  
       Jan 11, 2020
    我们是除非有重大安全问题爆出来,当然软件马上会有通知,否则生产环境动都不给动。
    zhao305149619
        8
    zhao305149619  
       Jan 11, 2020
    我编译过大版本,有两个方法,可以修改版本信息欺骗过去
    z775781
        9
    z775781  
       Jan 11, 2020
    @king1688888888 只看 SSH -V 的版本,你可以编译的时候修改 ssh 为高版本,省事儿反正 5.3 的 ssh 也在维护,不怕有洞子什么的
    jinliming2
        10
    jinliming2  
       Jan 11, 2020 via iPhone
    试试:
    OpenSSH 的二进制文件,用 ldd 命令看一下依赖,然后把对应的所有依赖库都复制过去(印象中和二进制文件放在一起就可以优先加载?还是需要配个启动参数?不太记得了)
    注意的是,部分依赖是虚拟的,找不到的话应该可以跳过……
    还有就是依赖的动态库大部分都写的是个软链接的路径,记得找到原始文件……
    nicebird
        11
    nicebird  
       Jan 11, 2020
    静态编译+二进制发布。

    只要对面发行版一致一般没问题。
    Hconk
        12
    Hconk  
       Jan 11, 2020 via iPhone
    https://gist.github.com/Hconk/a3632f79f2c6db6a9d4c9a26856236c9

    用这个脚本把要用到的依赖拷到程序同目录一起打包发过去就行了。
    alphatoad
        13
    alphatoad  
       Jan 12, 2020 via iPhone
    Docker 吧,给自己多留几根头发
    maxwel1
        14
    maxwel1  
       Jan 12, 2020 via Android
    在有些情况下,只能通过编译源代码安装,比如服务器严禁了解外网,或者没有安装权限,这时候就只能选择编译安装。
    如果希望直接在另一台设备上使用,那么编译的时候--prefix 就不要选到系统相关的目录了,直接选一个自己用的目录比如~/test,安装完成后把 test 目录一起打包,拷贝到另一台设备后在另一台设备上设置一下环境变量。
    关于用到的动态库的问题,参考 10 楼的方法吧,能不能用看运气。
    king1688888888
        15
    king1688888888  
    OP
       Jan 12, 2020
    @nicebird 我就是想了解静态编译是怎么做,请大神解惑。OpenSSL 1.1.1d 编译出来的静态库是 libcrypto.a,不知道怎么才能把它“固化”到 ssh 和 sshd 这两个程序里。
    james122333
        16
    james122333  
       Jan 12, 2020
    你的作法是对的 只是不要指定 prefix
    了解越多越知道预设永远不够 不够极限
    zhao305149619
        17
    zhao305149619  
       Jan 13, 2020
    @maxwel1 严禁外网也是可以离线编译后再安装的,了解一下 RPM 包的编译吧,会把 buildrequire 和 installrequire 写的很清楚.
    maxwel1
        18
    maxwel1  
       Jan 13, 2020 via Android
    @ maxwel1 严禁外网也是可以离线编译后再安装的,了解一下 RPM 包的编译吧,会把 buildrequire 和 installrequire 写的很清楚.

    不清楚你有没有在离线服务器上安装过软件 。服务器跟你本地环境都不一样,rpm 的依赖不一样,根本不是执行几个命令就可以的,除了 home 其他目录都没有写权限,怎么装?
    ps1aniuge
        19
    ps1aniuge  
       Jan 13, 2020
    俺觉得这不是一个编译问题,而是一个 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 个版本。小版本最新”,对不?
    king1688888888
        20
    king1688888888  
    OP
       Jan 13, 2020
    @ps1aniuge 朋友说到点子上了!!!我的情况是这样,单位又请了所谓的安全团队过来检查,这些人一过来就用绿盟漏洞扫描,SSH 5.3 我已经升级到官方最新的小版本,绿盟还是扫出了 SSH 漏洞。随后我就问怎样才算通过,他们就来一句 ssh -V,只要 SSH 版本和 SSL 版本是当前官网最新,就算通过(即便绿盟也扫到漏洞)!最后没办法,先去官方找 RPM 包,官方又没有,自己做 RPM 包的话,还不如自己编译,然后拷贝到别的机子上运行。瞎折腾了半天,算是全部通过检查了。
    king1688888888
        21
    king1688888888  
    OP
       Jan 13, 2020
    @maxwel1 谢谢指导。不研究了,直接拷贝动态库过去对方机子算了。本想着把静态库加到 SSH 程序里,谷歌了一圈还是不懂怎么实现,放弃了。
    ps1aniuge
        22
    ps1aniuge  
       Jan 14, 2020
    SSH5.3 已经升级到官方最新的小版本,绿盟还是扫出了 SSH 漏洞。---------------都扫出了什么洞? cve 是多少?拿着这个到官方去问,你只需要带节奏;)让他俩去 pk。
    ps1aniuge
        23
    ps1aniuge  
       Jan 14, 2020
    随着 linux 被挂马,被挖矿,被勒索增多。快过年之前,广大 it 安全督察人员(信息部锦衣卫)行动起来了,我很欣慰。还有人讨厌 win 每月更新补丁么?
    julyclyde
        24
    julyclyde  
       Jan 15, 2020
    新手不要编译安装
    新手不要用旧版 centos6
    新手不要接历史遗留系统
    iceecream
        25
    iceecream  
       Jan 20, 2020
    楼主。。。。你这样编译,丢失了一个功能,就是 hosts.deny 和 hosts.allow 的二个功能。
    所以,吧 5.3 升级最新的小版本吧。没什么漏洞的,绿盟那些,都是看大版本的。。。
    defunct9
        26
    defunct9  
       Jan 21, 2020 via iPhone
    又见被各种检查折磨的运维。
    pci、央行、四大、等保。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2879 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 04:12 · PVG 12:12 · LAX 21:12 · JFK 00:12
    ♥ Do have faith in what you're doing.