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