무엇을 할 것인가
- Ubuntu 16.04에 unattended-upgrades 설치
- unattended-upgrades 구성 파일 편집 및 보안 업그레이드만 허용하도록 설정
- 자동 업데이트 활성화(주기적 패키지 목록 갱신, 자동 다운로드 등)
- 업데이트 로그 및 알림 확인
전제 조건
- Ubuntu 16.04 서버
- 루트 권한
1단계 - Ubuntu 16.04에 unattended-upgrades 설치
먼저 시스템에 ‘unattended-upgrades’ 패키지를 설치합니다. 이 패키지는 Ubuntu 공식 저장소에 있습니다. SSH로 서버에 로그인하세요.
ssh root@hakase-labs
저장소 정보를 갱신한 뒤 패키지를 설치합니다.
sudo apt update
sudo apt install unattended-upgrades
설치가 완료되면 ‘/etc/apt/apt.conf.d’ 디렉터리의 설정 파일을 편집합니다.
2단계 - unattended-upgrades 구성
unattended-upgrades의 주요 설정 파일은 ‘/etc/apt/apt.conf.d/50unattended-upgrades’입니다. 이 파일에서 자동 업그레이드 대상(origin), 블랙리스트(업데이트 제외 패키지), 알림 및 재부팅 동작을 정의합니다.
cd /etc/apt/apt.conf.d/
vim 50unattended-upgrades
업그레이드 종류 정의
보안 패치만 자동 적용하려면 ‘Allowed-Origins’ 블록에서 보안 항목만 활성화합니다. 예시:
Unattended-Upgrade::Allowed-Origins {
// "${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// "${distro_id}ESM:${distro_codename}";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
블랙리스트 패키지
업데이트에서 제외할 패키지를 지정할 수 있습니다. 예를 들어 ‘vim’, ‘mysql-server’, ‘mysql-client’를 제외하려면:
Unattended-Upgrade::Package-Blacklist {
"vim";
"mysql-server";
"mysql-client";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};
블랙리스트는 특정 패키지가 자동 업데이트로 인해 서비스 중단을 초래할 위험이 있을 때 사용합니다.
추가 설정: 이메일 알림, 자동 정리, 자동 재부팅
- 이메일 알림: 업데이트 결과를 루트(root)에게 보내려면 아래 줄의 주석을 제거하고 필요하면 주소를 수정합니다.
Unattended-Upgrade::Mail "root";
참고: 시스템에 메일 전송 에이전트(MTA)가 필요합니다. 예: sendmail 또는 mailutils.
sudo apt install -y sendmail
- 사용하지 않는 의존성 자동 제거:
Unattended-Upgrade::Remove-Unused-Dependencies "true";
- 필요 시 자동 재부팅 허용:
Unattended-Upgrade::Automatic-Reboot "true";
- 자동 재부팅 시간 지정(예: 자정):
Unattended-Upgrade::Automatic-Reboot-Time "00:00";
설정을 저장하고 편집기를 종료합니다.
3단계 - 자동 업데이트 활성화
주기적으로 패키지 목록을 업데이트하고 업데이트 가능한 패키지들을 다운로드하도록 하려면 ‘/etc/apt/apt.conf.d/20auto-upgrades’ 파일을 생성·편집합니다.
cd /etc/apt/apt.conf.d/
vim 20auto-upgrades
아래와 같이 설정하세요:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "3";
APT::Periodic::Unattended-Upgrade "1";
설명:
- Update-Package-Lists: 1이면 매일 패키지 목록 갱신(0은 비활성)
- Download-Upgradeable-Packages: 1이면 업그레이드 가능한 패키지 자동 다운로드
- AutocleanInterval: 캐시에서 오래된 패키지를 X일마다 자동 정리
- Unattended-Upgrade: 1이면 unattended-upgrades 실행
이제 보안 업데이트가 자동으로 내려받아지고 설치됩니다.
4단계 - 업데이트 확인
unattended-upgrades 로그 확인
로그는 ‘/var/log/unattended-upgrades’에 저장됩니다.
cd /var/log/unattended-upgrades
ls -lah
주요 로그 파일:
- unattended-upgrades-dpkg.log — 패키지 설치/제거 관련 dpkg 작업 로그
- unattended-upgrades.log — 업데이트 목록, 블랙리스트, 에러 메시지 등
- unattended-upgrades-shutdown.log — 셧다운/재부팅 관련 로그
로그인 시 업데이트 알림
SSH로 로그인하면 보안 업데이트 전후로 알림 메시지가 표시됩니다.
업데이트가 완료되면 다음과 같은 메시지가 표시됩니다.
이메일 알림 확인
루트 메일을 확인하려면:
cd /var/mail/
cat root
이메일에는 블랙리스트 패키지, 업데이트된 패키지, 제거된 패키지 등이 포함됩니다.
재부팅 확인
시스템 재부팅 이력 확인:
last reboot
재부팅 전후 결과를 비교해 자동 재부팅 동작을 검증하세요.
검증 방법과 테스트 케이스
- 수동 실행(드라이런): unattended-upgrade를 테스트 모드로 실행해 예상 동작을 확인합니다.
unattended-upgrade --dry-run --debug
- 강제 업데이트 다운로드 및 적용 테스트:
sudo apt update
sudo unattended-upgrade -v
(-v 옵션은 상세 출력)
- 블랙리스트 동작 검증: 블랙리스트에 넣은 패키지를 apt-mark hold로 보유한 뒤 업데이트가 적용되지 않는지 확인합니다.
sudo apt-mark hold vim
- 메일 전송 검증: sendmail 또는 설치한 MTA가 정상 동작하는지 확인하고 ‘/var/mail/root’에 이메일이 수신되는지 확인합니다.
운영 체크리스트 (역할별)
시스템 관리자(관리자):
- unattended-upgrades가 설치되어 있고 Allowed-Origins가 보안 업데이트로 한정되어 있는지 확인
- 이메일 알림이 정상 수신되는지 확인
- 자동 재부팅 정책(허용/불허) 결정 및 재부팅 시간 설정
- 중요한 서비스는 재부팅 전 롤백/스냅샷 준비
운영자(운영팀):
- 주간 로그 검토 및 실패 알림 대응
- 블랙리스트 요청 시 영향 분석 수행
- 패치 후 연관 서비스 상태 점검(데몬 재시작, 로그 확인)
개발팀/서비스 소유자:
- 업데이트로 인해 영향을 받을 수 있는 패키지 목록 제공
- 유지보수 시간 창 및 재부팅 허용 시간 협의
문제 해결 및 롤백 절차
- 업데이트 실패 발견 시 즉시 로그 확인:
less /var/log/unattended-upgrades/unattended-upgrades.log
less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
- dpkg 문제 해결:
sudo dpkg --configure -a
sudo apt-get -f install
- 특정 패키지 문제로 서비스 장애가 발생하면 해당 패키지를 보류(hold) 상태로 만들고 재시작:
sudo apt-mark hold 문제패키지
sudo systemctl restart affected-service
- 롤백 전략(사전 준비 필수):
- 가장 안전한 롤백은 업데이트 전의 VM/디스크 스냅샷을 복원하는 것입니다.
- LVM 스냅샷 또는 클라우드 인스턴스 스냅샷을 권장합니다.
- 패키지 수준의 롤백은 복잡하므로(의존성 문제) 스냅샷 복원이 우선입니다.
보안 및 운영 권장사항
- 중요한 프로덕션 시스템은 자동 재부팅 허용 전 스냅샷 또는 백업 정책을 마련하세요.
- 자동 업데이트는 보안 취약점 노출 시간을 줄이지만, 대형 변경(커널/서비스 변경)은 별도의 유보 정책을 고려하세요.
- 블랙리스트는 최소화하세요. 블랙리스트가 많아질수록 수동 관리 부담이 커집니다.
- 이메일 알림 외에도 중앙 로깅(예: ELK/Graylog)과 연동하면 배포 상황을 한눈에 관리할 수 있습니다.
대안적 접근 방식
- cron-apt: 오래된 대안으로 간단한 스크립트 기반 자동화에 사용됨. 세부 제어는 unattended-upgrades보다 적음.
- Landscape(Canonical): 대규모 서버 관리를 위한 상용/프리미엄 도구로 패치 스케줄링, 그룹별 정책 적용 가능.
- apticron: 업데이트 가능 패키지 목록을 이메일로 통지만 하는 경량 도구.
각 도구는 운영 규모와 요구사항(중앙관리, 승인흐름, 롤백 정책)에 따라 선택하세요.
운영 성숙도 레벨(간단한 체크)
- 레벨 0: 수동 업데이트(관리자가 직접 apt update/upgrade)
- 레벨 1: 자동 목록 갱신 + 수동 설치 알림(apticron 등)
- 레벨 2: unattended-upgrades로 보안 패치 자동 적용(이 가이드 수준)
- 레벨 3: 중앙관리(예: Landscape) + 승인 워크플로 + 자동 롤백/스냅샷 통합
목표는 서비스 요구에 따라 적절한 레벨을 선택하는 것입니다.
간단한 치트 시트(자주 쓰는 명령)
- 설치 및 수동 실행
sudo apt update
sudo apt install -y unattended-upgrades
sudo unattended-upgrade -v
- 드라이런(테스트)
unattended-upgrade --dry-run --debug
- 로그 확인
less /var/log/unattended-upgrades/unattended-upgrades.log
less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
- 특정 패키지 보류
sudo apt-mark hold <패키지명>
- 패키지 문제 해결
sudo dpkg --configure -a
sudo apt-get -f install
FAQ
자동 업데이트를 비활성화하려면?
‘/etc/apt/apt.conf.d/20auto-upgrades’에서 APT::Periodic::Unattended-Upgrade 값을 “0”으로 변경하고 저장하세요.
자동 재부팅을 완전히 막으려면?
‘50unattended-upgrades’에서 Unattended-Upgrade::Automatic-Reboot를 “false”로 설정하세요.
업데이트가 실패하면 어떻게 확인하나요?
/var/log/unattended-upgrades 디렉터리의 로그 파일과 dpkg 상태를 확인하고 dpkg –configure -a 및 apt-get -f install을 실행하세요.
요약
- unattended-upgrades는 Ubuntu 16.04에서 보안 패치 자동 적용을 구현하는 표준 방법입니다.
- 구성 파일에서 Allowed-Origins를 보안 항목으로 제한하고, 필요 시 블랙리스트와 자동 재부팅을 설정하세요.
- 로그, 이메일, 재부팅 이력을 통해 적용 결과를 검증하고, 사전 스냅샷 정책으로 안전한 롤백을 준비하세요.
중요: 자동 업데이트는 보안 유지에 유용하지만, 운영 환경의 특성에 따라 자동 재부팅과 블랙리스트 정책을 신중히 결정해야 합니다.