리눅스 리뷰/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. 참고 자료
반응형