Linux에서 마지막 명령을 사용하는 방법

누가, 언제, 어디에서 접속했을까? 정보 보안의 기본은 리눅스 시스템에 누가 접근했는지 파악하는 것입니다. 이 글에서는 그 방법을 알아보겠습니다.

wtmp 파일이란?

리눅스와 macOS 같은 유닉스 계열 운영체제는 뛰어난 로깅 기능을 제공합니다. 시스템 내부에는 거의 모든 활동에 대한 로그 기록이 존재합니다. 그중에서 wtmp 파일은 특히 중요합니다. 여기서 ‘w’는 “누가(who)” 또는 “언제(when)”를 의미하며, ‘tmp’는 “임시(temporary)” 또는 “타임스탬프(timestamp)”를 나타내는 것으로 추정됩니다.

정확한 것은 wtmp가 모든 로그인 및 로그아웃 이벤트를 기록하는 로그 파일이라는 점입니다. wtmp 로그 데이터를 분석하는 것은 시스템 관리자가 보안을 고려하는 첫 단계입니다. 개인 사용자에게는 중요하지 않을 수 있지만, 컴퓨터를 공유하는 환경에서는 누가 언제 접속했는지 검토하는 것이 흥미로울 수 있습니다.

리눅스의 다른 텍스트 기반 로그 파일들과 달리 wtmp는 바이너리 파일입니다. 따라서 데이터를 확인하려면 특수 도구를 사용해야 합니다. 그 도구는 바로 ‘last’ 명령어입니다.

‘last’ 명령어 사용법

‘last’ 명령어는 wtmp 로그에서 데이터를 읽어 터미널에 보여주는 역할을 합니다.

터미널에 ‘last’를 입력하고 엔터를 누르면 로그 파일의 전체 기록을 볼 수 있습니다.

last

wtmp의 각 레코드는 터미널 창에 표시되며, 왼쪽부터 오른쪽으로 다음과 같은 정보가 포함됩니다.

  • 로그인한 사용자의 사용자 이름
  • 로그인한 터미널 (예: :0은 로컬 접속)
  • 로그인한 컴퓨터의 IP 주소
  • 로그인 시간 및 날짜
  • 세션 지속 시간

마지막 줄은 로그에 가장 먼저 기록된 세션의 날짜와 시간을 나타냅니다.

‘reboot’라는 가상 사용자의 항목은 시스템이 재부팅될 때마다 기록됩니다. 터미널 필드는 커널 버전으로 대체되며, 해당 항목의 세션 지속 시간은 시스템 가동 시간을 의미합니다.

특정 줄 수만 표시하기

‘last’ 명령어를 단독으로 사용하면 전체 로그가 표시되어 터미널 창을 넘어가게 됩니다. 보통 가장 최근의 로그 데이터를 보고 싶을 것입니다.

출력할 줄 수를 지정하여 원하는 부분만 볼 수 있습니다. 예를 들어, 최근 5줄을 보려면 ‘-5’ 옵션을 사용합니다.

last -5

이렇게 하면 로그의 가장 최신 5개 줄이 표시됩니다.

원격 사용자 네트워크 이름 표시

‘-d’ 옵션을 사용하면 원격 사용자의 IP 주소를 DNS(도메인 이름 시스템)를 통해 네트워크 이름으로 변환하여 보여줍니다.

last -d

IP 주소를 네트워크 이름으로 변환하는 것이 항상 가능한 것은 아니지만, 가능한 경우 명령어는 이를 수행합니다.

IP 주소 및 네트워크 이름 숨기기

IP 주소나 네트워크 이름이 필요하지 않다면, ‘-R’ 옵션을 사용하여 해당 필드를 숨길 수 있습니다.

이 옵션은 출력 결과를 더 깔끔하게 만들어주므로 다음 예시에서도 사용됩니다. 보안상의 이유로 비정상적인 활동을 조사할 때 해당 필드를 숨기는 것이 유용할 수 있습니다.

특정 날짜 이후의 기록만 표시

‘-s’ 옵션을 사용하여 특정 날짜 이후의 로그인 이벤트만 표시할 수 있습니다. 예를 들어, 2019년 5월 26일 이후의 기록만 보려면 다음 명령어를 사용합니다.

last -R -s 2019-05-26

출력은 지정된 날짜의 00:00부터 로그 파일의 최신 기록까지 발생한 로그인 이벤트를 보여줍니다.

특정 날짜까지 검색

‘-t’ 옵션을 사용하여 종료 날짜를 지정할 수 있습니다. 이를 통해 관심 있는 두 날짜 사이의 로그인 기록만 선택할 수 있습니다.

다음 명령어는 26일 00:00부터 27일 00:00까지의 로그인 기록을 표시합니다. 따라서 26일 하루 동안 발생한 세션만 볼 수 있습니다.

날짜 및 시간 형식

‘-s’ 및 ‘-t’ 옵션과 함께 날짜와 시간을 사용할 수 있습니다. 다음과 같은 다양한 시간 형식을 지원합니다.

  • YYYYMMDDhhmmss
  • YYYY-MM-DD hh:mm:ss
  • YYYY-MM-DD hh:mm (초는 00으로 설정)
  • YYYY-MM-DD (시간은 00:00:00으로 설정)
  • hh:mm:ss (날짜는 오늘로 설정)
  • hh:mm (날짜는 오늘, 초는 00으로 설정)
  • now
  • yesterday (시간은 00:00:00으로 설정)
  • today (시간은 00:00:00으로 설정)
  • tomorrow (시간은 00:00:00으로 설정)
  • +5분
  • -5일

주의해야 할 점은 몇 가지 형식은 제대로 작동하지 않을 수 있다는 것입니다.

이 예시에서는 두 번째와 세 번째 형식(-,- 포함)이 작동하지 않았습니다. 여러 리눅스 배포판(Ubuntu, Fedora, Manjaro)에서 테스트되었습니다.

last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00

보시다시피, 명령어는 아무런 기록도 반환하지 않았습니다.

하지만 날짜 및 시간 형식을 ‘YYYYMMDDhhmmss’로 변경하면 정상적으로 작동합니다.

last -R -s 20190526110000 -t 20190527130000

상대적인 시간 단위로 검색

현재 날짜와 시간을 기준으로 분 또는 일 단위의 기간을 지정할 수도 있습니다. 다음 예시는 이틀 전부터 하루 전까지의 기록을 보여줍니다.

last -R -s -2days -t -1days

yesterday, today, now 사용

‘yesterday’ 및 ‘tomorrow’는 어제와 내일 날짜의 약어로 사용할 수 있습니다.

last -R -s yesterday -t today

여기에서 오늘 기록이 제외되는 이유는 예상된 동작입니다. 명령어는 시작 날짜부터 종료 날짜까지의 기록을 요청하며, 종료 날짜 자체는 포함하지 않습니다.

‘now’ 옵션은 “오늘 현재 시간”을 의미합니다. 00:00부터 명령어가 실행된 시점까지 발생한 로그인 이벤트를 보려면 다음 명령어를 사용하십시오.

last -R -s today -t now

이렇게 하면 현재 로그인된 이벤트까지 모든 로그인 이벤트가 표시됩니다.

‘-p’ (현재) 옵션

‘-p’ 옵션을 사용하면 특정 시점에 누가 로그인했는지 확인할 수 있습니다. 로그인/로그아웃 시간은 중요하지 않고, 지정한 시간에 컴퓨터에 로그인한 사용자를 보여줍니다.

날짜를 지정하지 않고 시간만 입력하면 “오늘”을 의미하는 것으로 간주됩니다.

last -R -p 09:30

로그아웃 시간이 표시되지 않는 사용자는 현재 로그인되어 있는 사용자입니다. 지정된 시간 이후에 컴퓨터가 재부팅되지 않았다면 여전히 실행 중인 것으로 표시됩니다.

‘-p’ 옵션과 ‘now’ 속기를 함께 사용하면 명령어를 실행할 때 로그인한 사용자를 알 수 있습니다.

last -R -p now

이는 ‘who’ 명령어를 사용하는 것과 유사한 결과를 보여주는 다소 복잡한 방법입니다.

‘lastb’ 명령어

‘lastb’ 명령어는 실패한 로그인 시도를 보여주는 명령어입니다. ‘btmp’ 로그 파일에서 데이터를 읽어옵니다. 여기서 ‘b’는 ‘bad’를 의미합니다.

‘lastb’는 ‘last’와 동일한 옵션을 사용할 수 있으며, 로그인 시도가 실패했기 때문에 항목의 지속 시간은 모두 00:00입니다.

‘lastb’ 명령어는 ‘sudo’ 권한이 필요합니다.

sudo lastb -R

마무리

리눅스 시스템에 누가, 언제, 어디서 로그인했는지 파악하는 것은 매우 중요한 정보입니다. 실패한 로그인 시도 정보와 결합하면 의심스러운 활동을 식별하고 조사하는 첫 단계를 밟을 수 있습니다.