리눅스 리뷰/Rocky Linux 8

Rocky Linux 8.10: OpenSSL 및 OpenSSH 최신 버전 설치 가이드

StWorld 2025. 4. 20. 23:48
728x90
반응형

이 가이드는 Rocky Linux 8.10에서 OpenSSL 3.0.8과 OpenSSH 9.3p2를 설치하는 방법을 설명합니다. 또한, 기본 제공 버전의 취약점과 최신 버전으로 업그레이드해야 하는 이유를 다룹니다.

1. Rocky Linux 8.10의 기본 버전 및 취약점

1.1 OpenSSL 1.1.1k

  • 버전: openssl-1.1.1k-14.el8
  • 취약점:
    • CVE-2023-5363: 암호 키 및 IV 길이 처리 문제. 패치됨.
    • SHA-1 사용: 안전하지 않은 해시 함수 지원.
    • 제한된 프로토콜: TLS 1.3 지원하지만 최신 알고리즘 미지원.
    • 호환성: 최신 애플리케이션에서 API 문제 발생 가능.
  • 최신 버전 필요성: OpenSSL 3.0.8은 SHA-1 제한, TLS 1.3 최적화, FIPS 140-3 지원 준비.

1.2 OpenSSH 8.0p1

  • 버전: openssh-8.0p1-24.el8
  • 취약점:
    • CVE-2024-6387: 영향 없음 (8.5p1~9.8p1에 해당).
    • CVE-2023-38408: 원격 코드 실행 가능성. 패치됨.
    • 기능 제한: SFTP 전환, Unix 소켓 포워딩 등 최신 기능 미지원.
  • 최신 버전 필요성: OpenSSH 9.3p2는 최신 취약점 패치, SFTP 프로토콜, 보안 강화 제공.

2. OpenSSL 3.0.8 설치

시스템 OpenSSL과 공존하도록 커스텀 RPM을 빌드하여 설치합니다.

2.1 준비

dnf install -y gcc make zlib-devel perl-core perl-IPC-Cmd perl-Data-Dumper perl-Test-Simple rpm-build
mkdir -p ~/rpmbuild/{SPECS,SOURCES}
wget -P ~/rpmbuild/SOURCES https://www.openssl.org/source/openssl-3.0.8.tar.gz --no-check-certificate
        

2.2 openssl.spec 파일 생성

~/rpmbuild/SPECS/openssl.spec에 다음 내용을 저장:

Name:           openssl-3.0.8
Version:        3.0.8
Release:        1%{?dist}
Summary:        OpenSSL 3.0.8 암호화 라이브러리 및 도구

License:        Apache-2.0
URL:            https://www.openssl.org/
Source0:        https://www.openssl.org/source/openssl-%{version}.tar.gz

BuildRequires:  gcc, make, zlib-devel, perl-core, perl-IPC-Cmd, perl-Data-Dumper, perl-Test-Simple
Requires:       zlib

Provides:       openssl-3.0.8 = %{version}-%{release}
Conflicts:      openssl

%global _enable_debug_packages 0
%global _enable_debug_package 0
%global debug_package %{nil}

%description
OpenSSL은 암호화를 지원하는 툴킷입니다. 이 패키지는 FIPS 지원을 포함한 OpenSSL 3.0.8을 /usr/local/ssl/openssl-%{version}에 설치합니다.

%prep
%setup -q

%build
./config fips --prefix=/usr/local/ssl/openssl-%{version} --openssldir=/usr/local/ssl/openssl-%{version} shared zlib
make

%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

mkdir -p %{buildroot}/usr/bin
ln -sf /usr/local/ssl/openssl-%{version}/bin/openssl %{buildroot}/usr/bin/openssl-3.0.8

mkdir -p %{buildroot}/etc/ld.so.conf.d
echo "/usr/local/ssl/openssl-%{version}/lib64" > %{buildroot}/etc/ld.so.conf.d/openssl-%{version}.conf

mkdir -p %{buildroot}/etc/profile.d
cat > %{buildroot}/etc/profile.d/openssl-3.0.8.sh << EOF
export PATH=/usr/local/ssl/openssl-%{version}/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/ssl/openssl-%{version}/lib64:\$LD_LIBRARY_PATH
EOF

%post
ldconfig

%files
%license LICENSE.txt
/usr/local/ssl/openssl-%{version}/
/usr/bin/openssl-3.0.8
/etc/ld.so.conf.d/openssl-%{version}.conf
/etc/profile.d/openssl-3.0.8.sh
%doc CHANGES.md README.md

%changelog
* Sun Apr 20 2025 Your Name  - 3.0.8-1
- OpenSSL 3.0.8 최초 RPM 패키지
        

2.3 빌드 및 설치

rpmbuild -bb ~/rpmbuild/SPECS/openssl.spec
dnf install -y ~/rpmbuild/RPMS/x86_64/openssl-3.0.8-3.0.8-1.el8.x86_64.rpm
/usr/bin/openssl-3.0.8 version
        

예상 출력: OpenSSL 3.0.8 ...

3. OpenSSH 9.3p2 설치

OpenSSL 3.0.8에 링크된 OpenSSH 9.3p2를 설치합니다.

3.1 준비

dnf install -y gcc make zlib-devel pam-devel libselinux-devel
wget -P ~/rpmbuild/SOURCES https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
        

3.2 openssh.spec 파일 생성

~/rpmbuild/SPECS/openssh.spec에 다음 내용을 저장:

Name:           openssh
Version:        9.3p2
Release:        1%{?dist}
Summary:        OpenSSH 보안 셸 클라이언트 및 서버

License:        BSD
URL:            https://www.openbsd.org/openssh/
Source0:        https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz

BuildRequires:  gcc, make, zlib-devel, pam-devel, libselinux-devel, openssl-3.0.8
Requires:       zlib, pam, libselinux, openssl-3.0.8
Requires(pre):  shadow-utils

%global _enable_debug_packages 0
%global _enable_debug_package 0
%global debug_package %{nil}

%description
OpenSSH는 SSH 프로토콜의 무료 구현입니다. 이 패키지는 OpenSSL 3.0.8과 함께 컴파일된 OpenSSH 9.3p2를 /usr/local/ssh에 설치합니다.

%prep
%setup -q

%build
./configure --prefix=/usr/local/ssh \
            --with-privsep-path=/var/lib/sshd \
            --sysconfdir=/etc/ssh \
            --with-ssl-dir=/usr/local/ssl/openssl-3.0.8 \
            --with-crypto-libdir=/usr/local/ssl/openssl-3.0.8/lib64 \
            --with-crypto-includes=/usr/local/ssl/openssl-3.0.8/include \
            --with-zlib \
            --with-pam
make

%install
rm - Mansi rf %{buildroot}
make install DESTDIR=%{buildroot}

install -v -m755 contrib/ssh-copy-id %{buildroot}/usr/bin
install -v -m644 contrib/ssh-copy-id.1 %{buildroot}/usr/share/man/man1
install -v -m755 -d %{buildroot}/usr/share/doc/openssh-%{version}
install -v -m644 INSTALL LICENCE OVERVIEW README* %{buildroot}/usr/share/doc/openssh-%{version}

mkdir -p %{buildroot}/var/lib/sshd
chmod 700 %{buildroot}/var/lib/sshd

mkdir -p %{buildroot}/usr/sbin
mv %{buildroot}/usr/local/ssh/sbin/sshd %{buildroot}/usr/sbin/sshd_bak || true
ln -sf /usr/local/ssh/sbin/sshd %{buildroot}/usr/sbin/sshd
mkdir -p %{buildroot}/usr/bin
mv %{buildroot}/usr/local/ssh/bin/ssh %{buildroot}/usr/bin/ssh_bak || true
ln -sf /usr/local/ssh/bin/ssh %{buildroot}/usr/bin/ssh

mkdir -p %{buildroot}/etc/ssh
/usr/bin/ssh-keygen -A -f %{buildroot}
chmod 600 %{buildroot}/etc/ssh/ssh_host_*

touch %{buildroot}/etc/ssh/sshd_config
sed -i '/GSSAPI/d' %{buildroot}/etc/ssh/sshd_config

mkdir -p %{buildroot}/usr/lib/systemd/system
install -m644 /usr/lib/systemd/system/sshd.service %{buildroot}/usr/lib/systemd/system/sshd.service
sed -i "s|Type=.*|Type=simple|g" %{buildroot}/usr/lib/systemd/system/sshd.service
sed -i "s|ExecStart=.*|ExecStart=/usr/local/ssh/sbin/sshd -D|" %{buildroot}/usr/lib/systemd/system/sshd.service
if ! grep -q "EnvironmentFile=/etc/sysconfig/sshd" %{buildroot}/usr/lib/systemd/system/sshd.service; then
    sed -i "/\[Service\]/a EnvironmentFile=-/etc/sysconfig/sshd" %{buildroot}/usr/lib/systemd/system/sshd.service
fi

%post
if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then
    /usr/bin/ssh-keygen -A
    chmod 600 /etc/ssh/ssh_host_*
fi

systemctl daemon-reload
systemctl restart sshd || true

ldconfig

%postun
if [ $1 -eq 0 ]; then
    mv /usr/sbin/sshd_bak /usr/sbin/sshd || true
    mv /usr/bin/ssh_bak /usr/bin/ssh || true
fi

%files
%license LICENCE
/usr/local/ssh/
/usr/bin/ssh
/usr/bin/ssh-copy-id
/usr/sbin/sshd
/etc/ssh/
/var/lib/sshd/
/usr/share/man/man*/*
/usr/share/doc/openssh-%{version}/
/usr/lib/systemd/system/sshd.service
%config(noreplace) /etc/ssh/sshd_config
%dir /var/lib/sshd

%changelog
* Sun Apr 20 2025 Your Name  - 9.3p2-1
- OpenSSH 9.3p2 최초 RPM 패키지
        

3.3 빌드 및 설치

rpmbuild -bb ~/rpmbuild/SPECS/openssh.spec
dnf install -y ~/rpmbuild/RPMS/x86_64/openssh-9.3p2-1.el8.x86_64.rpm
/usr/bin/ssh -V
        

예상 출력: OpenSSH_9.3p2, OpenSSL 3.0.8 ...

4. 설치 후 확인

  • OpenSSL 확인:
    /usr/bin/openssl-3.0.8 version
  • OpenSSH 확인:
    /usr/bin/ssh -V
  • SSHD 서비스 상태:
    systemctl status sshd

5. 추가 보안 권장사항

  • SSH 포트 변경: /etc/ssh/sshd_config에서 Port 22를 다른 포트로 변경.
  • 루트 로그인 비활성화: PermitRootLogin no 설정.
  • 공개 키 인증 사용: PasswordAuthentication no 설정.
  • Fail2Ban 설치: 무차별 대입 공격 방지.

6. 참고 자료

반응형