개요
보안 업데이트는 시스템 안정성과 데이터 보호에 매우 중요합니다. 일반 권장사항은 배포된 보안 패치를 30일 이내에 적용하는 것입니다. 이 튜토리얼에서는 CentOS 7에서 yum-cron을 사용해 시스템과 패키지의 보안 업데이트를 자동으로 처리하는 방법을 다룹니다.
핵심 내용:
- yum-cron 설치 및 서비스 관리
- yum-cron 구성: 보안 업데이트만 적용
- 특정 패키지 제외 방법
- yum-cron 로그 확인 및 문제 해결
- 테스트 및 롤백 절차, 운영 체크리스트
중요 대상: CentOS 7 서버와 루트 권한
무엇을 기대할 수 있나
이 설정을 적용하면 시스템이 정기적으로(일간 기본) 보안 업데이트를 확인하고 필요한 패키지를 자동으로 다운로드 및 설치합니다. 알림은 이메일로 받을 수 있으며, 특정 패키지(예: kernel, mysql*)를 자동 업데이트에서 제외할 수 있습니다.
중요: 자동 업데이트는 편리하지만, 주요 서비스에 즉시 적용되는 업데이트는 사전 테스트가 필요할 수 있습니다. 프로덕션 환경에서는 스테이징 테스트와 유지보수 윈도우를 고려하세요.
1 단계 - yum-cron 설치
Yum-cron은 CentOS에서 패키지 업데이트를 관리하는 커맨드라인 유틸리티입니다. 저장소에서 설치할 수 있습니다.
yum -y install yum-cron
설치 후 서비스 시작 및 부팅 시 자동 시작 설정:
systemctl start yum-cron
systemctl enable yum-cron
서비스 상태 확인(추가 권장 명령):
systemctl status yum-cron
설치가 완료되면 다음 단계로 구성 파일을 편집합니다.
2 단계 - yum-cron을 보안 업데이트만 적용하도록 구성
설정 파일은 /etc/yum/yum-cron.conf 입니다. 여기서 update_cmd, emit_via, 이메일 옵션 등을 변경합니다.
편집 예:
cd /etc/yum/
vim yum-cron.conf
파일에서 아래 항목을 찾아 변경합니다:
update_cmd = security
update_messages = yes
download_updates = yes
apply_updates = yes
이 설정은 보안 관련 업데이트만 다운로드하고 자동으로 적용하도록 지정합니다.
이미지:
메일 전송 방식 설정: yum-cron은 STDIO 출력 또는 이메일 전송을 지원합니다. 이메일로 알림을 받으려면 emit_via 값을 email로 설정하고 발신자/수신자/메일호스트를 지정합니다.
emit_via = email
email_from = root@hakase-labs
email_to = [email protected]
email_host = hakase-labs
이미지:
설정을 저장한 뒤 yum-cron 서비스를 재시작합니다:
systemctl restart yum-cron
추가 권장 설정(운영 팁):
- 시스템에 메일 전송 에이전트(MTA)가 없다면 Postfix 또는 ssmtp 등을 설치해야 이메일 알림이 제대로 동작합니다.
- 보안 업데이트만 적용할 때도 커널 업데이트는 신중히 다뤄야 합니다. 재부팅이 필요한 커널 업데이트는 운영시간을 고려하세요.
3 단계 - 자동 업데이트에서 특정 패키지 제외
특정 패키지를 자동 업데이트에서 제외하려면 yum-cron.conf의 [base] 섹션(또는 해당 파일 끝부분)에 exclude 지시자를 추가합니다.
cd /etc/yum/
vim yum-cron.conf
파일에서 [base] 섹션을 찾아 다음처럼 추가합니다:
exclude = mysql* kernel*
이 예시는 이름이 mysql로 시작하는 모든 패키지와 kernel로 시작하는 패키지를 자동 업데이트에서 제외합니다. 변경 후 서비스 재시작:
systemctl restart yum-cron
이미지:
중요: 와일드카드를 사용할 수 있으니 패턴 정의에 주의하세요. 잘못된 패턴은 의도치 않은 패키지 제외로 이어질 수 있습니다.
4 단계 - yum-cron 로그 확인 및 감사
yum-cron은 cron 작업을 통해 자동 실행되며 표준 로그는 /var/log 디렉터리에 있습니다. 관련 명령 예:
cd /var/log/
cat cron | grep yum-daily
업데이트된 패키지 목록 확인:
cat yum.log | grep Updated
추가 로그 소스:
- /var/log/messages 또는 시스템저널(journalctl)에서 추가 오류를 확인하세요.
문제 해결 팁:
- 서비스가 동작하지 않으면 systemctl status와 journalctl -u yum-cron을 확인합니다.
- 이메일 알림이 오지 않으면 로컬 MTA 로그(/var/log/maillog 등)를 확인하세요.
롤백과 테스트
자동 업데이트 후 문제가 발생하면 yum history를 사용해 변경을 추적하고 필요 시 롤백할 수 있습니다.
예: 최근 트랜잭션 확인
yum history
특정 트랜잭션 롤백 예:
yum history undo
주의: 모든 롤백이 항상 완전한 복원을 보장하는 것은 아니므로 프로덕션에서 롤백을 사용하기 전에는 스냅샷(예: LVM 스냅샷, VM 스냅샷)이나 백업을 확보하세요.
보안 고려사항 및 운영 권장사항
- 자동 업데이트는 운영 편의성을 높이지만, 상태 확인과 테스트 절차 없이는 서비스 중단을 초래할 수 있습니다.
- 커널 및 주요 데이터베이스 관련 패키지는 자동 적용에서 제외하고 수동으로 테스트한 뒤 설치하는 것을 권장합니다.
- 시스템 재부팅이 필요한 업데이트가 적용될 수 있으므로 자동 재부팅을 구성할지 여부를 명확히 결정하세요.
중요: 패치 정책은 비즈니스 요구사항, SLA, 변경관리 프로세스에 맞춰 수립해야 합니다.
부록: 운영 체크리스트 (역할별)
운영자(시스템 관리자):
- yum-cron 설치 및 활성화 확인
- yum-cron.conf에서 update_cmd와 이메일 설정 검증
- 제외 패키지 목록 검증(exclude 패턴)
- MTA(Postfix 등) 설치 및 발신 테스트
- 업데이트 후 서비스 상태 점검 스크립트 준비
보안 담당자:
- 보안 패치가 정책 범위 내인지 검토
- 패치 적용 감사 로그 보관 정책 확인
개발/서비스 팀:
- 중요한 변경에 대한 롤백 절차 문서화
- 스테이징 환경에서 패치 테스트
테스트 케이스 및 수용 기준
테스트 목적: yum-cron이 보안 업데이트만 다운로드하고 적용하는지 검증
테스트 케이스 예:
TC1: 보안 업데이트가 있는 경우
- 절차: 보안 업데이트가 있는 패키지가 존재하도록 테스트 환경 구성
- 기대 결과: 해당 보안 패키지가 다운로드·설치되고 yum.log에 Updated 항목이 남음
TC2: 제외된 패키지 업데이트
- 절차: exclude에 추가한 패키지의 보안 업데이트를 포함
- 기대 결과: 해당 패키지는 자동으로 설치되지 않음
TC3: 이메일 알림
- 절차: 알림이 정상 전송되는지 확인
- 기대 결과: 이메일 수신자에게 업데이트 요약이 도착
수용 기준:
- 보안 업데이트만 자동 적용되고, 제외된 패키지는 설치되지 않아야 함
- 업데이트 로그가 /var/log/yum.log와 cron 로그에 기록되어야 함
- 이메일 알림(emit_via = email)을 선택한 경우 알림이 정상 도착해야 함
소규모 운영 SOP(표준작업절차)
- yum-cron.conf 백업
cp /etc/yum/yum-cron.conf /etc/yum/yum-cron.conf.bak.$(date +%F)
- 구성 변경 및 저장
- 서비스 재시작
systemctl restart yum-cron
- 로그 확인
cat /var/log/cron | grep yum-daily
cat /var/log/yum.log | tail -n 50
이메일 수신 확인 및 서비스 점검
문제가 있으면 yum history로 롤백하거나 스냅샷 복원
대안과 고려할 점
- 자동화 도구 사용: 기업 환경에서는 Spacewalk, Satellite 또는 Ansible 같은 중앙 관리 도구를 사용해 패치 정책을 더 세밀하게 적용할 수 있습니다.
- 패치 창 관리: 자동 적용 대신 그룹별로 롤아웃(예: Canary 배포)을 고려하세요.
- 컨테이너 환경: 컨테이너 이미지는 빌드 단계에서 패치를 적용하고 이미지를 재배포하는 방식이 일반적입니다.
빠른 명령어 요약(치트시트)
# 설치
yum -y install yum-cron
systemctl start yum-cron
systemctl enable yum-cron
# 구성 편집
vim /etc/yum/yum-cron.conf
# 재시작
systemctl restart yum-cron
# 상태확인
systemctl status yum-cron
journalctl -u yum-cron
# 로그확인
cat /var/log/cron | grep yum-daily
cat /var/log/yum.log | grep Updated
# yum 트랜잭션 확인 및 롤백
yum history
yum history undo
결론
이 가이드에서는 CentOS 7 서버에서 yum-cron을 설치하고 보안 업데이트만 자동으로 다운로드·적용하도록 구성하는 전체 흐름을 다뤘습니다. 이메일 알림 설정, 특정 패키지 제외, 로그 감사, 테스트 및 롤백 절차까지 포함하여 운영 관점에서 실무에 바로 적용할 수 있는 내용으로 구성했습니다.
요약: yum-cron을 통해 보안 업데이트를 자동화하면 관리 부담을 크게 줄일 수 있지만, 커널·데이터베이스와 같은 핵심 패키지는 수동 테스트와 배포 창구를 두는 것이 안전합니다.
추가 자료