서비스를 안정적으로 운영하기 위한 조건 중 하나는 백업을 열심히하는 것입니다. 그래서 백업을 포함한 몇가지 작업이 반복해서 수행 될 수 있도록, Crontab을 이용하고 있습니다. 그런 오늘 우연히 백업이 정상적으로 수행되고 있지 않은 것을 발견했습니다. 자정에 백업이 수행되어 데이터가 쌓이고 있어야 했는데, 백업 데이터는 물론이고 백업이 수행된 로그조차 남지 않았습니다.
원인을 찾던 중 "마치 Crontab이 실행이 되지 않은 것처럼" 로그 조차 남지 않았지? 라고 의문을 가지게 되어 Crontab 로그를 확인해보니 다음과 같은 에러 메시지를 확인할 수 있었습니다.
Jan 19 00:03:01 server crond[12117]: pam_unix(crond:account): expired password for user bitlog (bitlog enforced)
Jan 19 00:03:01 server crond[12117]: (bitlog) PAM ERROR (Authentication token is no longer valid; new one required)
Jan 19 00:03:01 server crond[12117]: (bitlog) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required)
백업이 안되는 걸 확인하고 서버에 접속할 때, 패스워드가 만료되어 변경하고 접속했는데, 그게 원인이었겠구나 싶었습니다.
오늘 패스워드를 변경했으니, 당분간은 동일한 문제를 겪지 않겠지만, 계속해서 이런 일로 신경 쓸수는 없으니, 패스워드가 만료되더라도 Crontab이 정상적으로 구동되도록 하고 싶었습니다. 구글링해서 찾은 해결방법은 두가지 정도가 있었습니다.
하나는, 패스워드 정책을 변경하는 것, 즉 패스워드가 만료되지 않도록 하는 방법입니다.
다른 하나는, CronTab이 패스워드가 만료되더라도 수행될 수 있도록 해주는 것입니다.
첫번째 방법은 보안상 문제가 ( 보안관리자에게 욕먹기 딱 좋은 ) 될 것 같아 고려하지 않았지만, 개인적으로 사용하는 서버라면, 간단히 적용할 수 있는 방법이라고 생각합니다. ( stackoverflow.com/a/44725730 )
두번째 방법은 pam의 crond 설정을 변경하는 것인데, /etc/pam.d/crond 파일을 찾아 내용을 다음과 같이 변경해줍니다.
# before
bitlog required pam_access.so
# after
bitlog sufficient pam_access.so
이제 다음 번 계정이 만료될 즈음을 기록해두고, 정상적으로 Crontab이 수행되는지를 확인해보면 됩니다.
끝.