소개
이 랩에서는 강력한 journalctl 도구 및 기타 명령줄 유틸리티를 사용하여 Kali Linux 환경에서 로그 분석의 필수 사항을 배우게 됩니다. 초보자를 위해 설계된 이 실습은 시스템 관리 및 디버깅을 위한 기본적인 기술에 중점을 둡니다. LabEx VM 의 Kali Linux 컨테이너 내에서 시스템 로그에 액세스하고, 보고, 분석하는 방법을 탐구하게 됩니다.
단계별 실습을 통해 /var/log와 같은 디렉토리에 저장된 시스템 로그를 보고, 특정 서비스별로 로그를 필터링하고, 오류를 검색하고, 추가 분석을 위해 로그를 내보낼 것입니다. 모든 작업은 터미널을 열 때 자동으로 진입하게 되는 Kali Linux 컨테이너의 셸 내에서 수행됩니다. 이 랩은 시스템 이벤트를 모니터링하고 문제 해결하는 기술을 구축할 수 있는 제어된 환경을 제공합니다.
Kali Linux 에서 시스템 로그 보기
이 첫 번째 단계에서는 LabEx VM 의 Kali Linux 컨테이너 내에서 시스템 로그를 보는 방법을 배우게 됩니다. 시스템 로그는 Linux 시스템에서 이벤트, 오류 및 활동을 기록하므로 시스템 문제를 모니터링하고 문제 해결하는 데 매우 중요합니다. 초보자에게는 이러한 로그에 액세스하는 방법을 이해하는 것이 시스템 관리의 기본 기술입니다.
LabEx VM 환경에서 터미널을 열면 자동으로 Kali Linux 컨테이너의 셸에 연결됩니다. 컨테이너를 수동으로 시작하거나 셸에 진입할 필요가 없습니다. 환경이 이미 설정되어 있습니다. 이 랩의 모든 작업은 이 컨테이너의 터미널 내에서 수행됩니다.
Linux 시스템은 /var/log와 같은 디렉토리에 로그를 저장합니다. 일반적인 로그 파일에는 일반 시스템 메시지를 위한 /var/log/syslog와 인증 관련 이벤트를 위한 /var/log/auth.log가 있습니다. 간단한 명령을 사용하여 이러한 파일의 내용을 보는 것부터 시작해 보겠습니다.
터미널에서 다음 명령을 실행하여 /var/log/syslog 파일의 마지막 10 줄을 표시합니다.
tail -n 10 /var/log/syslog
이 명령은 tail을 사용하여 로그 파일의 가장 최근 항목을 표시합니다. 출력은 다음과 유사하게 표시되지만, 정확한 내용은 시스템의 활동에 따라 다릅니다.
Oct 15 10:22:34 kali-container kernel: [ 1234.567890] some kernel message
Oct 15 10:23:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
...
각 줄에는 일반적으로 타임스탬프, 호스트 이름, 서비스 또는 프로세스 이름 및 이벤트 세부 정보가 포함됩니다. 이 출력은 시스템 로그에 성공적으로 액세스했음을 확인합니다.
디버깅에 유용한 실시간으로 새로운 로그 항목을 지속적으로 모니터링하려면 다음 명령을 실행합니다.
tail -f /var/log/syslog
이렇게 하면 새 항목이 추가될 때 표시됩니다. 모니터링을 중지하려면 Ctrl + C를 눌러 터미널 프롬프트로 돌아갑니다.
다음으로, 로그인 시도 및 기타 보안 이벤트를 기록하는 인증 로그 파일 /var/log/auth.log를 확인해 보겠습니다. 다음 명령을 실행합니다.
tail -n 5 /var/log/auth.log
출력은 다음과 같이 인증 관련 활동을 표시할 수 있습니다.
Oct 15 10:20:01 kali-container sudo: root : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/bin/bash
...
이 단계에서는 로그 보기를 소개하며, 이는 기본적이지만 필수적인 기술입니다. 다음 단계에서는 특정 정보를 위해 이러한 로그를 필터링하고 분석하여 이를 기반으로 구축할 것입니다.
로그 보기를 위한 journalctl 설치 및 사용
tail과 같은 기본 명령을 사용하여 로그를 보는 방법을 살펴보았으므로, 이제 journalctl이라는 더 강력한 도구로 이동해 보겠습니다. 이 도구는 Kali Linux 를 포함한 최신 Linux 배포판에서 시스템 및 서비스 관리자인 systemd에서 관리하는 로그를 쿼리하고 표시하는 데 사용됩니다. 초보자에게는 journalctl을 배우는 것이 중요합니다. 이는 자세한 시스템 로그에 액세스하는 구조화된 방법을 제공하기 때문입니다.
이미 Kali Linux 컨테이너의 셸에 있으므로 (터미널을 열 때 자동으로 진입), 수동으로 탐색하거나 시작할 필요가 없습니다. 그러나 journalctl은 최소 컨테이너 설정에서 미리 설치되지 않거나 완전히 작동하지 않을 수 있으므로, 패키지 목록을 업데이트하고 필요한 구성 요소를 설치하여 필요한 도구가 있는지 확인합니다.
다음 명령을 실행하여 패키지 목록을 업데이트하고 필요한 경우 systemd 구성 요소를 설치합니다.
apt update
apt install -y systemd
이러한 명령은 패키지 저장소를 새로 고치고 journalctl을 포함하는 systemd를 설치합니다. 설치가 완료될 때까지 기다리십시오. 잠시 시간이 걸릴 수 있습니다.
설치가 완료되면 journalctl을 사용하여 시스템 로그를 볼 수 있습니다. 가장 최근 로그 항목을 표시하려면 다음 명령을 실행합니다.
journalctl -n 10
-n 10 옵션은 출력을 마지막 10 줄로 제한합니다. 출력은 다음과 유사하게 표시되지만, 시스템의 활동에 따라 다릅니다.
Oct 15 10:25:01 kali-container systemd[1]: Starting system activity...
Oct 15 10:25:02 kali-container systemd[1]: Started system activity...
...
이 출력은 타임스탬프, 서비스 이름 및 메시지가 있는 로그 항목을 보여줍니다. 이와 유사한 내용이 표시되면 journalctl이 올바르게 작동하고 있음을 의미합니다. 출력이 표시되지 않거나 오류가 발생하면, 이는 컨테이너 환경의 제한된 로그 데이터 때문일 수 있으며, 이는 이 랩 설정에서는 정상입니다.
tail -f와 유사하게 실시간으로 로그를 보려면 다음 명령을 실행합니다.
journalctl -f
이렇게 하면 새 로그 항목이 지속적으로 표시됩니다. 모니터링을 중지하고 터미널 프롬프트로 돌아가려면 Ctrl + C를 누르십시오.
이 단계는 기본 파일 보기보다 더 발전된 로그 보기를 위해 journalctl을 사용하는 방법을 이해하는 데 도움이 됩니다. 다음 단계에서는 특정 서비스에 대한 이러한 로그를 필터링하는 방법을 배우게 됩니다.
journalctl 을 사용하여 서비스별 로그 필터링
journalctl을 사용하여 로그를 볼 수 있는 능력을 바탕으로, 이 단계에서는 특정 서비스와 관련된 항목을 표시하도록 로그를 필터링하는 데 중점을 둡니다. 초보자에게 필터링은 핵심 기술입니다. 시스템 로그는 종종 다양한 프로세스의 메시지를 혼합하여 포함하므로, 관련 정보를 격리하면 특정 문제 해결에 도움이 됩니다.
여전히 터미널을 열 때 자동으로 진입하는 Kali Linux 컨테이너의 셸 내에서 작업하고 있습니다. 수동 탐색이나 컨테이너 시작은 필요하지 않습니다. Linux 에서 예약된 작업을 관리하는 cron과 같은 특정 서비스에 대한 로그를 필터링하기 위해 journalctl을 사용합니다. 이렇게 하면 관련 없는 데이터에 압도되지 않고 단일 구성 요소와 관련된 로그에 집중할 수 있습니다.
cron 서비스에 대한 로그를 필터링하려면 다음 명령을 실행합니다.
journalctl -u cron
-u 옵션은 필터링할 유닛 (서비스) 을 지정합니다. 이 경우 cron입니다. 출력은 시스템 활동에 따라 다음과 유사하게, 특히 cron 서비스와 관련된 로그를 표시합니다.
Oct 15 10:30:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
Oct 15 10:30:02 kali-container cron[1235]: (CRON) STARTUP (fork ok)
...
이 출력은 타임스탬프 및 이벤트 세부 정보를 포함하여 cron 관련 항목만 표시합니다. 출력이 표시되지 않으면, 이 컨테이너에서 cron 서비스가 최근 로그를 생성하지 않았을 수 있으며, 이는 학습 목적으로는 괜찮습니다.
cron 로그를 사용할 수 없거나 다른 서비스를 탐색하려는 경우, SSH 연결을 처리하는 sshd에 대해 필터링을 시도할 수 있습니다 (설치된 경우). 먼저 다음을 실행하여 openssh-server가 설치되어 있는지 확인합니다.
apt install -y openssh-server
설치가 완료될 때까지 기다립니다. 그런 다음, 다음 명령으로 sshd에 대한 로그를 필터링합니다.
journalctl -u ssh
서비스가 활성화된 경우 출력은 SSH 관련 이벤트를 표시할 수 있습니다. 출력이 표시되지 않더라도, 이 랩에서는 필터링 프로세스를 배우는 데 중점을 두므로 괜찮습니다.
이 단계에서는 journalctl을 사용하여 특정 서비스로 로그 데이터를 좁히는 방법을 배웁니다. 다음 단계에서는 이러한 로그 내에서 오류를 검색하여 잠재적인 문제를 식별하는 방법을 배우게 됩니다.
journalctl 을 사용하여 로그에서 오류 검색
서비스별로 로그를 필터링하는 방법을 배웠으므로, 이 단계에서는 journalctl을 사용하여 시스템 로그에서 오류를 검색하는 방법을 안내합니다. 초보자에게 로그에서 오류를 식별하는 것은 문제 해결에 매우 중요합니다. 로그에는 종종 서비스 또는 애플리케이션의 문제점을 나타내는 메시지가 포함되어 있기 때문입니다. 이 기술은 주의가 필요한 문제를 신속하게 찾아내는 데 도움이 됩니다.
여전히 터미널을 열 때 자동으로 액세스되는 Kali Linux 컨테이너의 셸 내에서 작업하고 있습니다. 추가 설정이나 탐색은 필요하지 않습니다. journalctl을 사용하여 우선 순위 수준을 기반으로 로그를 필터링하여 오류 메시지를 검색합니다. 여기서 오류는 일반적으로 특정 심각도로 기록됩니다.
journalctl에서 로그 항목은 우선 순위 수준별로 분류되며, 3은 오류 (심각한 문제) 를 나타내고 4는 경고를 나타냅니다. 모든 로그에서 오류 메시지를 검색하려면 다음 명령을 실행합니다.
journalctl -p 3
-p 3 옵션은 로그를 필터링하여 우선 순위 수준 3(오류) 의 항목만 표시합니다. 출력은 시스템 활동에 따라 다음과 유사하게 표시될 수 있습니다.
Oct 15 10:35:10 kali-container some-service[5678]: error: failed to initialize module
...
이 출력은 타임스탬프 및 세부 정보와 함께 오류 메시지를 표시합니다. 출력이 표시되지 않으면, 로그에 이 우선 순위 수준의 최근 오류가 없음을 의미하며, 이는 제어된 컨테이너 환경에서는 일반적입니다.
오류와 함께 경고를 포함하려면 다음을 실행하여 우선 순위 수준 3 과 4 를 검색할 수 있습니다.
journalctl -p 3..4
이 명령은 오류와 경고를 모두 표시합니다. 출력에는 다음과 같은 추가 줄이 포함될 수 있습니다.
Oct 15 10:36:15 kali-container another-service[7890]: warning: connection timeout
...
출력이 표시되지 않더라도, 이 랩에서는 검색 프로세스를 배우는 것이 목표이므로 괜찮습니다. 이 단계는 journalctl을 사용하여 로그에서 중요한 문제를 식별하는 기능을 제공합니다. 다음 단계에서는 추가 분석을 위해 이러한 로그를 내보내는 방법을 배우게 됩니다.
journalctl 을 사용하여 분석을 위한 로그 내보내기
이 단계에서는 journalctl을 사용하여 추가 분석을 위해 시스템 로그를 내보내는 방법을 배웁니다. 로그를 보고, 필터링하고, 검색했던 이전 단계를 기반으로, 내보내기를 통해 특정 로그 데이터를 파일에 저장할 수 있습니다. 이는 자세한 검토 또는 문제 해결을 위해 다른 사람과 공유하는 데 유용합니다. 초보자에게 이 기술은 원본 로그에 반복적으로 액세스하지 않고도 결과를 문서화하는 데 도움이 됩니다.
여전히 터미널을 열 때 자동으로 진입하는 Kali Linux 컨테이너의 셸 내에서 작업하고 있습니다. 수동 컨테이너 시작 또는 탐색은 필요하지 않습니다. journalctl을 사용하여 로그를 추출하고 /root 디렉토리의 파일로 출력을 리디렉션하여 쉽게 액세스할 수 있도록 합니다.
최근의 모든 로그를 /root 디렉토리에 있는 system_logs.txt라는 파일로 내보내 보겠습니다. 다음 명령을 실행합니다.
journalctl -n 50 > /root/system_logs.txt
-n 50 옵션은 출력을 마지막 50 개 로그 항목으로 제한하고, > 기호는 출력을 지정된 파일로 리디렉션합니다. 파일에 저장되므로 터미널에서 출력을 볼 수 없습니다. 파일이 생성되었고 데이터가 포함되어 있는지 확인하려면 다음을 실행합니다.
cat /root/system_logs.txt
출력은 타임스탬프 및 메시지를 포함하여 journalctl -n 50으로 본 것과 유사한 저장된 로그 항목을 표시합니다.
다음으로, cron과 같은 특정 서비스별로 필터링된 로그를 cron_logs.txt라는 파일로 내보내 보겠습니다. 다음 명령을 실행합니다.
journalctl -u cron > /root/cron_logs.txt
이렇게 하면 cron 관련 로그만 /root/cron_logs.txt에 저장됩니다. 다음을 실행하여 내용을 확인합니다.
cat /root/cron_logs.txt
출력은 사용 가능한 경우 cron 서비스 로그를 표시하여 내보내기가 성공했음을 확인합니다.
마지막으로, 오류 로그를 error_logs.txt라는 파일로 내보내 보겠습니다. 다음 명령을 실행합니다.
journalctl -p 3 > /root/error_logs.txt
이렇게 하면 오류 메시지가 지정된 파일에 저장됩니다. 다음으로 내용을 확인합니다.
cat /root/error_logs.txt
이 출력은 오류 로그가 있는 경우 표시합니다. 이 단계를 완료하면 시스템 관리 및 디버깅에 유용한 기술인 로그 데이터를 나중에 검토할 수 있도록 저장하는 방법을 배웠습니다.
요약
이 랩에서는 journalctl 도구와 기본적인 명령줄 유틸리티를 사용하여 Kali Linux 에서 로그 분석의 필수 사항을 배웠습니다. tail과 같은 명령을 사용하여 /var/log 디렉토리에서 시스템 로그를 보는 것으로 시작하여, 보다 구조화된 로그 액세스를 위해 journalctl을 사용하는 것으로 발전했습니다. 실습 단계를 통해 LabEx VM 의 Kali Linux 컨테이너 내에서 서비스별로 로그를 필터링하고, 오류를 검색하고, 추가 분석을 위해 로그를 내보냈습니다. 이러한 기본적인 기술은 Linux 환경에서 효과적인 시스템 관리 및 디버깅을 위한 역량을 갖추도록 해줍니다.


