웹사이트 검색

Rocky Linux 9 서버를 최신 상태로 유지하는 방법


소개

이 튜토리얼에서는 Rocky Linux 9 서버 스택을 최신 상태로 유지하기 위한 몇 가지 모범 사례를 살펴봅니다. 네트워크 보안 강화와 마찬가지로 향후 개입 없이 서버가 계속해서 안전하게 작동하도록 하기 위해 취할 수 있는 많은 단계가 있습니다.

자동으로 구성된 것 외에도 대부분의 Rocky Linux 서버에 적용할 수 있는 많은 도구와 구성이 있습니다. 자체 서버 관리를 수행하는 경우 모든 환경을 수동으로 패치하는 것은 매우 혼란스럽고 오류가 발생하기 쉽습니다.

이 자습서에서는 다음을 다룹니다.

  • 응용 프로그램 관리 모범 사례에 따라 정상적인 재부팅을 테스트하여 유지 관리 업데이트로 인한 합병증을 최소화합니다.
  • 컴퓨터에서 실행 중인 대부분의 패키지 및 라이브러리에 대한 자동 업데이트 구성
  • 실시간 커널 패치 및 커널 업데이트 관련 기타 모범 사례

전제 조건

  • Sudo 권한이 있는 Rocky Linux 9 서버 및 루트가 아닌 사용자. Rocky Linux 9 가이드로 초기 서버 설정에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.

1단계 – 애플리케이션 관리를 위한 모범 사례 따르기

자동 업그레이드를 위한 서버 구성의 기본 부분은 서버에서 실행 중인 모든 응용 프로그램이 계획되지 않은 중단 시간이나 재부팅 후 올바르게 다시 시작할 수 있도록 하는 것입니다. Linux 패키지 관리자는 필요한 유지 관리에 추가 오버헤드가 발생하지 않도록 백그라운드에서 중단 없이 실행되도록 설계되었습니다. 그럼에도 불구하고 적절한 업데이트 전략이 없는 가장 일반적인 이유 중 하나는 서버가 다시 시작된 후 어떻게 작동할지에 대한 우려입니다.

가능한 경우 스택의 애플리케이션은 Rocky Linux를 비롯한 대부분의 최신 Linux 배포판에서 시스템화되는 서버의 초기화 시스템에서 관리해야 합니다. Systemd는 실행 중인 서비스와 상호 작용하고 필요에 따라 자동으로 다시 시작하기 위한 systemctl 명령을 제공합니다. 패키지 관리자를 통해 설치되고 백그라운드에서 실행되도록 설계된 거의 모든 소프트웨어는 시스템 서비스와 구성 단위 파일을 모범 사례로 자동 제공해야 합니다.

자체 소프트웨어 또는 Git 리포지토리에서 배포된 소프트웨어를 실행할 때 자체 단위 파일을 작성하여 systemd와 통합하는 것은 나쁜 생각이 아닙니다. 가벼운 대안으로 @reboot 구문이 있는 cron 스케줄러와 같은 도구를 사용하는 것이 좋습니다.

구성이 완료되면 재부팅을 통해 테스트해야 합니다. sudo shutdown now -r를 실행하여 재부팅할 수 있습니다. 그러면 실행 중인 프로세스가 완전히 중지되고 즉시 재부팅됩니다. 지금 대신 시간을 hh:mm 또는 지금부터 분 단위로 지정하여 나중에 재부팅을 예약할 수도 있습니다. 프로덕션 배포는 일반적으로 계획되지 않은 중단 후 사용자의 주의가 필요하지 않으며 필요한 모든 서비스 및 엔드포인트가 자동으로 백업되어야 합니다.

이제 유지 관리 재부팅을 통해 환경이 지속되는 데 문제가 없음을 확인했으므로 다음 단계에서는 자동 업그레이드를 예약하는 방법을 알아봅니다.

2단계 – 자동 업그레이드 구성

Rocky의 패키지 관리자인 dnf에는 전체 시스템 업그레이드를 수행하는 두 가지 주요 방법이 있습니다. 패키지를 지정하지 않고 dnf upgrade를 실행하여 시스템의 모든 패키지를 업그레이드할 수 있습니다. 또한 dnf upgrade-minimal을 실행하여 모든 패키지를 최신 버그 수정 또는 보안 패치 릴리스로만 업그레이드할 수 있습니다. 이렇게 하면 잠재적인 중단 변경 업스트림을 피하면서 필요한 유지 관리를 수행할 수 있습니다. dnf 설명서에서 dnf 명령에 대한 자세한 내용을 읽을 수 있습니다.

Rocky는 또한 dnf-automatic이라는 고유한 도구를 제공하여 서버에 대한 보안 패치 및 기타 필수 업그레이드를 자동으로 검색하고 설치합니다. dnf를 사용하여 설치할 수 있습니다.

  1. sudo dnf install dnf-automatic -y

dnf-automatic은 설치 후 자동으로 활성화되지 않습니다. 대신 Systemd에 등록하여 동작을 사용자 지정할 수 있는 여러 가지 서비스를 제공합니다. 이것들은:

  • dnf-automatic – 이 서비스는 /etc/dnf/automaticdnf-automatic 구성 파일 옵션을 따릅니다.
  • dnf-automatic-notifyonly – 사용 가능한 업데이트만 알리고 설치하지 않음으로써 구성 파일을 재정의합니다.
  • dnf-automatic-download – 이것은 패키지를 다운로드만 하고 설치하지 않음으로써 구성 파일을 재정의합니다.
  • dnf-automatic-install – 이것은 항상 다운로드된 패키지를 설치하여 구성 파일을 무시합니다.

이 자습서에서는 dnf-automatic-install 서비스를 활성화하지만 먼저 dnf-automatic 구성 파일을 한 가지 변경합니다. vi 또는 선호하는 텍스트 편집기를 사용하여 파일을 엽니다.

  1. sudo vi /etc/dnf/automatic
[commands]
#  What kind of upgrade to perform:
# default                            = all available upgrades
# security                           = only the security upgrades
upgrade_type = security
random_sleep = 0

# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60

# To just receive updates use dnf-automatic-notifyonly.timer

# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes

# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
…

이 파일에 있는 대부분의 옵션은 다양한 Systemd 서비스에서 제공하는 다양한 재정의에 해당합니다. 예외는 기본적으로 default로 설정되는 upgrade_type 옵션입니다. 자동 업그레이드(가장 능동적인 구성)를 구현하려는 경우 예기치 않은 기능 변경을 방지하기 위해 기본적으로 보안 업그레이드만 설치하는 것이 좋습니다. 위 예시와 같이 upgrade_type 값을 security로 변경한 후 파일을 저장하고 닫습니다. vi를 사용하는 경우 :x를 입력하여 저장하고 종료할 수 있습니다.

이제 systemctl을 사용하여 서비스를 활성화할 수 있습니다.

  1. sudo systemctl enable dnf-automatic-install.timer

systemctl을 사용하여 dnf-automatic-install 서비스가 올바르게 실행되고 있는지 확인할 수 있습니다.

  1. sudo systemctl status dnf-automatic-install
Output
● dnf-automatic-install.service - dnf automatic install updates Loaded: loaded (/usr/lib/systemd/system/dnf-automatic-install.service; static; vendor preset: disabled) Active: inactive (dead) Jul 14 21:01:03 droplet-name dnf-automatic[40103]: No security updates needed, but 154 updates available Jul 14 21:01:03 droplet-name systemd[1]: dnf-automatic-install.service: Succeeded. Jul 14 21:01:03 droplet-name systemd[1]: Started dnf automatic install updates.

일부 Systemd 서비스와 달리 dnf-automatic은 백그라운드에서 영구적으로 실행되는 서비스가 아니라 타이머로 구현됩니다. 즉, 서비스가 로드되고 로그에 성공적인 실행이 반영되는 한 활성: 비활성(죽음) 상태가 예상됩니다.

systemctl cat을 사용하여 해당 타이머의 세부 정보를 확인할 수 있습니다.

  1. sudo systemctl cat dnf-automatic-install.timer
Output
[Unit] Description=dnf-automatic-install timer # See comment in dnf-makecache.service ConditionPathExists=!/run/ostree-booted Wants=network-online.target [Timer] OnCalendar=*-*-* 6:00 RandomizedDelaySec=60m Persistent=true [Install] WantedBy=timers.target

기본적으로 서비스는 매일 약 6:00에 실행되도록 구성됩니다. 이 값을 변경할 필요가 없습니다.

이제 추가 개입 없이 서버의 모든 패키지가 필수 보안 업데이트를 받도록 하는 솔루션이 준비되어 있어야 합니다. 마지막 단계에서는 커널을 최신 상태로 유지하는 방법과 필요할 때 서버 재부팅을 처리하는 최선의 방법을 배웁니다.

3단계 – 커널 업데이트 및 실시간 패치

다른 패키지보다 덜 자주 시스템의 커널을 업데이트해야 합니다. Linux 커널에는 (거의) 실행 중인 모든 하드웨어 드라이버가 포함되어 있으며 대부분의 하위 수준 시스템 상호 작용을 담당합니다. 커널 업데이트는 일반적으로 해결해야 할 중요한 취약점이 있는 경우, 공개된 새 커널 기능을 사용해야 하는 경우 또는 커널이 너무 오래되어 누적된 버그 및 취약점의 위험이 더 큰 경우에만 필요합니다. 당신은 인식하지 못할 수 있습니다.

Linux 커널 업데이트를 자동으로 예약하는 보편적인 방법은 없습니다. 그 이유는 커널 업데이트에는 역사적으로 전체 시스템 재부팅이 필요했고 환경에 대한 가정 없이는 재부팅 예약이 불가능하기 때문입니다. 많은 서버가 가능한 한 연중무휴에 가까운 가용성을 제공할 것으로 예상되며 재부팅에는 알 수 없는 시간이 걸리거나 수동 개입이 필요할 수 있습니다.

대부분의 프로덕션 배포에서는 서비스 가용성을 보장하기 위해 이와 같이 재부팅과 관련하여 추가적인 복잡성이 필요합니다. 예를 들어 로드 밸런서를 사용하여 눈에 띄는 가동 중지 시간을 피하기 위해 개별적으로 순차적으로 재부팅되는 동안 수평 확장 배포에서 동일한 기능을 제공할 수 있는 서버로 트래픽을 자동으로 리디렉션할 수 있습니다.

커널 업데이트 중 서버 가동 시간을 보장하기 위해 라이브 패치 활성화

커널 업그레이드 중 다운타임을 방지하기 위해 라이브 패치라고 하는 Linux 커널의 기능을 사용할 수 있습니다. 이 기능을 사용하면 재부팅하지 않고 커널 업데이트를 구현할 수 있습니다. Rocky Linux 에코시스템에는 커널 라이브 패치를 위한 두 가지 주요 유지 관리자가 있습니다. Red Hat Enterprise Linux에 대한 라이브 패치를 제공하는 Red Hat의 kpatch와 대부분의 다른 주요 Linux 배포판 외에 Rocky Linux를 지원하는 KernelCare입니다. . 둘 다 사용하려면 등록이 필요합니다.

Red Hat Enterprise Linux의 라이센스 모델이 작동하는 방식으로 인해 Rocky Linux를 실행할 때 kpatch를 통해 라이브 커널 패치를 받을 수 없습니다. 전체 라이선스 Red Hat 인스턴스를 실행하지 않고는 커널 라이브 패치에 등록할 방법이 없습니다. 그러나 활성화하는 방법은 Rocky 또는 RHEL에서 동일합니다. 먼저 kpatch-dnf 패키지를 설치합니다.

  1. sudo dnf install kpatch-dnf

다음으로 dnf kpatch auto를 실행하여 실시간 패치 서비스에 자동으로 가입합니다.

  1. sudo dnf kpatch auto
Output
Last metadata expiration check: 0:00:06 ago on Thu 14 Jul 2022 09:12:07 PM UTC. Dependencies resolved. Nothing to do. Complete!

kpatch는 구성된 패치 서비스를 확인하고 아무것도 찾지 못하면 정상적으로 종료됩니다. Red Hat에서는 대신 라이센스 확인을 수행하고 Red Hat kpatch 서버에 등록합니다. Rocky에서는 대신 상업적 지원 옵션으로 KernelCare를 조사할 수 있습니다.

결론

이 자습서에서는 Rocky Linux 서버를 자동으로 업데이트하는 여러 전략을 살펴보았습니다. 패키지 리포지토리, 커널 업데이트 및 서버 재부팅 처리의 미묘한 차이도 배웠습니다. 이것들은 모두 DevOps와 더 광범위하게 서버를 사용하는 중요한 기본 사항이며 거의 모든 프로덕션 구성이 이러한 핵심 개념을 기반으로 구축됩니다.

다음으로 Docker 컨테이너 이미지를 자동으로 업데이트하기 위해 Watchtower를 사용하는 방법을 배울 수 있습니다.