안 쓰는 계정을 정리하다가 하나를 놓고 멈췄다.
Table of contents
Open Table of contents
기록이 없어야 정상인 것
지우려던 것은 이 계정이었다.
admin_backup
admin_backup 이라는 이름이 애매했고 만든 기록이 없었다.
$ last admin_backup | head -1
admin_backup pts/2 web01 Fri Feb 14 18:22
last 로 보니 5개월 전이 마지막이라 지워도 될 것 같았다. 그런데 지우기 전에 확인하는 것을 습관으로 두고 있어서 물어봤다.
주 계정의 SSH 키가 안 먹을 때 쓰는 비상용 통로라는 답이 왔다. 평소에 안 쓰이니 안 쓰는 것처럼 보였던 것이다.
접속 기록으로 판단한 것이 문제였다.
자주 쓰이는 것 접속 기록이 있다
가끔 쓰이는 것 기록이 드물다
비상용 거의 없다. 없어야 정상이다
안 쓰는 것 없다
뒤의 둘이 기록으로는 같아 보인다. 안 쓰이는 것과 필요 없는 것은 다른 상태인데 그때 쓰던 기준은 앞의 것만 보고 있었다.
남길 것에 설명을 붙였다
이름과 설명을 붙였다.
$ chfn -f "비상 접근용. 주 계정 키 장애 시 사용. 지우지 마십시오." admin_backup
$ getent passwd admin_backup
admin_backup:x:1005:1005:비상 접근용. 주 계정 키 장애 시 사용. 지우지 마십시오.:...
getent passwd 만 봐도 다음에 정리하는 사람이 안다. 설명이 없으면 그 사람도 나처럼 물어봐야 한다.
물어볼 사람이 있을 때는 괜찮지만 없을 때가 문제다. 만든 사람이 나가면 아무도 모르는 계정이 되고 그러면 지우지도 못하고 쓰지도 못하는 상태로 남는다.
비상용이 실제로 되는지 확인했다
5개월 안 쓴 것이 실제로 되는지 몰랐다.
$ ssh -i ~/.ssh/emergency admin_backup@web01 'echo ok'
Permission denied (publickey).
Permission denied 였다. authorized_keys 가 바뀌어 있었다. 비상용은 평소에 안 쓰이므로 안 되는 것도 모르는데 정말 필요할 때 안 되면 없는 것과 같다.
고치고 나서 정기적으로 확인하게 했다.
#!/bin/sh
# 월 1회
for h in $HOSTS; do
ssh -o BatchMode=yes -i /root/.ssh/emergency admin_backup@$h 'echo ok' >/dev/null 2>&1 \
&& echo "$h OK" || echo "$h FAIL"
done
BatchMode=yes 를 준 것은 비밀번호를 묻지 않고 바로 실패하게 하기 위해서다.
같은 성격의 것이 더 있는지도 봤다.
- 콘솔 접속 (원격 관리 포트)
- DB 의 로컬 접속 계정
- 방화벽을 우회하는 관리용 경로
- 백업에서 복구하는 절차
넷 다 평소에 안 쓰고 넷 다 되는지 확인한 적이 없었다. 원격 관리 포트는 비밀번호가 초기값이었고 DB localhost 계정도 마찬가지였다. 이건 반대로 위험한 것이었다. 비상용은 안 되는 것과 너무 열려 있는 것 둘 다 문제였다.
조치 — 정리 기준을 바꿨다
비상 접근 수단을 목록으로 만들었다.
비상 접근 수단
1. admin_backup 계정 (SSH 키) 월 1회 확인. 담당: ...
2. 원격 관리 포트 분기 1회 확인. 비밀번호 변경함
3. DB localhost 접속 월 1회 확인
4. 백업 복구 절차 반기 1회 실제 복구 시험
각 항목은 확인 기록을 남긴다.
목록이 있으니 admin_backup 같은 것이 정리 대상인지 바로 갈린다.
확인 결과도 남기게 했다. 월 1회 확인을 만들어 놓고 결과를 안 남기면 했는지 안 했는지 모른다.
echo "$(date +%F) emergency-access $h $result" >> /var/log/emergency-check.log
기록이 없으면 확인했다는 것이 기억에만 남는다. 세 달 뒤에 마지막 확인이 언제였는지 물으면 답을 못 한다.
접속 기록만으로 정리하던 기준도 바꿨다.
지우기 전에
1. 무엇을 위한 것인지 확인한다 (물어본다)
2. 문서·목록에 있는지 본다
3. 없으면 30일 동안 잠그고 지켜본다
4. 아무 일 없으면 지운다
3번을 넣은 것은 물어봐도 아무도 모르는 경우가 있어서였다. passwd -l 로 잠그면 되돌릴 수 있고 userdel 로 지우면 못 되돌린다.
정리
- 접속 기록이 없다고 필요 없는 것은 아니다. 비상용은 기록이 없어야 정상이다
- 안 쓰이는 것과 필요 없는 것은 다르다
- 지우기 전에 물어본다
- 남길 것은
chfn으로 설명을 붙인다. 다음 사람이 목록만 봐도 알게 한다 - 비상용은 실제로 되는지 확인한다. 안 쓰이면 안 되는 것도 모른다
- 정기적으로 확인하게 만들고 그 결과를 기록에 남긴다
- 비상용은 안 되는 것과 너무 열려 있는 것 둘 다 문제다
- 목록으로 만들고 확인 주기를 정한다
userdel전에passwd -l로 잠그고 지켜본다