Linux에서 사용자를 삭제하고 모든 추적을 제거하는 방법

리눅스에서 사용자 계정을 삭제하는 것은 생각보다 복잡한 과정입니다. 시스템 관리자라면 계정과 관련된 모든 흔적을 시스템에서 완전히 제거해야 할 필요성을 느낄 것입니다. 여기, 필요한 단계를 자세히 안내해 드립니다.

만약 단순히 사용자 계정을 삭제하고, 실행 중인 프로세스나 정리 작업에는 크게 신경 쓰고 싶지 않다면 “사용자 계정 삭제” 섹션의 지침만 따라주세요. 데비안 계열 배포판에서는 ‘deluser’ 명령을, 다른 리눅스 배포판에서는 ‘userdel’ 명령을 사용해야 합니다.

리눅스 사용자 계정의 역사

최초의 시분할 시스템은 1960년대 초에 등장했습니다. 이를 통해 여러 사용자가 하나의 컴퓨터에서 작업할 수 있게 되면서 각 사용자의 파일과 데이터를 다른 사용자로부터 분리하고 보호해야 할 필요성이 생겼습니다. 그래서 사용자 계정과 비밀번호 개념이 탄생하게 되었습니다.

사용자 계정은 관리가 필요합니다. 사용자가 시스템에 처음으로 접근해야 할 때는 계정을 생성해야 하고, 접근 권한이 더 이상 필요하지 않을 때는 계정을 삭제해야 합니다. 리눅스는 컴퓨터에서 사용자, 파일, 계정을 정확하고 체계적으로 삭제하기 위한 일련의 단계를 제공합니다.

만약 당신이 시스템 관리자라면 이 책임은 당신에게 있습니다. 이제 해결 방법을 알아보겠습니다.

삭제 시나리오

계정을 삭제해야 하는 이유는 여러 가지가 있습니다. 직원이 다른 팀으로 이동하거나 퇴사할 수 있습니다. 혹은 외부 방문자와 단기 협업을 위해 설정된 계정일 수도 있습니다. 팀 협업은 학계에서 흔하며 연구 프로젝트가 부서, 다른 대학, 심지어 기업을 넘나들 수도 있습니다. 프로젝트가 완료되면 시스템 관리자는 불필요한 계정을 정리해야 합니다.

최악의 시나리오는 누군가 불미스러운 일로 인해 갑작스럽게 떠나야 할 때입니다. 이런 일들은 보통 예고 없이 발생하기 때문에 시스템 관리자는 계획을 세울 시간이 거의 없습니다. 사용자 파일을 백업하고, 계정을 잠그고, 삭제해야 하는 긴급한 상황에 놓이게 됩니다. 만약의 사태를 대비하여 사용자 파일의 복사본을 백업해야 합니다.

이 시나리오에서는 사용자 ‘Eric’이 즉시 구내에서 제거되어야 하는 일을 저질렀다고 가정해 보겠습니다. 그는 아직 이 사실을 모른 채로 로그인된 상태로 작업을 하고 있습니다. 보안팀의 준비가 완료되는 즉시 그는 건물에서 나가게 될 것입니다.

모든 준비가 끝났습니다. 이제 당신에게 모든 시선이 집중됩니다.

로그인 확인

먼저 그가 실제로 로그인했는지 확인하고, 로그인했다면 몇 개의 세션으로 작업 중인지 알아봅시다. ‘who’ 명령은 활성 세션을 나열합니다.

who

Eric은 한 번 로그인했습니다. 이제 그가 실행 중인 프로세스를 확인해 봅시다.

사용자 프로세스 검토

‘ps’ 명령을 사용하여 해당 사용자가 실행 중인 프로세스를 나열합니다. ‘-u’ (사용자) 옵션을 사용하여 특정 사용자 계정 소유의 프로세스만 표시하도록 설정할 수 있습니다.

ps -u eric

‘top’ 명령을 사용하면 더 많은 정보를 포함하여 동일한 프로세스를 볼 수 있습니다. ‘top’에도 ‘-U’ (사용자) 옵션이 있어 특정 사용자가 소유한 프로세스만 표시할 수 있습니다. 이번에는 대문자 “U”를 사용합니다.

top -U eric

각 작업의 메모리 및 CPU 사용량을 확인할 수 있으며, 의심스러운 활동이 있는지 빠르게 찾을 수 있습니다. 우리는 그의 모든 프로세스를 종료해야 하므로, 시간을 들여 프로세스를 검토하고 사용자 계정 ‘eric’의 프로세스를 종료할 때 다른 사용자가 불편을 겪지 않도록 확인하는 것이 가장 안전합니다.

그는 많은 작업을 하고 있지 않고, 파일을 보고 있는 정도입니다. 계속 진행해도 안전합니다. 하지만 그의 프로세스를 종료하기 전에 계정을 잠가서 동결시키겠습니다.

계정 잠금

프로세스를 종료하면 사용자가 로그아웃되므로, 프로세스를 종료하기 전에 계정을 잠급니다. 만약 비밀번호를 변경했다면 그는 다시 로그인할 수 없을 것입니다.

암호화된 사용자 비밀번호는 ‘/etc/shadow’ 파일에 저장됩니다. 일반적으로는 이러한 세부 사항에 신경 쓰지 않지만, 계정을 잠글 때 ‘/etc/shadow’ 파일에서 어떤 일이 발생하는지 보여드리겠습니다. 다음 명령을 사용하여 ‘eric’ 사용자 계정 항목의 처음 두 필드를 볼 수 있습니다.

sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow

‘awk’ 명령은 텍스트 파일에서 필드를 분석하고 조작하는 데 사용됩니다. ‘-F’ (필드 구분 기호) 옵션을 사용하여 파일이 콜론 ‘:’을 사용하여 필드를 구분한다는 것을 ‘awk’에 알립니다. 그런 다음 “eric” 패턴이 있는 줄을 검색합니다. 해당 줄이 발견되면 첫 번째 및 두 번째 필드를 출력합니다. 이는 계정 이름과 암호화된 비밀번호에 해당합니다.

‘eric’ 사용자 계정에 대한 항목이 출력됩니다.

계정을 잠그려면 ‘passwd’ 명령을 사용합니다. ‘-l’ (잠금) 옵션과 잠글 사용자 계정의 이름을 함께 전달합니다.

sudo passwd -l eric

‘/etc/shadow’ 파일을 다시 확인하면 어떤 일이 일어났는지 확인할 수 있습니다.

sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow

암호화된 비밀번호의 시작 부분에 느낌표가 추가되었습니다. 이것은 비밀번호의 첫 글자를 덮어쓰는 것이 아니라 추가하는 것입니다. 이 변경으로 사용자는 해당 계정에 로그인할 수 없게 됩니다.

사용자가 다시 로그인하지 못하도록 했으므로 이제 그의 프로세스를 종료하고 로그아웃시킬 수 있습니다.

프로세스 종료

사용자 프로세스를 종료하는 여러 방법이 있지만, 여기에서 보여주는 명령은 널리 사용 가능하며 일부 대안보다 더 현대적인 구현입니다. ‘pkill’ 명령은 프로세스를 찾아 종료합니다. ‘KILL’ 신호를 전달하고 ‘-u’ (사용자) 옵션을 사용합니다.

sudo pkill -KILL -u eric

명령 프롬프트로 돌아갑니다. 문제가 발생했는지 확인하려면 ‘who’ 명령을 다시 사용해 보겠습니다.

who

그의 세션이 사라졌습니다. 그는 로그아웃되었고 그의 프로세스는 중지되었습니다. 이제 긴급함이 조금 해소되었습니다. 보안팀이 Eric의 자리로 이동하는 동안 나머지 정리를 계속할 수 있습니다.

사용자 홈 디렉토리 보관

이러한 시나리오에서는 나중에 사용자의 파일에 접근해야 할 필요가 있을 수 있습니다. 조사 목적으로 또는 단순히 교체자가 이전 작업을 참조해야 할 수도 있습니다. ‘tar’ 명령을 사용하여 전체 홈 디렉토리를 아카이브해 보겠습니다.

사용할 옵션은 다음과 같습니다.

c: 아카이브 파일 생성
f: 아카이브 이름으로 지정된 파일 이름 사용
j: bzip2 압축 사용
v: 아카이브 생성 시 자세한 정보 출력

sudo tar cfjv eric-20200820.tar.bz /home/eric

터미널 창에서 많은 화면 출력이 스크롤됩니다. 아카이브가 생성되었는지 확인하려면 ‘ls’ 명령을 사용하십시오. ‘-l’ (긴 형식) 및 ‘-h’ (사람이 읽을 수 있는 형식) 옵션을 사용합니다.

ls -lh eric-20200802.tar.bz

722MB 크기의 파일이 생성되었습니다. 나중에 검토할 수 있도록 안전한 위치에 복사할 수 있습니다.

크론 작업 제거

사용자 계정 ‘eric’에 대해 예약된 ‘cron’ 작업이 있는지 확인하는 것이 좋습니다. ‘cron’ 작업은 특정 시간 또는 간격으로 트리거되는 명령입니다. ‘ls’를 사용하여 해당 사용자 계정에 대해 예약된 크론 작업이 있는지 확인할 수 있습니다.

sudo ls -lh /var/spool/cron/crontabs/eric

이 위치에 항목이 있다면 해당 사용자 계정에 대한 대기 중인 ‘cron’ 작업이 있음을 의미합니다. ‘crontab’ 명령으로 삭제할 수 있습니다. ‘-r’ (제거) 옵션은 작업을 제거하고 ‘-u’ (사용자) 옵션은 제거할 작업을 ‘crontab’에 알립니다.

sudo crontab -r -u eric

작업이 자동으로 삭제됩니다. 만약 Eric이 곧 해고될 것을 의심했다면 악의적인 작업을 계획했을 수도 있습니다. 이 단계는 모범 사례입니다.

인쇄 작업 제거

사용자에게 보류 중인 인쇄 작업이 있었습니까? 확실히 하기 위해 사용자 계정 ‘eric’에 속한 모든 작업의 인쇄 대기열을 제거할 수 있습니다. ‘lprm’ 명령은 인쇄 대기열에서 작업을 제거합니다. ‘-U’ (사용자 이름) 옵션을 사용하여 지정된 사용자 계정이 소유한 작업을 제거할 수 있습니다.

lprm -U eric

작업이 제거되고 명령줄로 돌아갑니다.

사용자 계정 삭제

이제 ‘/home/eric/’ 디렉토리에서 파일을 백업했으므로 사용자 계정을 삭제하고 동시에 ‘/home/eric/’ 디렉토리를 삭제할 수 있습니다.

사용할 명령은 사용 중인 리눅스 배포판에 따라 다릅니다. 데비안 기반 리눅스 배포판에서는 ‘deluser’ 명령을 사용하고, 그 외의 다른 리눅스 배포판에서는 ‘userdel’을 사용합니다.

실제로 Ubuntu에서는 두 명령을 모두 사용할 수 있습니다. 하나가 다른 하나의 별칭일 것이라고 예상했지만, 둘은 별개의 바이너리입니다.

type deluser
type userdel

둘 다 사용할 수 있지만, 데비안 계열 배포판에서는 ‘deluser’를 사용하는 것이 좋습니다.

“’userdel’은 사용자를 제거하기 위한 저수준 유틸리티입니다. 데비안에서는 관리자가 일반적으로 대신 ‘deluser(8)’를 사용해야 합니다.”

분명히 알 수 있듯이 이 Ubuntu 컴퓨터에서는 ‘deluser’ 명령을 사용합니다. 홈 디렉토리를 제거하고 싶으므로 ‘–remove-home’ 플래그도 사용합니다.

sudo deluser --remove-home eric

비 데비안 배포판에 사용할 명령은 ‘–remove’ 플래그가 있는 ‘userdel’입니다.

sudo userdel --remove eric

사용자 계정 ‘eric’의 모든 흔적이 지워졌습니다. ‘/home/eric/’ 디렉토리가 제거되었는지 확인할 수 있습니다.

ls /home

‘eric’ 사용자 계정이 유일한 항목이었으므로 ‘eric’ 그룹도 제거되었습니다. ‘/etc/group’의 내용을 ‘grep’으로 파이프하여 쉽게 확인할 수 있습니다.

sudo less /etc/group | grep eric

마무리

Eric은 자신의 잘못 때문에 사라졌습니다. 보안팀은 아직 그를 건물 밖으로 내보내고 있지만, 당신은 이미 그의 파일을 안전하게 보관하고, 그의 계정을 삭제했으며, 시스템에서 모든 잔여물을 제거했습니다.

정확성이 속도보다 항상 우선합니다. 각 단계를 수행하기 전에 각 단계를 신중하게 고려하십시오. “아니, 다른 Eric”이라고 말하면서 당신의 자리로 걸어오는 사람이 없기를 바랍니다.