last 명령어

리눅스 last 명령어: 서버 접속 기록 확인 및 보안 감사의 핵심 가이드

리눅스(Linux) 시스템을 안정적으로 운영하고 관리하는 과정에서 엔지니어가 가장 민감하게 주시해야 하는 영역 중 하나는 바로 '접속 보안'입니다. 어느 날 갑자기 시스템 설정이 변경되어 있거나, 원인을 알 수 없는 프로세스가 구동 중이라면 관리자는 직관적으로 하나의 의문을 떠올리게 됩니다. "대체 누가, 언제, 어떤 경로를 통해 이 서버에 로그인했는가?" 라는 질문입니다.

이러한 의문을 해결하고 시스템에 출입한 모든 사용자의 발자취를 추적할 수 있도록 돕는 리눅스의 핵심 도구가 바로 last 명령어입니다. `last` 명령어는 단순한 텍스트 출력을 넘어, 시스템이 가동된 이후 발생한 모든 성공한 로그인 시도와 재부팅(Reboot) 기록을 역순으로 명확하게 보여줍니다. 고가의 침해 사고 예방 솔루션을 도입하기 전, 리눅스 자체 인프라만으로 보안 감사를 수행할 수 있는 가장 가볍고 강력한 기본 명령어입니다.

본 고에서는 15년 경력의 인프라 시스템 전문가의 관점에서 `last` 명령어가 참조하는 바이너리 로그의 메커니즘을 해부하고, 실무 환경에서 해킹 징후 포착 및 사용자 관리를 위해 반드시 알아야 할 필수 옵션과 연동 테크닉을 상세히 다루어 보겠습니다.


1. 리눅스 last 명령어 개요와 데이터 소스의 비밀

리눅스 시스템은 사용자가 로그인을 시도하거나 터미널 세션을 열고 닫을 때 그 흔적을 텍스트가 아닌 특수한 '바이너리(Binary) 데이터' 형태로 기록합니다. `last` 명령어는 이 중에서도 시스템의 누적 접속 정보가 저장되는 /var/log/wtmp 파일을 직접 참조하여 파싱(Parsing)한 뒤 사용자가 읽을 수 있는 형태로 화면에 출력합니다.

일반적인 로그 파일(`messages`, `secure` 등)은 일반 텍스트 포맷이어서 악의적인 공격자가 접속 후 편집기로 쉽게 위변조할 수 있는 반면, `wtmp` 파일은 바이너리 구조로 되어 있어 전용 도구(last)나 특수 라이브러리 없이는 수정이 까다롭습니다. 따라서 `last` 명령어가 제공하는 데이터는 서버 침해 사고 발생 시 법적 효력을 가질 수 있는 최초의 디지털 포렌식 증거 자료이자 보안 감사의 핵심 출발점이 됩니다.


2. last 명령어 출력 결과 완벽 분석 (필드별 의미)

터미널에 임의의 옵션 없이 `last`를 입력하면, 가장 최근에 발생한 세션 정보부터 시작하여 과거의 기록들이 줄지어 출력됩니다. 출력되는 행(Row)의 각 필드가 의미하는 바를 정확히 해석해야만 비정상적인 접근을 식별해 낼 수 있습니다.

① 사용자 계정명 및 터미널 정보 (USER, TTY)

  • USER (첫 번째 열): 시스템에 접속을 완료한 계정 ID입니다. 관리자 계정인 `root` 외에도 일반 사용자 계정명이 표시되며, 시스템이 강제로 리부팅되었거나 커널이 기동된 시점은 reboot라는 가상 계정명으로 기록됩니다.
  • TTY (두 번째 열): 사용자가 할당받았던 물리/가상 터미널의 종류입니다. X-윈도우 화면이나 서버 콘솔 인터페이스에서 직접 로그인했다면 tty1, :0 등으로 표시되며, SSH나 텔넷을 통해 원격 네트워크로 접속했다면 가상 터미널인 pts/0, pts/1 등으로 표기됩니다.

② 접속 출처 및 세션 타임라인 (FROM, DATE, DURATION)

  • FROM (세 번째 열): 사용자가 접속을 시도한 발신지 정보입니다. 로컬 접속일 경우 빈칸이거나 디스플레이 번호가 나오지만, 원격 SSH 접속인 경우 접속자의 IP 주소 또는 도메인 네임이 명시됩니다. 보안 모니터링 시 사내 가상사설망(VPN) 대역이나 허용된 IP 외의 대역이 찍혀 있는지 반드시 확인해야 하는 필드입니다.
  • 접속 일시 (네 번째 영역): 로그인한 요일, 월, 일, 그리고 정확한 시:분:초가 기록됩니다. (예: Wed May 20 14:10:05)
  • 세션 상태 및 유지 시간 (마지막 열): 해당 세션의 현재 상태와 총 접속 유지 시간을 나타냅니다. still logged in은 현재도 로그인을 유지하고 있는 상태를 뜻하며, 이미 로그아웃한 세션은 (01:23)과 같이 시:분 형태로 총 유지 시간이 표기됩니다. 만약 로그아웃 절차 없이 서버가 꺼졌다면 down, 강제 종료되었다면 crash로 마킹됩니다.

3. 실무 보안 감사 효율을 높이는 필수 옵션 활용법

운영 기간이 오래된 서버일수록 `wtmp` 파일의 크기가 커져 `last` 명령어만 입력하면 수만 줄의 로그가 화면을 덮어버립니다. 원하는 데이터만 핀포인트로 걸러내기 위해 실무에서 자주 쓰이는 필수 옵션들을 숙지해야 합니다.

  • last -n [숫자] (또는 last -[숫자]): 출력할 레코드의 개수를 제한합니다. 예를 들어 last -n 10 또는 last -10을 입력하면 가장 최근에 로그인한 10개의 기록만 깔끔하게 출력하므로 일상적인 일일 점검에 유용합니다.
  • last -f [파일명]: 기본 경로인 `/var/log/wtmp` 외에 사용자가 임의로 백업해 둔 로그 파일이나, 리눅스의 로그 로테이트(Logrotate) 정책에 의해 분할 보관 중인 과거 로그(예: `wtmp.1`)를 지정하여 조회할 때 사용합니다.
  • last -i (--ip): `FROM` 필드에 도메인 네임(호스트명) 대신 순수 IPv4 주소로 강제 변환하여 출력합니다. DNS 역조회로 인해 명령어 반응 속도가 느려지는 현상을 방지하고, 방화벽(IPTables, UFW) 차단 룰에 IP를 즉각 등록해야 할 때 가독성을 극대화해 줍니다.
  • last -x: 시스템 로그인 기록뿐만 아니라, 시스템의 가동 및 종료 상태를 나타내는 `run level` 변경 기록과 `shutdown` 스크립트 실행 시점까지 확장하여 출력합니다. 서버의 의문의 다운타임 원인을 조사할 때 필수적입니다.
  • last [계정명] 또는 last [TTY]: 특정 대상을 지정하여 필터링합니다. last root를 입력하면 최고 관리자 권한의 로그인 이력만 추적하며, last pts/0을 입력하면 해당 터미널 라인을 점유했던 인원들의 동향을 감시할 수 있습니다.

4. 대규모 인프라 관리를 위한 실무 고급 보안 테크닉

실제 엔터프라이즈 환경에서는 `last` 명령어의 결과값을 정기적으로 파싱하여 비인가 접근을 탐지하는 자동화 셸 스크립트를 구성합니다.

특히, 해커들이 흔히 사용하는 수법 중 하나는 업무 외 시간(야간, 주말)을 노려 침투하는 것입니다. 특정 날짜나 시간대의 기록만 압축하여 모니터링하고 싶다면 리눅스의 타임프레임 옵션인 `-s`(since)와 `-t`(until)를 연동할 수 있습니다.

# 2026년 5월 1일 오전 9시부터 5월 15일 오후 6시까지 발생한 root 계정의 원격 로그인 IP만 추출
last root -s 20260501090000 -t 20260515180000 -i | awk '{print $1, $3, $4, $5, $6}'

이처럼 파이프라인(`|`)과 `awk`, `grep` 등의 텍스트 처리 유틸리티를 조합하면, 별도의 상용 모니터링 소프트웨어 없이도 주기적인 자체 보안 감사 템플릿을 완성할 수 있습니다.


5. 결론 및 향후 실무 제언

리눅스 시스템 운영의 핵심은 인프라 내부에서 발생하는 모든 이벤트를 관리자의 통제 시야 아래 두는 것입니다. 오늘 살펴본 last 명령어는 사후 약방문식의 장애 처리가 아닌, 비정상 세션을 조기에 발견하고 차단함으로써 대형 보안 사고를 미연에 방지할 수 있는 방어 전선의 최전방 도구입니다.

보다 완벽한 시스템 보안 상태를 유지하고 싶으시다면, 지금 바로 운영 중인 서버의 터미널을 열고 last -20 -i를 입력하여 알 수 없는 외부 공인 IP의 접근 흔적이 있는지, 혹은 주말 동안 이상한 reboot 로그가 찍히지 않았는지 점검해 보시는 것을 강력히 권장합니다. 침해 흔적은 언제나 흔적을 남기며, 그 흔적을 읽는 눈이 바로 시스템 엔지니어의 경쟁력입니다.

만약 `last` 명령어로 조회된 특정 IP의 정체가 의심스럽거나, 접속 기록이 아예 누락되는 이상 현상, 혹은 로그 로테이션 설정법 등 추가적인 트러블슈팅 가이드가 필요하시다면 언제든 아래 댓글로 질문을 남겨주세요. 15년 경력의 인프라 관리 노하우를 담아 명쾌한 답변을 드리겠습니다. 본 포스팅이 유익했다면 블로그 구독과 공유를 부탁드립니다!

리눅스 세션 관리 및 로그인 이력 확인 명령어 비교 분석
명령어 참조 데이터 소스 및 주요 특징 추천 실무 활용 상황
last /var/log/wtmp 바이너리 로그 참조. 시스템이 기동된 이후 누적된 모든 성공한 로그인/로그아웃 이력reboot/shutdown 히스토리를 역순으로 출력. 과거의 접속 이력 추적, 침해 사고 발생 시 해커의 IP 주소 및 유입 시간대 정밀 포렌식 감사용.
lastb /var/log/btmp 바이너리 로그 참조. 잘못된 비밀번호 입력 등으로 인해 발생한 모든 실패한 로그인 시도(Bad Login) 기록만 선별하여 출력. 외부 무작위 대입 공격(Brute Force Attack) 징후를 탐지하고 공격 IP를 사전에 차단하고자 할 때.
lastlog /var/log/lastlog 파일 참조. 시스템에 등록된 모든 사용자가 가장 마지막으로 로그인했던 최종 시점을 계정별 단 한 줄씩 요약하여 매핑 표기. 장기 미접속 휴면 계정을 전수 조사하여 정리하거나 유령 계정의 오용 유무를 일괄 체크할 때.

댓글 쓰기

다음 이전