시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 32/50편 (전체 082/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
계정 삭제는 정상 운영(퇴직 처리)이기도 하지만, 공격자가 쓰고 버린 백도어 계정을 지워 흔적을 없애는 행위이기도 합니다. 삭제 자체보다 "무엇을, 언제, 왜" 지웠는지가 중요합니다.
userdel 계정 : passwd/shadow/group에서 제거 (홈은 유지)
userdel -r 계정 : 홈 디렉터리·메일 스풀도 삭제 (흔적 제거에 유리)
삭제 후 남을 수 있는 잔존물
/var/spool/cron/<계정> crontab (지속성, A영역 026편)
/home/<계정> 홈(-r 없이 삭제 시)
소유자 없는 파일 UID만 남아 'ls -l'에 숫자로 표시
삭제된 계정이 만들어진 지 얼마 안 된 계정이면(생성→사용→삭제), 백도어 정리 패턴입니다.
userdel -r는 홈의 증거(히스토리·스크립트)까지 지우므로, 삭제 전 홈 내용 확보가 중요합니다.| 확인 | 명령 |
|---|---|
| 삭제 로그 | sudo grep 'delete user|userdel|removed' /var/log/secure |
| audit 삭제 | sudo ausearch -k identity -i | grep userdel (DEL_USER) |
| 소유자 없는 파일 | sudo find / -xdev -nouser 2>/dev/null |
| crontab 잔존 | sudo ls /var/spool/cron/ (존재하지 않는 계정) |
| 생성-삭제 수명 | 생성 로그와 삭제 로그의 시간 간격 |
LOG=/var/log/secure # Ubuntu: /var/log/auth.log
# 1) 최근 삭제 이벤트
sudo grep -E 'delete user|userdel|removed group' $LOG | tail
sudo ausearch -k identity -i --start today 2>/dev/null | grep -iE 'userdel|DEL_USER' | tail
# 2) 소유자 없는 파일 (삭제된 계정의 잔존 흔적)
sudo find / -xdev \( -nouser -o -nogroup \) 2>/dev/null | head -20
# 3) 같은 계정의 생성·삭제 수명 비교
sudo grep -E 'new user: name=sysbak|delete user .?sysbak' $LOG
Oct 2 11:00:02 rocky9-web01 userdel[13301]: delete user 'intern01'
$ sudo find / -xdev -nouser 2>/dev/null
$
퇴직 처리로 계정을 삭제하고(변경관리 기록 존재), 소유자 없는 파일이 남지 않도록 정리된 상태가 정상입니다.
Oct 2 03:50:02 rocky9-web01 userdel[13401]: delete user 'sysbak'
$ sudo grep -E 'new user: name=sysbak|delete user .?sysbak' $LOG
02:14:09 useradd: new user: name=sysbak, UID=0 ...
03:50:02 userdel: delete user 'sysbak'
$ sudo find / -xdev -nouser 2>/dev/null
/dev/shm/.c/payload
/var/spool/cron/sysbak
sysbak 계정이 생성(02:14) → 사용 → 삭제(03:50), 수명 약 1시간 36분 → 백도어 사용 후 정리userdel(‑r 아님)이라 crontab·파일이 소유자 없는 상태로 잔존 → 그 계정의 활동 증거생성-사용-삭제 전체 수명을 재구성한 예시입니다(가상의 예시).
02:14:09 useradd sysbak UID=0 (auid=devops)
02:20:02 sshd: Accepted for sysbak from 192.168.56.77
02:58:00 crontab(sysbak) REPLACE (지속성)
03:50:02 userdel sysbak (auid=devops) ← 흔적 정리
잔존: /var/spool/cron/sysbak, /dev/shm/.c (소유자 없는 파일)
| 단계 | 증거원 |
|---|---|
| 생성 | useradd 로그(029편) |
| 사용 | 로그인·행위 로그 |
| 삭제 | userdel 로그 |
| 잔존 | -nouser 파일, cron 스풀 |
삭제로 passwd에서 사라져도, 로그(원격 사본)와 잔존물로 전체 수명을 복원할 수 있습니다.
<group name="local,syssec_b,account,">
<rule id="101290" level="11">
<if_group>audit</if_group>
<match>type=DEL_USER</match>
<description>계정 삭제(userdel) — 승인·수명 확인 필요</description>
</rule>
</group>
삭제는 정상 운영에서도 발생하므로 기본 레벨은 중간으로 두고, 단기간 생성-삭제 상관(029편 생성 룰과 시간 결합)이나 비관리망 주체 조건으로 상향합니다. 소유자 없는 파일 점검은 정기 자체 점검(A영역 044편)에 포함합니다.
| 구분 | 핵심 내용 |
|---|---|
| userdel vs -r | 계정만 vs 홈·메일까지 삭제 |
| 흔적 정리 신호 | 짧은 수명(생성→사용→삭제), 비관리망 주체 |
| 복원 수단 | 로그(원격 사본) + 소유자 없는 파일 + cron 잔존 |
| 정상 | 퇴직 처리(승인·업무시간) |
| 면접 포인트 | "삭제로 passwd에서 사라져도 로그·잔존물로 복원한다" |
다음 편 083. 계정 · 인증 보안 — 비활성·휴면 계정 식별과 정리 에서는 오래 쓰지 않는 비활성·휴면 계정 식별과 정리를 다룹니다.
이전 편: 081. 계정 · 인증 보안 — 그룹 구성원 변경과 권한 확대 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점