안녕하세요. VISION IDC 기술팀입니다.
이번 문서에서는 Ubuntu 22.04에서 보안 업데이트를 자동으로 설치하도록 unattended-upgrades를 설정하는 방법을 알아보겠습니다. 인터넷에 공개된 서버는 보안 패치가 늦어질수록 알려진 취약점에 노출될 가능성이 커지므로 정기적인 업데이트 정책을 마련하는 것이 중요합니다.
Ubuntu는 unattended-upgrades 패키지와 systemd 타이머를 이용해 보안 저장소의 업데이트를 자동으로 확인하고 설치할 수 있습니다. 아래에서는 설치 여부 확인, 일일 자동 실행 설정, 보안 저장소 범위 점검, 드라이런, 로그 확인과 원상복구 방법을 순서대로 설명합니다.
적용 환경
| 항목 | 내용 |
|---|---|
| 운영체제 | Ubuntu Server 22.04 LTS |
| 패키지 | unattended-upgrades |
| 설정 파일 | /etc/apt/apt.conf.d/20auto-upgrades, /etc/apt/apt.conf.d/50unattended-upgrades |
| 실행 타이머 | apt-daily.timer, apt-daily-upgrade.timer |
설정 전 확인사항
현재 운영체제 버전과 APT 저장소 상태를 먼저 확인합니다. 저장소 오류가 있으면 자동 업데이트를 활성화해도 패키지 목록을 갱신하거나 보안 패키지를 내려받을 수 없습니다.
cat /etc/os-release
sudo apt update
df -h
df -h /boot
VERSION_ID="22.04"가 확인되고 apt update가 오류 없이 완료되어야 합니다. 루트 파일시스템이나 /boot의 여유 공간이 부족하면 업데이트가 실패할 수 있으므로 디스크 사용량도 함께 점검합니다.
unattended-upgrades 설치
Ubuntu Server 설치 방식에 따라 패키지가 이미 설치되어 있을 수 있습니다. 다음 명령어로 상태를 확인합니다.
dpkg-query -W -f='${Status} ${Version}\n' unattended-upgrades
install ok installed가 표시되면 이미 설치된 상태입니다. 패키지가 없다면 다음 명령어로 설치합니다.
sudo apt update
sudo apt install -y unattended-upgrades
설치 후 실행 파일과 주요 설정 파일을 확인합니다.
command -v unattended-upgrade
ls -l /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/50unattended-upgrades
자동 보안 업데이트 활성화
/etc/apt/apt.conf.d/20auto-upgrades는 패키지 목록 갱신과 무인 업데이트 실행 주기를 제어합니다. 기존 파일이 있다면 먼저 백업합니다.
sudo cp -a /etc/apt/apt.conf.d/20auto-upgrades /root/20auto-upgrades.backup
다음 내용으로 설정 파일을 작성합니다. 값 1은 해당 작업을 매일 실행한다는 의미입니다.
sudo tee /etc/apt/apt.conf.d/20auto-upgrades > /dev/null <<'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF
APT가 설정값을 읽고 있는지 확인합니다.
apt-config dump | grep -E 'APT::Periodic::(Update-Package-Lists|Unattended-Upgrade)'
두 항목이 모두 "1"로 표시되면 일일 실행 설정이 적용된 것입니다. 실제 실행은 systemd 타이머가 담당합니다.
systemctl is-enabled apt-daily.timer apt-daily-upgrade.timer
systemctl list-timers apt-daily.timer apt-daily-upgrade.timer
두 타이머가 enabled로 표시되고 NEXT 열에 다음 실행 시간이 나타나는지 확인합니다. APT 타이머에는 시스템 부하 분산을 위한 임의 지연이 적용될 수 있으므로 매일 정확히 같은 시각에 실행되지 않을 수 있습니다.
보안 업데이트 저장소 범위 확인
자동으로 설치할 저장소 범위는 /etc/apt/apt.conf.d/50unattended-upgrades의 Unattended-Upgrade::Allowed-Origins 항목에서 결정됩니다.
grep -nA 25 'Unattended-Upgrade::Allowed-Origins' /etc/apt/apt.conf.d/50unattended-upgrades
Ubuntu 22.04에서는 일반적으로 Ubuntu 기본 출처와 jammy-security가 허용 목록에 포함됩니다. Ubuntu Pro가 활성화된 시스템은 ESM 보안 출처도 나타날 수 있습니다. 보안 업데이트만 자동 설치하려면 ${distro_codename}-updates, -proposed, -backports 항목을 임의로 활성화하지 않습니다.
보안 저장소 자체가 APT 소스에 등록되어 있는지도 확인합니다.
grep -RhsE '^[[:space:]]*deb .*jammy-security' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null
활성화된 jammy-security 항목이 표시되어야 합니다. 아무 결과도 나오지 않으면 저장소 설정이 누락되었거나 주석 처리되었을 수 있습니다.
설정 테스트와 작동 확인
드라이런으로 대상 패키지 확인
다음 명령어는 실제 패키지를 변경하지 않고 현재 설정에서 처리될 업데이트를 상세하게 확인합니다.
sudo unattended-upgrade --dry-run --debug
출력의 Allowed origins에 Ubuntu 22.04 보안 출처가 포함되는지 확인합니다. 설치할 보안 업데이트가 없다면 대상 패키지가 표시되지 않을 수 있으며 이는 오류가 아닙니다.
업그레이드 가능한 패키지 확인
sudo apt update
apt list --upgradable
apt list --upgradable에는 보안 업데이트뿐 아니라 일반 업데이트가 함께 나타날 수 있습니다. 자동 설치 대상은 앞서 확인한 허용 저장소 정책으로 결정됩니다.
즉시 실제 실행이 필요한 경우
sudo unattended-upgrade --debug
로그와 재부팅 확인
무인 업데이트의 상세 로그는 /var/log/unattended-upgrades/에 기록됩니다.
sudo tail -n 100 /var/log/unattended-upgrades/unattended-upgrades.log
sudo tail -n 100 /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
sudo journalctl -u apt-daily.service -u apt-daily-upgrade.service --since "7 days ago" --no-pager
apt-daily-upgrade.service가 현재 inactive (dead)로 보여도 항상 오류를 의미하지는 않습니다. 이 서비스는 타이머가 호출할 때 실행되고 작업 후 종료되는 일회성 서비스이므로 타이머 일정과 최근 로그를 확인해야 합니다.
커널이나 핵심 라이브러리 업데이트 후 재부팅이 필요한지 확인합니다.
if [ -f /var/run/reboot-required ]; then
cat /var/run/reboot-required
cat /var/run/reboot-required.pkgs 2>/dev/null
else
echo "현재 재부팅 요청 없음"
fi
기본 설정에서는 자동 재부팅이 활성화되어 있지 않습니다. 운영 서버의 예기치 않은 재부팅을 방지하려면 다음과 같이 명시적으로 비활성화할 수 있습니다.
sudo tee /etc/apt/apt.conf.d/52unattended-upgrades-local > /dev/null <<'EOF'
Unattended-Upgrade::Automatic-Reboot "false";
EOF
자주 발생하는 오류와 해결 방법
| 증상 | 가능한 원인 | 확인 및 해결 방법 |
|---|---|---|
Could not get lock 또는 Unable to acquire the dpkg frontend lock |
다른 APT 작업이 실행 중 | systemctl status apt-daily.service apt-daily-upgrade.service와 ps로 작업을 확인하고 완료될 때까지 기다립니다. 잠금 파일을 임의로 삭제하지 않습니다. |
| 드라이런에 설치 대상이 없음 | 이미 최신 상태이거나 허용된 보안 업데이트가 없음 | sudo apt update 후 업그레이드 목록과 드라이런의 Allowed origins를 점검합니다. |
| 타이머가 disabled 또는 masked | systemd 타이머가 수동으로 비활성화됨 | sudo systemctl unmask apt-daily.timer apt-daily-upgrade.timer 후 sudo systemctl enable --now apt-daily.timer apt-daily-upgrade.timer를 실행합니다. |
| 패키지 목록 갱신 실패 | DNS, 네트워크, 저장소 URL 또는 서명 문제 | sudo apt update의 실제 오류를 먼저 해결합니다. 서명 검증을 우회하거나 신뢰되지 않은 저장소를 허용하지 않습니다. |
| 설치가 중간에 실패함 | 중단된 dpkg 작업, 디스크 부족 또는 패키지 설정 오류 | df -h와 로그를 확인한 뒤 sudo dpkg --configure -a, sudo apt --fix-broken install을 순서대로 실행합니다. |
systemctl status apt-daily.service apt-daily-upgrade.service --no-pager
ps -ef | grep -E '[a]pt|[d]pkg|[u]nattended'
apt-config dump > /dev/null
sudo unattended-upgrade --dry-run --debug
자동 업데이트 비활성화 또는 원상복구
자동 업데이트를 중지하려면 공식 문서의 방식대로 두 값을 0으로 변경합니다.
sudo tee /etc/apt/apt.conf.d/20auto-upgrades > /dev/null <<'EOF'
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
EOF
앞에서 생성한 로컬 재부팅 설정을 제거하거나 백업 파일로 복원하려면 다음 명령어를 사용합니다.
sudo rm -f /etc/apt/apt.conf.d/52unattended-upgrades-local
sudo cp -a /root/20auto-upgrades.backup /etc/apt/apt.conf.d/20auto-upgrades
apt-config dump | grep -E 'APT::Periodic::(Update-Package-Lists|Unattended-Upgrade)'
자주 묻는 질문
자동 업데이트를 설정하면 모든 패키지가 자동으로 업그레이드되나요?
기본 정책에서는 허용된 Ubuntu 보안 출처의 업데이트가 중심입니다. 일반 업데이트, 제안 저장소, 백포트와 외부 저장소 패키지는 허용 목록에 포함되지 않으면 자동 설치되지 않습니다.
매일 정확히 같은 시간에 실행되나요?
반드시 그렇지는 않습니다. APT 타이머에는 임의 지연이 적용될 수 있으며 서버가 꺼져 있던 경우 다음 부팅 후 작업이 시작될 수 있습니다. 실제 일정은 systemctl list-timers로 확인합니다.
자동 업데이트 후 서버가 자동으로 재부팅되나요?
기본적으로 자동 재부팅은 활성화되어 있지 않습니다. /var/run/reboot-required를 확인한 뒤 유지보수 시간에 관리자가 재부팅하는 방식을 권장합니다.
Ubuntu Pro가 없어도 자동 보안 업데이트가 가능한가요?
가능합니다. Ubuntu 22.04 LTS의 표준 지원 범위에 포함되는 공식 보안 업데이트는 일반 저장소를 통해 받을 수 있습니다. Ubuntu Pro가 연결된 시스템에서는 활성화된 ESM 보안 업데이트가 추가로 허용될 수 있습니다.
공식 참고자료
- Ubuntu Server Documentation — Automatic updates
확인 내용: 설정 파일, 일일 실행 값, systemd 타이머, 허용 저장소, 로그와 재부팅 옵션 - Ubuntu Packages — unattended-upgrades 패키지 정보
확인 내용: Ubuntu 22.04 LTS용 자동 보안 업데이트 패키지 제공 여부 - Ubuntu — Ubuntu release cycle
확인 내용: Ubuntu 22.04 LTS의 표준 및 확장 보안 유지보수 기간 - Ubuntu Server Documentation — Security suggestions
확인 내용: 시스템 최신 상태 유지와 자동 보안 업데이트 패키지 사용 권장
자료 조회일:
마무리
이번 문서에서는 Ubuntu 22.04에서 unattended-upgrades를 이용해 보안 업데이트를 매일 자동으로 확인하고 설치하도록 설정하는 방법을 살펴봤습니다. 설정 후에는 드라이런 결과, systemd 타이머와 업데이트 로그를 함께 확인해야 실제 적용 상태를 정확하게 판단할 수 있습니다.
자동 업데이트는 보안 패치 누락을 줄이는 데 도움이 되지만 백업, 서비스 점검과 재부팅 관리를 대신하지는 않습니다. 운영 서버의 특성에 맞는 유지보수 절차를 마련하고 업데이트 결과를 지속적으로 확인하시기 바랍니다.
