萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

RedHat 系統從源碼編譯升級 OpenSSL 與 OpenSSH 實戰筆記

背景:為何手動編譯?

Red Hat 系統預設的 OpenSSL/OpenSSH 版本隨發行版釋出而固定,若需修補最新 CVE 漏洞(如 Heartbleed、Logjam)或支援現代加密套件(ChaCha20-Poly1305、Ed25519),往往需自行編譯最新版本。本文記錄在 Red Hat 系列系統上從源碼編譯升級的標準流程。

第一階段:升級 OpenSSL

# 1. 準備建構環境
yum install -y gcc make perl zlib-devel

# 2. 下載並驗證源碼(以 3.0 系列為例,請依需求調整版本)
cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.0.12.tar.gz
wget https://www.openssl.org/source/openssl-3.0.12.tar.gz.sha256
sha256sum -c openssl-3.0.12.tar.gz.sha256

# 3. 解壓、配置、編譯、測試、安裝
tar xzf openssl-3.0.12.tar.gz
cd openssl-3.0.12
./config --prefix=/usr/local/openssl-3.0.12 \
         --openssldir=/usr/local/openssl-3.0.12/ssl \
         shared zlib-dynamic enable-ec_nistp_64_gcc_128
make -j$(nproc)
make test
make install

關鍵配置說明

  • --prefix:安裝根目錄,避免覆蓋系統預設版本(/usr/bin/openssl)
  • shared:產生動態庫 libssl.so/libcrypto.so,供 OpenSSH 連結
  • zlib-dynamic:使用系統 zlib,減小體積

建立動態庫連結與環境變數

echo "/usr/local/openssl-3.0.12/lib64" > /etc/ld.so.conf.d/openssl-3.0.conf
ldconfig

# 讓系統預設使用新版 openssl 指令
echo 'export PATH=/usr/local/openssl-3.0.12/bin:$PATH' > /etc/profile.d/openssl.sh
echo 'export LD_LIBRARY_PATH=/usr/local/openssl-3.0.12/lib64:$LD_LIBRARY_PATH' >> /etc/profile.d/openssl.sh
source /etc/profile.d/openssl.sh

第二階段:升級 OpenSSH(連結新版 OpenSSL)

# 1. 安裝建構依賴
yum install -y pam-devel libselinux-devel

# 2. 下載源碼
cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
tar xzf openssh-9.6p1.tar.gz
cd openssh-9.6p1

# 3. 配置(關鍵:指定 --with-ssl-dir 指向新版 OpenSSL)
./configure --prefix=/usr \
            --sysconfdir=/etc/ssh \
            --with-pam \
            --with-md5-passwords \
            --with-ssl-dir=/usr/local/openssl-3.0.12 \
            --with-zlib=/usr \
            --mandir=/usr/share/man

# 4. 編譯安裝
make -j$(nproc)
make install

配置參數解析

  • --prefix=/usr:覆蓋系統預設 /usr/bin/ssh 等二進制檔
  • --sysconfdir=/etc/ssh:配置檔位置不變
  • --with-ssl-dir:關鍵,指向剛編譯的 OpenSSL,確保 SSH 使用新加密庫
  • --with-pam:整合 PAM 認證(必要)

第三階段:驗證與服務重啟

# 檢查版本
ssh -V
# 輸出應顯示:OpenSSH_9.6p1, OpenSSL 3.0.12 ...

# 重啟 SSH 服務
systemctl restart sshd

# 測試連線
ssh -o PreferredAuthentications=publickey user@localhost

重要提醒

  1. 備份原配置:編譯前備份 /etc/ssh/sshd_config、/etc/ssh/ssh_config
  2. 防火牆/SELinux:確認埠口開放、SELinux 不阻擋新二進制檔
  3. 相容性測試:升級前在測試機驗證舊版用戶端(如舊版 PuTTY、Java SSH 庫)是否能連線
  4. 套件管理器衝突:手動編譯的套件不受 yum/dnf 管理,後續安全更新需自行重新編譯

結語

從源碼編譯雖增加維運負擔,但能第一時間部署最新加密標準與安全修補。生產環境建議先在預演環境完整驗證,再排程上線。

copyright © 萬盛學電腦網 all rights reserved