Hướng dẫn cập nhật OpenSSH 9.8 khắc phục lỗ hổng trên CentOS 7.9

Bối cảnh và mục tiêu nâng cấp

Hệ thống máy chủ chạy CentOS 7.9 hiện tại đang đối mặt với rủi ro bảo mật nghiêm trọng liên quan đến CVE-2024-6387. Để mitigating rủi ro này, việc nâng cấp OpenSSH lên phiên bản 9.8 là bắt buộc. Quy trình dưới đây được thiết kế riêng cho môi trường CentOS 7.9 (mã phát hành 2009), đảm bảo tính tương thích và ổn định.

Trước khi thực hiện, hãy xác minh phiên bản hệ điều hành và phiên bản SSH hiện hành:

# Kiểm tra phiên bản CentOS
cat /etc/centos-release

# Kiểm tra phiên bản SSH hiện tại
ssh -V

Biện pháp an toàn và chuẩn bị môi trường

Quá trình nâng cấp SSH tiềm ẩn nguy cơ mất kết nối remote. Do đó, thiết lập một kênh quản lý dự phòng qua Telnet là bước cực kỳ quan trọng để phục hồi hệ thống nếu SSH thất bại.

1. Kích hoạt dịch vụ Telnet dự phòng

Cài đặt các gói cần thiết cho máy chủ và client Telnet:

yum install -y telnet-server telnet xinetd

Khởi động dịch vụ và đảm bảo chúng chạy ngay khi khởi động:

systemctl start telnet.socket
systemctl start xinetd
systemctl enable telnet.socket
systemctl enable xinetd

Điều chỉnh cấu hình PAM để cho phép root đăng nhập qua Telnet (cẩn trọng khi sử dụng):

vi /etc/pam.d/remote
# Tìm và comment dòng sau bằng cách thêm dấu # ở đầu
# auth required pam_securetty.so

Khởi động lại dịch vụ để áp dụng thay đổi:

systemctl restart xinetd
systemctl restart telnet.socket

Từ máy cục bộ, hãy thử kết nối thử qua cổng 23 để đảm bảo kênh dự phòng hoạt động:

telnet <địa_chỉ_ip_server> 23

2. Cài đặt công cụ biên dịch và thư viện phụ thuộc

Cần thiết lập đầy đủ các công cụ biên dịch và thư viện phát triển:

yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel \
pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers \
libedit-devel perl-IPC-Cmd wget tar lrzsz

Nâng cấp các thư viện nền tảng

OpenSSH 9.8 yêu cầu phiên bản OpenSSL mới nhất và zlib ổn định. Chúng ta sẽ biên dịch thủ công các thư viện này để tránh xung đột với gói hệ thống.

1. Cập nhật zlib

Tải và biên dịch zlib phiên bản 1.3.1:

export BUILD_DIR=/opt/build_src
mkdir -p $BUILD_DIR && cd $BUILD_DIR

wget https://www.zlib.net/zlib-1.3.1.tar.gz
tar -xzf zlib-1.3.1.tar.gz
cd zlib-1.3.1

./configure --prefix=/usr/local/zlib
make -j$(nproc)
make install

# Cấu hình đường dẫn thư viện
echo '/usr/local/zlib/lib' > /etc/ld.so.conf.d/zlib_custom.conf
ldconfig -v

2. Cập nhật OpenSSL

Phiên bản OpenSSL tối thiểu cần thiết là 1.1.1, tuy nhiên để đảm bảo tương thích lâu dài với OpenSSH 9.8, chúng ta sẽ sử dụng phiên bản 3.2.1.

Sao lưu các thành phần quan trọng trước khi thay đổi:

cp -av /etc/ssh /etc/ssh.original_backup
cp -av /usr/bin/openssl /usr/bin/openssl.original
cp -av /etc/pam.d /etc/pam.d.original
cp -av /usr/lib/systemd/system /usr/lib/systemd.system.original

Tiến hành tải và biên dịch OpenSSL:

cd $BUILD_DIR
wget https://www.openssl.org/source/openssl-3.2.1.tar.gz
tar -xzf openssl-3.2.1.tar.gz
cd openssl-3.2.1

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
make -j$(nproc)
make install

# Thay thế binary và liên kết thư viện
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

echo '/usr/local/openssl/lib64' > /etc/ld.so.conf.d/openssl_custom.conf
ldconfig -v

Xác minh phiên bản OpenSSL đã cập nhật:

openssl version -a

Triển khai OpenSSH 9.8

1. Gỡ bỏ phiên bản OpenSSH cũ

Loại bỏ các gói OpenSSH cũ được cài đặt qua yum để tránh xung đột:

rpm -qa | grep openssh
rpm -e --nodeps openssh-7.4p1-21.el7.x86_64
rpm -e --nodeps openssh-clients-7.4p1-21.el7.x86_64
rpm -e --nodeps openssh-server-7.4p1-21.el7.x86_64

# Dọn dẹp thư mục cấu hình cũ
rm -rf /etc/ssh/*

2. Biên dịch và cài đặt OpenSSH mới

Tải nguồn OpenSSH 9.8p1 và tiến hành biên dịch:

cd $BUILD_DIR
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
tar -xzf openssh-9.8p1.tar.gz
cd openssh-9.8p1

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords \
--with-pam --with-zlib --with-tcp-wrappers \
--with-ssl-dir=/usr/local/openssl/ --without-hardening

make -j$(nproc) && make install

3. Cấu hình quyền truy cập và dịch vụ

Đặt quyền bảo mật cho các khóa host:

chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key

Sao chép script khởi động và cấu hình tự động chạy:

cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

chkconfig --add sshd
chkconfig sshd on

Khôi phục lại file cấu hình đã sao lưu trước đó và điều chỉnh cho phép đăng nhập root:

cp /etc/ssh.original_backup/sshd_config /etc/ssh/sshd_config
cp /etc/pam.d.original/sshd /etc/pam.d/sshd

vi /etc/ssh/sshd_config
# Đảm bảo các dòng sau không bị comment
PermitRootLogin yes
PubkeyAuthentication yes

4. Khởi động và kiểm tra

Khởi động lại dịch vụ SSH và xác minh phiên bản:

systemctl restart sshd
systemctl status sshd

ssh -V

Thẻ: centos-7 openssh-upgrade openssl cve-2024-6387 linux-security

Đăng vào ngày 20 tháng 5 lúc 22:50