원문 캡처 · blog.bityard.net
원문 캡처 · blog.bityard.net

2019년 8월 24일

우분투 18.04 서버에 로그인하면 시스템 정보와 안내, Canonical 제품 홍보 등이 담긴 메시지가 표시된다. 이 글은 로그인 때마다 나오는 문구를 없애려는 과정에서 motd와 pam_motd, systemd 타이머의 작동 방식을 추적하며, 간단한 질문이 기술을 배우는 긴 탐구로 이어지는 ‘래빗 홀’을 보여준다.

처음에는 /etc/motd에 메시지가 들어 있다고 생각해 파일을 확인하지만, 파일은 없다. 직접 내용을 써 넣어도 기존 문구는 그대로 나오고 새 문장만 추가된다. 단서는 /etc/update-motd.d에서 찾는다. 이 디렉터리에는 로그인 메시지의 각 부분을 출력하는 스크립트가 들어 있다. 파일 이름 앞의 숫자는 실행 순서를 짐작하게 한다.

그중 50-motd-news는 https://motd.ubuntu.com에서 메시지를 가져오는 스크립트다. /etc/default/motd-news의 환경 변수로 실행 여부를 정하고, --force 옵션이 없으면 /var/cache/motd-news에 저장된 내용을 출력한다. --force를 주면 URL에서 새 내용을 가져온다.

--force가 언제 쓰이는지 확인하자 systemd의 motd-news.service와 motd-news.timer가 나온다. 타이머는 12시간 간격으로 실행되며, 매번 무작위 지연을 둔다. 서비스는 50-motd-news --force를 실행한다. 따라서 로그인 때 보이는 메시지는 정기적으로 갱신되어 캐시에 저장되고, 로그인 과정에서 표시된다.

더 깊이 확인하려고 pam_motd의 매뉴얼과 소스 코드를 살펴본다. 매뉴얼은 /etc/update-motd.d/*의 실행 파일이 로그인 때 실행된다고 설명하지만, PAM 설정에는 noupdate 옵션도 있다. 모순처럼 보이는 부분은 배포판이 pam_motd에 추가한 패치에서 풀린다. 패치에 따르면 noupdate가 설정되지 않았고 /etc/update-motd.d가 존재하면 run-parts로 스크립트를 실행해 결과를 /run/motd.dynamic에 쓴다. PAM 설정은 이 동적 파일과 관리자가 편집할 수 있는 /etc/motd의 내용을 표시한다.

글쓴이는 로그인 메시지를 없애는 실용적 결과보다, 문서와 설정, 서비스, 소스 코드 사이를 따라가며 시스템의 동작을 알아가는 과정에 의미를 둔다. 처음 질문에 답을 얻은 뒤에도 더 깊이 파고들 수 있지만, 이 탐구는 여기서 멈춘다. 비슷한 기술 문제를 만났을 때 단서를 좇아 작동 원리를 알아보는 방법을 익힐 수 있다는 것이 글의 요지다.

pam_motd와 타이머에 관한 참고 자료는 systemd.timer 매뉴얼에서 확인할 수 있다.

부록: 원문 예시

text
[Unit] Description=Message of the Day [Timer] OnCalendar=00,12:00:00 RandomizedDelaySec=12h Persistent=true OnStartupSec=1min [Install] WantedBy=timers.target 
text
[Unit] Description=Message of the Day After=network-online.target Documentation=man:update-motd(8) [Service] Type=oneshot ExecStart=/etc/update-motd.d/50-motd-news --force