문제 상황

CentOS 환경에서 주기적으로 실행되어야 할 cron 작업이 어느 순간부터 동작하지 않는 현상이 발생했습니다.

원인 파악

Cron 로그 확인

CentOS에서는 /var/log/cron을 통해 크론잡의 실행 여부와 상태를 확인할 수 있습니다.

로그를 확인해보니 빨간 배경의 에러 로그가 남아있었고, 해당 에러는 계정이 만료된 경우 cron을 실행하지 못하는 이슈였습니다.

일반적으로 보안 정책상 사용자 계정에는 비밀번호 만료 정책이 적용되어 있습니다. 계정의 비밀번호가 만료되면 해당 계정으로 실행되는 cron 작업 역시 차단되는 것이었습니다.

PAM 설정 확인

문제는 /etc/pam.d/crond 설정에서 비롯되었습니다. 기본 설정은 다음과 같습니다: (버전, OS별로 조금 다를 수 있습니다.)

auth       include      system-auth
account    required     pam_access.so
account    include      system-auth
session    required     pam_loginuid.so
session    include      system-auth

이 설정에서는 system-auth를 통해 계정 상태를 검증하는데, 비밀번호가 만료된 계정은 이 단계에서 차단됩니다.

해결 방법

방법 1: PAM 설정 수정 (권장)

/etc/pam.d/crond 파일을 수정하여 cron 작업만 계정 만료를 우회하도록 설정할 수 있습니다.

수정 후

auth       include      system-auth
account    [success=1 default=ignore] pam_succeed_if.so service in cron quiet
account    required     pam_access.so
account    include      system-auth
session    required     pam_loginuid.so
session    include      system-auth

설정 설명

추가된 라인 account [success=1 default=ignore] pam_succeed_if.so service in cron quiet의 의미는 다음과 같습니다:

  • pam_succeed_if.so service in cron: 서비스가 cron인 경우 조건을 만족
  • success=1: 조건이 만족되면 다음 1개 규칙을 건너뜀 (즉, pam_access.so를 건너뜀)
  • default=ignore: 조건이 만족되지 않으면 이 규칙을 무시하고 다음으로 진행
  • quiet: 로그를 최소화

이 설정을 통해 cron 서비스만 계정 만료 검사를 우회하면서도, 다른 인증 메커니즘은 그대로 유지할 수 있습니다.

방법 2: 별도 계정 사용

비밀번호 만료가 없는 별도의 시스템 계정을 생성하여 cron 작업을 실행하는 방법도 있습니다.

단점

  • 계정이 늘어날수록 관리 포인트가 증가
  • 권한 관리의 복잡도 증가
  • 보안 감사 시 추가 설명 필요

따라서 방법 1(PAM 설정 수정)을 권장합니다.

검증

설정 변경 후 다음과 같이 검증할 수 있습니다:

  1. cron 서비스 재시작
sudo systemctl restart crond
  1. cron 로그 모니터링
tail -f /var/log/cron
  1. 테스트 cron 작업 등록 후 실행 확인

배운 점

  • 로그의 중요성: /var/log/cron을 정기적으로 확인하는 습관이 필요합니다. 빨간 배경의 에러 로그는 즉시 조치가 필요한 신호입니다.

  • PAM 이해의 필요성: Linux의 PAM(Pluggable Authentication Modules)은 인증과 관련된 다양한 정책을 제어합니다. cron, ssh, sudo 등 각 서비스별로 /etc/pam.d/ 디렉토리 내에 별도 설정 파일이 존재하며, 이를 통해 세밀한 인증 정책을 구성할 수 있습니다.

  • 보안과 운영의 균형: 비밀번호 만료 정책은 보안상 중요하지만, 자동화 작업에는 방해가 될 수 있습니다. PAM 설정을 통해 필요한 부분만 예외 처리하여 보안과 운영 편의성의 균형을 맞출 수 있습니다.

  • 사전 예방의 중요성: 개발 서버에서 먼저 발견하여 조치할 수 있었다면 운영 환경에서의 장애를 예방할 수 있습니다. cron 작업이 중요한 경우 모니터링 알림을 설정해두는 것이 좋습니다.

CentOS cron 로그 위치

CentOS/RHEL: /var/log/cron

Ubuntu/Debian: /var/log/syslog (cron 관련 내용 포함)

로그 레벨에 따라 일반 실행은 흰색, 에러는 빨간 배경으로 표시됩니다.