리눅스 사용자 계정 삭제 전 점검 절차
Lynis 3.1.7 소스(include/tests_authentication)를 보면 AUTH-9284 는 잠긴 계정 중 UID 1000 이상(65534 제외)인 일반 계정을 확인해서 존재하면 취약점 리포트에 포함됩니다. Application Migration을 여러 번 거친 리눅스 서버를 오래 사용하다 보면 삭제된 계정이 그대로 남는 경우가 많습니다. 그래서 오늘은 사용자 계정을 삭제하기 전에 점검해야 할 항목들을 알아보겠습니다.
- 잠긴 계정을 확인합니다.
awk -F: '$3>999 && $3!=65534{print $1}' /etc/passwd | xargs -n1 passwd -S | awk '$2=="L" || $2=="LK" {print $1}' | xargs -I {} sh -c 'echo "--- Account: {} ---"; passwd -S {}; grep "^{}:" /etc/passwd' - 잠긴 계정으로 실행 중인 프로세스가 있는지 확인합니다.
LU=<user> HD=<home directory> ps -u $LU -o pid,cmd # 프로세스가 있다면 pkill -u $LU
- 잠긴 계정으로 네트워크 소켓을 물고 있는지(활성 세션이나 리스닝 포트를 유지하고 있는지) 확인합니다.
lsof -u $LU -P -n # 열린 파일이 있다면 lsof -u $LU -P -n | awk 'NR>1 {print $2}' | sort -u | xargs -r kill -9 - 잠긴 계정으로 등록된 systemd 유닛(타이머, 소켓, 서비스 등)를 확인합니다.
grep -rlE "^\s*User=$LU\s*$" /etc/systemd/system /usr/lib/systemd/system /run/systemd/system 2>/dev/null # 등록된 서비스가 있다면 systemctl list-unit-files | grep <유닛이름> systemctl disable --now <유닛이름>.<확장자> rm -f /path/to/<유닛이름>.<확장자>
- 잠긴 계정으로 예약된 작업이 있는지 확인합니다.
crontab -l -u $LU grep -rnw "/etc/crontab" -e "$LU" grep -rnw "/etc/cron.d/" -e "$LU" # 등록된 예약 작업이 있다면, crontab -e -u $LU rm -f /etc/crontab/파일명 rm -f /etc/cron.d/파일명
- 잠긴 계정으로 시작되는 스크립트나 서비스가 있는지 확인합니다.
grep -rl $LU /etc/init.d 2>/dev/null
- 잠긴 계정의 최근 로그인 기록을 확인합니다.
lastlog -u $LU
- 잠긴 계정이 점유하고 있는 IPC (Inter-Process Communication) 자원을 점검합니다.
ipcs -p # 공유 메모리(Shared Memory) 자원이 있다면 ipcrm -m <shmid번호>
- 잠긴 계정이 소유한 파일 및 디렉터리를 확인합니다. 확인된 파일 및 디렉터리는 백업/삭제하거나 소유권을 관리자에게 이전합니다.
find / \( -path /proc -o -path /dev -o -path $HD \) -prune -o -user $LU -print 2>/dev/null # 사용자의 홈 디렉터리와 메일 스풀 파일만 출력된다면, 10단계에서 처리합니다. # 소유한 파일 및 디렉터리가 있다면, find / \( -path /proc -o -path /dev \) -prune -o -user $LU -print0 2>/dev/null | tar --null -czf /home/$LU.tar.gz -T - tar -tf /home/$LU.tar.gz chown 명령어로 소유권을 이전하거나 rm -rf 명령으로 삭제 # 압축 해제 시 tar -xzf /home/$LU.tar.gz -C /
- 마지막으로 계정을 삭제합니다. -r (또는 –remove) 옵션은 사용자의 홈 디렉터리와 메일 스풀 파일을 함께 완전히 삭제합니다.
userdel -r $LU unset LU unset HD
