우분투 라이브패치를 사용하여 서버 재부팅을 피하는 방법

서버를 관리하는 경우, 언젠가는 이 문제에 직면하게 됩니다: 운영 체제를 재부팅해야 하지만, 기계는 중단할 수 없는 중요한 서비스를 제공합니다.
그런데 왜 처음에 재부팅해야 할까요? apt-get upgrade 명령어를 실행한 후 모든 것이 잘 작동하는 것처럼 보입니다. 하지만 상황은 항상 그렇게 단순하지 않습니다. 시스템이 매번 업그레이드 후에도 기쁘게 계속 작동하더라도, Windows처럼 재부팅을 강제하지 않더라도, 여전히 재부팅이 필요할 수 있습니다.
예를 들어, 시스템의 핵심(커널)에서 취약점이 발견되면, 이를 패치하고 새로운 패키지로 서버에 푸시합니다. 패치된 커널을 설치한 후 일부 파일이 디스크에 기록되지만, 여전히 메모리(RAM)에 로드된 것은 이전 커널입니다.
이는 서버가 이전에 발견된 보안 구멍에 여전히 취약하다는 것을 의미합니다. 다른 프로세스, 데몬 및 서비스는 운영 체제를 재시작하지 않고도 다시 로드할 수 있습니다. 그러나 커널은 시스템의 핵심에 위치하며 다음 부팅 시에만 다시 로드할 수 있습니다.
또한 읽어보세요: 우분투 서버에서 사용자 추가하는 방법
우분투 라이브패치는 재부팅 없이 커널 보안 구멍을 닫을 수 있게 해줍니다. 이렇게 하면 보안을 손상시키지 않고 몇 주 또는 몇 달 동안 재부팅을 피하거나 연기할 수 있습니다.
라이브 패칭의 핵심 아이디어는 간단합니다: 함수가 취약할 때, 이를 다시 작성하고 결함을 제거한 후 메모리의 어딘가에 새로운 함수를 로드합니다. 함수가 호출될 때, 커널의 코드를 실행하는 대신 다시 작성된 코드로 호출을 리디렉션합니다.

하지만, 단순히 작동하는 것처럼 보이는 대부분의 것들과 마찬가지로, 구현 및 기술적 세부 사항은 그렇게 간단하지 않습니다.
우분투에서 라이브패치 설정하는 방법
이 페이지로 가서 우분투 원 계정을 만드세요. (이미 계정이 있다면 로그인하세요.) 이메일을 확인하고 계정 확인 링크를 클릭합니다. 다음으로, 캐노니컬 라이브패치 서비스 페이지를 방문합니다. “우분투 사용자”를 선택하고 토큰을 생성하는 버튼을 클릭합니다. 다음 페이지에서는 서버에 입력해야 할 정확한 명령어가 표시됩니다. 첫 번째 명령어 후에 다음을 입력하세요.
sudo snap install canonical-livepatch스냅 패키지가 완전히 설치될 때까지 몇 초 기다립니다. 완료되면 다음 그림에서 볼 수 있는 것과 유사한 결과를 얻을 수 있습니다.

마지막으로, 캐노니컬 페이지의 마지막 명령어로,
sudo canonical-livepatch enable#PASTE_YOUR_TOKEN_HERE서비스가 활성화되고 필요할 때마다 커널에 보안 패치를 자동으로 적용합니다. 이 과정에서 사용자의 입력은 필요하지 않습니다.
필요시 스냅 데몬 설치
드물게, 이전 섹션의 첫 번째 명령어가 실패할 수 있으며, 다음과 같은 오류 메시지가 표시됩니다: -bash: /usr/bin/snap: 그런 파일이나 디렉터리가 없습니다. 이 경우, 서버 제공자가 기본적으로 스냅 데몬 서비스를 포함하지 않는 우분투 운영 체제 이미지를 가지고 있다는 의미입니다. 다음 명령어로 설치하세요:
sudo apt update &&sudo apt install snapd이제 이전 섹션의 두 명령어를 다시 실행하세요.
또한 읽어보세요: dwm 경험을 개선하기 위한 5가지 유용한 패치
서버 업데이트 유지
라이브패치는 커널에 필요한 모든 보안 업데이트를 적용합니다. 그러나 시스템의 나머지 부분도 정기적으로 다음과 같은 명령어로 업그레이드해야 합니다:
sudo apt update &&sudo apt upgrade가능하다면 매주 또는 더 자주 수행해야 합니다. 중요한 시스템 패키지는 최신 보안 수정을 적용하기 위해 재시작해야 한다고 알릴 수 있습니다.

이들은 일반적으로 서비스에 중단을 주지 않는 우아한 재시작입니다. 예를 들어, 이 경우 SSH 데몬은 활성 SSH 세션을 중단하지 않고 재시작되었습니다.
다른 상황에서는 새로운 패치된 코드가 다시 로드되고 보안 수정이 적용되도록 서비스를 직접 재시작할 수 있습니다. 예를 들어, nginx 패키지가 업그레이드되었다고 알림을 받으면,
systemctl restart nginx.service명령어를 실행하여 nginx 데몬을 메모리에 다시 로드할 수 있습니다. 그렇지 않으면 패키지가 업그레이드되었더라도 여전히 이전의 취약한 코드로 실행될 수 있어 서버가 알려진 공격에 노출될 수 있습니다. 일부 패키지 업그레이드는 이를 자동으로 처리하지만, 다른 패키지는 그렇지 않습니다. 그래서 “apt upgrade”가 수행하는 작업에 주의를 기울이고 필요시 일부 서비스를 재시작하는 것이 좋은 습관입니다. 로그를 확인하여 자동으로 수행되었는지 확인할 수도 있습니다.
결론
보시다시피, 캐노니컬은 서버에서 이를 구현하는 것을 상당히 쉽게 만들었습니다. 커널과 관련하여, 귀하의 유지 관리 작업은 필요하지 않습니다. 할 수 있는 유일한 일은 가끔씩
canonical-livepatch status명령어를 실행하여 상태를 확인하는 것입니다.