보안 갱신만, 자동으로, 확인 가능하게
이 실습은 VM 에서 돕니다
우분투 24.04 VM 한 대입니다. root 이고 systemd 와 커널 기능이 그대로 있습니다. 실습 파드에는 capability 가 없어 이 실습이 다루는 설정을 바꿀 수 없기 때문에 VM 으로 돕니다. 처음 뜨는 데 몇 분이 걸립니다. 세션이 끝나면 VM 은 통째로 사라지므로 남기고 싶은 것은 화면에서 복사해 두세요.
목표
보안 갱신만 자동으로 받도록 unattended-upgrades 를 설정합니다. 기능 갱신은 사람이 판단하게 남기고, 재부팅은 정해진 시각에만 하고, 무엇이 적용됐는지 로그로 확인합니다.
왜 중요한가
패치가 늦는 서버는 이미 공개된 취약점에 그대로 노출됩니다. 그렇다고 모든 갱신을 무턱대고 자동으로 받으면 기능 변경이 서비스를 깨뜨립니다. 균형점은 "보안 갱신은 빠르게 자동으로, 기능 갱신은 사람이 판단" 입니다. unattended-upgrades 의 Origins-Pattern 이 어느 묶음(보안/일반)을 자동으로 받을지 정합니다.
자동 갱신의 진짜 가치는 "확인할 수 있다" 는 데 있습니다. 무엇이 언제 적용됐는지 로그로 남지 않으면, 자동으로 됐는지 조용히 실패했는지 알 수 없습니다.
이 실습은 바깥 네트워크 대신 로컬 apt 저장소(준비 단계가 만든)를 씁니다. 보안 묶음과 일반 묶음에 패키지가 하나씩 올라와 있고, 설정이 보안 쪽만 집어 가는지를 봅니다. 설정과 판단은 실제 서버와 같습니다.
단계
- 밀려 있는 갱신을
/root/upd/01-pending.txt에 적습니다. Origins-Pattern으로 labhub-security 묶음만 대상으로 삼습니다.- 재부팅을 02:00 으로 정합니다.
- apt-daily-upgrade 타이머와 20auto-upgrades 를 켭니다.
- 무인 갱신을 지금 돌려 labhub-webd 를 1.1 로 올립니다.
- labhub-report 가 2.0 그대로인지
/root/upd/06-held.txt에 확인합니다. - 적용 로그를
/root/upd/07-log.txt에 남깁니다.
참고
apt-cache policy <패키지>로 후보 버전과 출처 묶음을,dpkg -l <패키지>로 설치 버전을 봅니다.- 지금 한 번 적용:
unattended-upgrade -v(인자 없이).--dry-run은 흉내만 냅니다. - 흔한 실수: Origins-Pattern 을 넓게 두어 기능 갱신까지 받는 것.
- 흔한 실수: 20auto-upgrades 를 0 으로 둔 채 타이머만 켜는 것. 타이머가 돌아도 아무것도 안 합니다.
지금 무엇이 밀려 있나
설치된 labhub-webd 와 labhub-report 의 현재 버전과, 저장소에 올라온 새 버전을 /root/upd/01-pending.txt 에 적으세요. 보안 묶음(labhub-security)과 일반 묶음(labhub-updates)에 각각 무엇이 있는지 보여야 합니다.
apt-cache policy <패키지> 는 설치된 버전과 후보 버전, 그리고 어느 묶음에서 왔는지 보여 줍니다. dpkg -l <패키지> 로 지금 버전을 봅니다.
보안 묶음만 집게 한다
/etc/apt/apt.conf.d/52labhub-security 에 Unattended-Upgrade::Origins-Pattern 을 두어 labhub-security 묶음(Suite)만 자동 갱신 대상으로 삼으세요. 일반 묶음(labhub-updates)은 포함하지 않습니다.
Origins-Pattern 은 "origin=Labhub,suite=labhub-security"; 처럼 적습니다. 우분투 기본 설정(50unattended-upgrades)의 Allowed-Origins 와 겹치지 않게 별도 파일에 둡니다. 묶음 이름은 Release 파일의 Suite 값입니다.
재부팅은 정해진 시간에만
같은 설정 또는 /etc/apt/apt.conf.d/52labhub-reboot 에, 재부팅이 필요하면 자동으로 재부팅하되 시각을 02:00 으로 정하세요(Automatic-Reboot "true", Automatic-Reboot-Time "02:00").
unattended-upgrades 는 커널 갱신처럼 재부팅이 필요한 경우를 압니다. 아무 때나 재부팅하면 서비스가 끊기므로 시각을 못박습니다. 두 줄 모두 Unattended-Upgrade:: 접두어를 씁니다.
자동으로 돌게 켠다
무인 갱신이 자동으로 돌도록 apt-daily-upgrade.timer 를 활성화하고, /etc/apt/apt.conf.d/20auto-upgrades 에 Update-Package-Lists 와 Unattended-Upgrade 를 "1" 로 두세요.
systemctl enable --now apt-daily-upgrade.timer 가 자동 실행을 켭니다. 20auto-upgrades 파일의 두 값이 0 이면 타이머가 돌아도 아무것도 하지 않습니다.
보안 갱신을 적용한다
무인 갱신을 지금 한 번 실제로 돌려 보안 패치를 적용하세요. labhub-webd 가 1.1 로 올라가야 합니다. 결과를 /root/upd/05-applied.txt 에 적습니다.
unattended-upgrade 를 인자 없이 돌리면 실제로 적용합니다(--dry-run 은 흉내만 냅니다). 적용 뒤 dpkg -l labhub-webd 로 버전을 확인하세요.
일반 갱신은 그대로 두었는가
일반 묶음의 labhub-report 가 아직 2.0 인지(자동 갱신이 건드리지 않았는지) 확인해 /root/upd/06-held.txt 에 적으세요. 2.0 이면 held, 2.1 이면 upgraded 를 적습니다.
보안만 자동으로 받기로 했으니 기능 갱신은 사람이 판단해 적용해야 합니다. dpkg -l labhub-report 로 버전을 봅니다. 여기서 2.1 이 돼 있다면 Origins-Pattern 이 너무 넓습니다.
결과를 확인할 수 있게 남긴다
무인 갱신 로그에서 이번에 적용된 패키지를 확인해 /root/upd/07-log.txt 에 남기세요. labhub-webd 가 적용 목록에 있어야 합니다.
unattended-upgrades 는 /var/log/unattended-upgrades/unattended-upgrades.log 에 무엇을 했는지 남깁니다. 자동 갱신의 가치는 '됐는지 확인할 수 있다' 는 데 있습니다 — 로그가 없으면 안 된 것과 구별되지 않습니다.